用随机森林算法求解kaggle比赛——HR Analytics: Job Change of Data Scientists

1. 何谓kaggle?
Kaggle是由联合创始人、首席执行官安东尼·高德布卢姆(Anthony Goldbloom)2010年在墨尔本创立的,主要为开发商和数据科学家提供举办机器学习竞赛、托管数据库、编写和分享代码的平台。该平台已经吸引了80万名数据科学家的关注,这些用户资源或许正是吸引谷歌的主要因素。(来源百度百科)
企业或者研究人员通过与kaggle合作,在kaggle上发布一个竞赛题目,题目主要包括:问题描述,数据,评价标准等。参赛者可在kaggle上注册账号然后报名参加比赛,将比赛所需数据下载下来,通过EDA分析,建立数据模型等方式,得到解决方案,通过一定格式将成提交。最后通过评价方制定的评价标准,来评价每一份解决方案,给出排名,并给出相应奖励。
kaggle创立10年以来,已有超过300万用户注册,一个比赛往往有数千乃至数万人报名,参赛者大多数有数据科学、深度学习、人工智能、机器学习相关背景,能在比赛中获取靠前的排名,是具有一定难度的,但这也是对自己能力的一种证明,可在申请学校,或求职中起到一定帮助。
kaggle官网
2. kaggle经典比赛项目:HR Analytics: Job Change of Data Scientists
背景:某公司开展培训,有许多人报名,但是有人想通过培训后继续留在公司,还有人通过培训后就会跳槽,公司需要识别出哪些人还想继续留在公司,那些人想跳槽。这将使培训更有目的性,以及能降低人力和时间成本。
数据:分为训练数据和测试数据,在训练数据和测试数据都包含一些有关求职者的信息,例如:员工ID,性别,学历,工作经历和培训时长等信息,而训练数据较测试数据多一个目标,即员工离职目标值为1,否则为0。
目标:预测员工离职的概率,以及员工信息对求职者离职与否的影响大小。
3.随机森林算法求解上述问题

3.1为什么选择随机森林算法?
随机森林算法是比较新的机器学习模型,有人将随机森林算法誉为当前最好的算法之一。随机森林算法的原理为:是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。在得到森林之后,当有一个新的输入样本进入的时候,就让森林中的每一棵决策树分别进行一下判断,看看这个样本应该属于哪一类(对于分类算法),然后看看哪一类被选择最多,就预测这个样本为那一类。
随机森林算法对于求解分类问题具有很好的效果。本文所提出的问题,本质就是一个根据员工信息,对员工是否离职进行一个分类问题,因此,运用随机森林算法求解该问题具有很好的效果。
根据问题特点选择好了算法之后,就可以开始进入求解阶段了

3.2数据预处理
数据处理是求解的先行阶段,该阶段主要将比赛所给的数据处理成为所需要的数据。
数据处理第一步:
通过下列语句导入numpy和pandas包,读取比赛给出的数据:

import numpy as np 
import pandas as pd
data = pd.read_csv("C:\\Users\\蓝志鹏\\Desktop\\aug_train.csv")

通过下列数据显示数据前5行和最后5行:

data.head()
data.tail()

得到下列结果:
用随机森林算法求解kaggle比赛——HR Analytics: Job Change of Data Scientists用随机森林算法求解kaggle比赛——HR Analytics: Job Change of Data Scientists
数据处理:
性别列(gender)的处理,将女性(female)、男性(male)和其他通过下列语句分别赋值为:0,1,2

    if data.iat[index,3] == 'Male':
        data.iat[index,3] = 1
    elif data.iat[index,3] == 'Female':
        data.iat[index,3] = 0
    elif data.iat[index,3] == 'Other':
        data.iat[index,3] = 2
    else:
        data.iat[index,3] = None

相关经验(relevent_experience)的处理,将有相关经验(Has relevent experience)通过下列语句赋值为1,其他赋值为0

    if data.iat[index,4] == 'Has relevent experience':
        data.iat[index,4]=1
    else:
        data.iat[index,4]=0

通过类似的方法将字符串数据重新赋值为整型数据,以便随机森林算法能够识别。
由于最后需要预测测试数据中所有员工是否离职,因此不能简单将缺省值删去。本文通过下列语句将缺省值赋值为-2的方法对缺省值进行处理。

data2 = data.fillna(value=-2)

通过上述步骤,把训练数据处理完成。通过下列语句显示处理好的数据:data2
得到如下结果:
用随机森林算法求解kaggle比赛——HR Analytics: Job Change of Data Scientists
该数据所有值都处理成了随机森林算法能够使用的数据。
同理将测试数据也进行相同的处理。

3.3训练随机森林模型:
Python中提供了随机森林包,供大家使用,具体使用方法参照如下代码:

from sklearn.ensemble import RandomForestClassifier

将训练数据分为训练数据和检验数据,训练数据和检验数据分别占比为:75%和25%,通过如下代码,带入随机森林模型进行训练:

X = data2.iloc[0:15000,2:13]
y = data2.iloc[0:15000,13]
clf=RandomForestClassifier()
clf.fit(X,y)

通过 下列代码输出每一个信息对离职与否(目标值)的影响程度:

print(clf.feature_importances_)

用随机森林算法求解kaggle比赛——HR Analytics: Job Change of Data Scientists

3.4预测员工是否会离职
将数据处理阶段处理好的测试数据,通过如下代码带入到训练好的随机森林模型:

y_pred=clf.predict(X2)

其中X2为处理好的测试数据
得到的y_pred即为通过随机森林模型得到的员工是否离职的预测结果。

3.5检验预测准确性
还记得3.3节为什么要把训练数据分为:训练数据和检验数据吗?因为,检验数据没有拿来进行模型训练,而检验数据又带有目标值,因此可以将检验数据代入到其中的检验数据就是在这个阶段使用的,用来检验随机森林模型的准确性,将预测得到的是否离职结果与检验数据自带的是否离职结果进行比较,即可得到模型的准确性。
通过如下代码,将训练数据的检验数据代入到随机森林模型中:

count = 0 
for i in range(len(data4)):
    if i >= 15000 :
        if data4.iloc[i,13] != data2.iloc[i,13] :
            count = count+1

accuracy = (len(data4) - count - 15000) / (len(data4) - 15000)

print('随机森林模型的准确性1为:',accuracy)

得到检验数据的预测结果:用随机森林算法求解kaggle比赛——HR Analytics: Job Change of Data Scientists
也就是说,通过随机森林训练得到的模型进行预测,并与真实情况做对比,我们发现,这种离职与否的预测准确度可以达到78.86%,这是一个比较可以的预测结果,显示了我们随机森林模型的准确性和有效性。

我是:DMULZP,关注我,不定期更新学习心得。

上一篇:脱壳——修复加密IAT


下一篇:圣天诺Sentinel破解脱壳方法