今天记录一下参加的DrivenData平台的一个数据类竞赛当Score:0.8515,排名(209/1808)前11.5%,还很菜,待提高ing.
DrivenData是什么呢?目前有很多的数据类竞赛平台,较为大家熟知的有kaggle、天池等,DrivenData也是一个数据竞赛平台,上面有很多数据挖掘类竞赛,可以根据赛题类型、困难度进行选择适合自己的进行参加,有很多竞赛还是很适合初学者的。
我参与的是疫苗接种情况预测,全名: “Flu Shot Learning: Predict H1N1 and Seasonal Flu Vaccines”.也可以从此链接直达。
下面介绍一下这个赛题的基本情况:
一、赛题简介
1.问题描述
首先这是一个分类问题,是一个双标签分类问题;要求我们预测两个变量h1n1_vaccine和seasonal_vaccine 分别代表个人接受H1N1和季节性流感疫苗的可能性
该竞赛的评分标准是ROC_AUC,即求出接种每种疫苗的概率提交后与真实值计算ROC_AUC,越高越好。提交的值是一个人获得每种疫苗的概率,而不是二进制标签。
注意:不是多分类,是双标签!!!
2.数据和特征
该赛题数据来源为:2009年底和2010年初,美国进行的2009年全国H1N1流感调查 。共计26707条数据,35个特征,其中12个文本特征,23个离散数字特征。
二、数据预处理
首先,里边有很多文本特征,文本数据是离散的描述型数据,因此将其用形如0,1,2….的离散数字表示,这里没有用独热码,因为尝试过用独热码,会产生特别多维特征,但没有实际意义。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/5dbbffe471f323219fe28e4b2ebb3ede.png)
在这个缺失值可视化图中,每一列代表一个特征的数据确实情况,从图中可以看出确实数据的位置,白色位置代表数据缺失。
从下面的缺失值条形图可直观看出各个特征的缺失百分比,更方便判断如何处理缺失值:
从图中可以看出有较多特征出现缺失,缺失维度较多,但缺失百分比相对不高,因此要对其进行填充。利用KNN方法进行空缺值填充:
基本思路:循环遍历,依次将每一维含有缺失值的特征作为Y,当前不含有缺失值的 所有特征集合作为X。
①利用在当前Y上未空缺的样本作为训练集,进行K近邻学习器的训练,当前Y缺失的样本作为测试集,利用所学得的学习器对其进行预测。
②将预测值Y填充到对应缺失位置。
③将填充后的数据作为下一轮学习的数据集,填充完成的特征Y添加到输入特征集X,进行下一个缺失特征的填充
……
循环以上步骤,直到所有特征均填充完成,数据集没有缺失值。
首先导入一些之后需要的包
clf=KNeighborsClassifier(n_neighbors=2)
mfeature=ffeature.copy()
for i in range(0,len(ffeature)):
tfeature.append(ffeature[i])
train=train_data[tfeature]
test=test_set_features[tfeature]
#把没有缺失值放进training_nonull
training_nonull=train[train.isnull().any(axis=1)!= True].values
training_nonull=pd.DataFrame(training_nonull)
training_nonull.columns=tfeature
#把有缺失值放进training_null
training_null=train[train.isnull().any(axis=1)== True].values
training_null=pd.DataFrame(training_null)
training_null.columns=tfeature
#处理验证集,把没有缺失值放进test_non