项目实操

性别预测-机器学习,Hadoop,Hive,MapReduce第二篇

基于手机app用户的性别预测2-数据预处理

(特此声明,因代码需保密,所以在此仅提供方法做参考,望各位读者见谅)

3.数据预分析-正负样本统计:

由于数据存在着正负样本不均衡的情况,所以我们要事先统计正负样本所占比例,如果正负样本比例相差过大, 那么在选择算法的时候就要避免选择对数据正负样本比例有太高要求的算法,以免影响准确度。 像此例就属于正负样本不均衡的例子,训练集中一共有3579名用户,其中,男性用户(label=1)2709位,占比 75.69%;女性用户(label=0)870位,占比24.31%。 最后算法选择上选择了梯度提升树算法。

  那么我们如何进行正负样本统计呢?

使用到了pandas库,如没有pandas库,按以下命令安装。 主要用到了pandas库的read_csv(读取csv文件),drop_duplicates(去重),count(统计),value_counts(排序统计,陈小胖的另一篇博文有value_counts和count的详细对比)

[cc lang=”python”]import pandas as pd[/cc]

1)读取训练集.csv。     2)根据id进行去重。     3)统计id,得到总人数。     4)依据label标签,统计男性(label=1)和女性(label=0)的用户数量。     5)求出男性和女性所占比值。 6)结果如下。

4.建模预测-构建稀疏矩阵

由于原始训练集给的是一行代表一个用户使用一款app的情况,但是通常情况下,在机器学习任务中,样本数据中的每一行数据都应该包含了一个样本的全部特征。也就是说一行应该包含一个用户使用所有app的情况。所以我们需要对样本数据表格式进行转换。转换后样本结构表如下图所示。

那么如何进行转换呢?

转换后的数据表中每一个用户对应着一个样本(行),每一个app作为一个特征(列),用户使用某一个app的频率作为特征值(值)进行矩阵转换。 如果用户不使用某一款app,那么特征值为0,可想而知,转换后的表格会出现很多特征值为0的项,表格会很稀疏。所以我们转换的目的就是将稠密矩阵转换成稀疏矩阵。这样也会节省资源,提升速速。当然更是为了机器学习做准备。 其中我们用到了pandas库,dataframe数据结构,numpy库。

1)按照用户ID去重,得到全部用户ID列表。

2)按照APP名称去重,得到全部APP列表。

3)将用户ID作为矩阵行,APP作为矩阵列,APP使用的次数作为矩阵值,生成矩阵data。(未使用用0填充)。

4)按照用户ID对label(用户性别)列去重排序。

5)在data矩阵中,添加lable(用户性别)值。

6)添加行编号。

7)将data矩阵转换为csr稀疏矩阵。

 

至此,大家对机器学习的预处理部分大致了解了吧,下一节我们就开始机器学习建模。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注