修改linq结果集_pandas与决策树学习实例---Adult数据集(2)

6233a07e3ca7384efc7806ee05c8cbd4.png

在经过前期的学习后,我们需要一些实例操作来加深我们对pandas的熟悉程度。今天带来的是L在pandas学习之旅中,针对Adult数据集的一些学习笔记。

侦探L:pandas学习实例---Adult数据集(1)​zhuanlan.zhihu.com
f5e1c676824cd0137993dc9a8ba79e66.png

接上一篇结尾部分,我们接下去对数据集进行分析。

首先重温一下我们的数据集。

df.head()

a3b158c8d9910d7c7ad19af1b9ab7f1c.png
df.info()

b5fae610017731c2a16e17ec58645330.png

下面,我们依然继续研究工资与其他特征之间的联系。

这一次我们采用机器学习中常见的决策树,来研究其他特征对工资的影响。

(1)数据预处理

在上一篇的实验中我们也有看到,在工资这一列中,只有“<=50K”和“>50K”两种情况。

df['工资'].value_counts()

6474bc2b1dbee5a4e6df1162703a871f.png

为了使用决策树模型对进行研究,我们需要对工资这一列数据进行一些处理,具体化处理如下:

我们将“>50K”的情况用1表示,“<=50K”的情况用0表示,研究什么条件下,工资会是“<=50K”和“>50K”。

df.loc[df['工资'] == ' <=50K', '工资'] = 0
df.loc[df['工资'] == ' >50K', '工资'] = 1

除此之外。我们还需要同时对“年龄”、“每周工作时间”以及刚刚处理过的“工资”这三列数据的数据类型进行一些修改(使用astype()函数):

df['年龄'] = df['年龄'].astype(int)
df['每周工作时间'] = df['每周工作时间'].astype(int)
df['工资'] = df['工资'].astype(int)

下面我们使用dtypes函数查看一下修改后的数据类型。

df.dtypes

15fec7f5c04cc07dc406fe009e34e952.png

同时,可以再确认一下数据集是否已修改成功:

df.head()

3fcdf0dd96b9b3ad8221236064efa302.png
df.tail()

d85ce7389dec6561c2a1e229ae51b3a6.png
df.info()

2f281b53ccffa00f49b15045b9372b67.png

没有缺失值,不需要进行缺失值处理。

6d183ffa835b3d01d9b53a4015750947.png

同时,我们也可以看到,我们的数据中总共有两种类型的数据,分别为int和object,为了保证所有特征都能传入模型中,我们需要使用独热编码,将类别特征全部转换为数值类型(也即是将非数值型的数据转化为数值型)。

小科普:

独热编码_百度百科​baike.baidu.com
708fefbe9b37d43561a24405d01219fe.png

在此之前,我们先看看那些特征是object,哪些是Int的

df_categorical
df_categorical

5e8fc3d5207ea4e255f8df27fe01cdb9.png
df_numerical

30baa20a8ccb928d4d1c7d32ab07553b.png

下面,对类别特征进行独热编码:

df_tree = pd.concat([df[df_numerical],
                        pd.get_dummies(df[df_categorical])], axis=1)

查看一下编码后的数据维度:

df_tree.shape

ca7a30ae8cc6f5d9ca0f730c418063f7.png

喜欢的同学还可以看看编码后的数据集:(由于有96列,因此这里只能显示局部)

690c834503f3edb38aa489e467588572.png

这个时候,我们我们的数据预处理环节基本结束~

(2)根据决策树模型,将数据集分割成训练集和测试集。

导入做决策树相应需要的包。

from sklearn import tree
from sklearn.model_selection import train_test_split

首先,将原数据集按特征和目标进行分割:

df_x = df_tree.drop(['工资'], axis=1)
df_y = df_tree['工资']

a31191cae1b9459709bbf22da8e2568d.png

然后,使用train_test_split将数据分成训练集和测试集

