肝了半天再加一个晚上。。
之前学了一小段时间的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)
真的是绝了绝了。。。
明天继续肝