疾病預測和天氣分析練習賽

Jozky86發表於2020-09-27

肝了半天再加一個晚上。。
之前學了一小段時間的TensorFlow,但是今天練習賽時發現根本沒啥用。。。第一階段早就做完了,今天做的都是第二階段,都是啥玩意題
在這裡插入圖片描述
又是偏度,又是求係數,又是擬合KNN,真的把人看吐了,基本上都是現學現用,查閱了半天資料,翻了無數遍csdn才有些頭緒
結構化資料的題應該做出八道(做出八道才可以開啟第三階段)
其中有四個題是蒙出來的。。。因為這四個題基本上輸出就是0或1,雖然有提交次數,但還是頑強的試出來了。。。
做出四個1,2,3,5
求偏度和boxcox1p變化都是有固定函式的,直接套用即可
偏度:skew()
第二題:計算體重的偏度

import scipy.stats as st
import pandas as pd
pd.options.display.max_columns = None
pd.options.display.max_rows = None
path1 = "/home/kesci/input/liver_df9751/結構化資料訓練營.csv"    # chipotle.tsv
df = pd.read_csv(path1)
df.head(30)
aveTime = df['Weight\n體重'].median()
chipo['Weight\n體重'].nunique()
df2 = df.fillna(aveTime)
col = df2.iloc[:, 3]
arrs = col.values
##print(arrs)
w=st.skew(arrs) # 計算偏度
## 0.7565543738808015
print('%.4f'%w)

boxcox1p變換:boxcox1p()
用boxcox1p對體重做變換,lambda=0.1,變化後的資料的偏度是多少?

import scipy.stats as st
import pandas as pd
from scipy.special import boxcox1p
pd.options.display.max_columns = None
pd.options.display.max_rows = None
path1 = "/home/kesci/input/liver_df9751/結構化資料訓練營.csv"    # chipotle.tsv
df = pd.read_csv(path1)

aveTime = df['Weight\n體重'].median()
wt = df['Weight\n體重'].fillna(aveTime)

lam=0.1
wt = boxcox1p(wt, lam)
w=st.skew(wt.values) # 計算偏度
## 0.7565543738808015
print('%.4f'%w)

第五題我真的要好好說說,真的絕了,線上題:
用上題同樣的資料擬合KNN(K=5),分類結果和真實結果不一致的有多少個?
上題同樣的資料指的是:只選取年齡、體重和 ALF(缺失值用中位數填充,不做任何額外處理)

我一遍一遍的翻資料,看了無數個KNN的文章,重要在一個文章找到KNN的用法,KNN也是有函式的KNeighborsClassifier(n_neighbors=5),裡面的n_neighbors也就是題目中的K
我們得到了分類結果,但是並不夠,真實結果是什麼?我們一直沒想明白,因為我們把所有資料都作為訓練集來訓練KNN,就是KNN的生成是需要資料的,然後還需要資料來測試,但是題目只給了一套資料,後來我在想會不會是自身生成的KNN來檢測自身?也就是用訓練集生成的分類結果來檢驗自身的分類結果
於是我和同學輸出了分類結果和原資料自身的結果,發現不相等,差值即為答案

import scipy.stats as st
import pandas as pd
import regex as re
pd.options.display.max_columns = None
pd.options.display.max_rows = None
path1 = "/home/kesci/input/liver_df9751/結構化資料訓練營.csv"    # chipotle.tsv
# path2="/home/kesci/inputver_df9751/結構化資料訓練營測試集.csv"
data = pd.read_csv(path1)
# data_test=pd.read_csv(path1)
col_names=list(data.columns)
col=[]
for i in range(len(col_names)):
    if re.findall(r"\u2028(.+)",col_names[i])!=[]:
        col.append(re.findall(r"\u2028(.+)",col_names[i])[0])
    elif re.findall(r"\n(.+)",col_names[i])!=[]:
        col.append(re.findall(r"\n(.+)",col_names[i])[0])
    else:
        col.append(col_names[i])
## 修改dataframe列名
data.columns=col
feature1 = ['體重','年齡','ALF']
for i in feature1:
    ave=data[i].median()
    data[i] = data[i].fillna(ave)
    print(data[i].values)
a_zi=[]
for i in range(len(data)):
    c=[data['體重'][i],data['年齡'][i]]
    a_zi.append(c)

from sklearn.neighbors import KNeighborsClassifier

 
neigh = KNeighborsClassifier(n_neighbors=5)
neigh.fit(a_zi, data['ALF'])
cnt=0
for i in range(len(a_zi)):
    if(neigh.predict([a_zi[i]])==data['ALF'][i]):
        cnt+=1
print(len(a_zi),cnt,len(a_zi)-cnt)


真的是絕了絕了。。。
明天繼續肝

相關文章