疾病预测和天气分析练习赛
肝了半天再加一个晚上。。
之前学了一小段时间的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)
真的是绝了绝了。。。
明天继续肝