注意~在这里我们指定了拆分系数为0.3,也是说将7/10的数据作为训练集,剩下3/10的数据作为测试集。

X_train

拆分成功~查看一下拆分后训练集和测试集的数据。

X_train.shape

b3f34948c0a4d24e9d0418580ce17e9d.png
X_test.shape

83aafcbb0d83895d22927318357fa89b.png

下面开始建模,并使用X_train,和Y_train进行数据训练:

clf = tree.DecisionTreeClassifier(criterion="entropy")
clf = clf.fit(X_train, Y_train)

查看一下在测试集上的准确度(将经过训练集训练后的模型,应用到测试集里,并查看拟合的得分情况)

score = clf.score(X_test, Y_test) 
score

74112329ddf83d9982389c0926893363.png

得分大概在0.781左右,不是很高,我们尝试进行调参(调节建立决策树的参数,后续我会针对这一块具体写一篇)

5f2fd57172fdbac5ee691ab7e77d4e02.png

分数变成0.812,有所提高,但是这样一次一次的调参数,看上去效率有点低,有没有效率更高的做法呢?

下面我们使用GridSearchCV 网格搜索对决策树进行调参并返回最佳参数。

from sklearn.model_selection import GridSearchCV
from sklearn.tree import DecisionTreeClassifier, export_graphviz
tree_params = {'max_depth': range(3, 14)}

locally_best_tree = GridSearchCV(DecisionTreeClassifier(random_state=17),
                                 tree_params, cv=5)

locally_best_tree.fit(X_train, Y_train)

查看一下结果:

print("最优深度:{}".format(locally_best_tree.best_params_))

c5a28da4f04b0da81962848490eb07bd.png
clf = tree.DecisionTreeClassifier(criterion="entropy",max_depth=6, random_state=17)
clf = clf.fit(X_train, Y_train)
score = clf.score(X_test, Y_test) 
print("最优深度下的得分情况:{}".format(score))

f6fdd166a9982b9effb532e8091a2b42.png

可以看到,得分情况有了进一步的提高。

根据结果,我们可以画出一个决策树~

import graphviz
clf = tree.DecisionTreeClassifier(criterion="entropy",max_depth=6, random_state=17)
clf = clf.fit(X_train, Y_train)
dot_data = tree.export_graphviz(clf
,out_file = None
,feature_names= feature_name
,class_names=["工资>50K","工资<=50K"]
,filled=True
,rounded=True
)
graph = graphviz.Source(dot_data)
graph

下面是max_depth=6, random_state=17的情况:

c5311dbe1621895dadb2a59c74e86321.png

下面我们将参数调小一点(方便放图),让大家容易看一点。

dd3039decce5ff147b738f32942e60af.png

下面,小伙伴要注意啦!!!

如果想要自己运行代码作出决策树的同学,需要安装相应的库。

1.安装graphviz:

下载地址:http://www.graphviz.org/。如果是windows,就在官网下载msi文件安装。安装完后要设置环境变量:将graphviz的bin目录加到PATH。

2.安装python插件graphviz:

pip install graphviz

3.安装python插件pydotplus:

pip install pydotplus

(不懂的同学可以百度一下~有空我也会专门写一篇这方面的文章)

除此之外,我们还可以用随机森林模型来实验一下我们的数据:

还是和上面一样,导入库、训练数据:

from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(n_estimators=100, random_state=17)
rf.fit(X_train, Y_train)

d2612924273b7507c87d62aabc5b4c55.png

查看拟合的得分情况:

score = rf.score(X_test, Y_test) 
print("随机森林的得分情况:{}".format(score))

4f9c1cb90ee14114a465bc867c944c27.png

以上便是<pandas与决策树学习实例---Adult数据集(2)>的内容,感谢大家的细心阅读,同时欢迎感兴趣的小伙伴一起讨论、学习,想要了解更多内容的可以看我的其他文章,同时可以持续关注我的动态~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值