机器学习入门与Python实战(五):决策树分类 Decision Tree

目录

现实问题:“求职简历太多,给不给面试机会?”

决策树

决策树求解

决策树算法优缺点

知识巩固

Python实战:决策树判断员工是否适合相关工作

拓展学习


现实问题:“求职简历太多,给不给面试机会?”

简历上有什么:个人技能、工作经验、学校学历、期望薪资等

任务:根据求职者的相应技能、工作经验、学历背景和薪资要求判断能否安排该求职者面试。

决策树

一种基于样本分布概率,以树形结构的方式,实现多层判断从而确定目标所属类别

根据数据集D的分布,生成树形结构,实现最终类别判断

决策树求解

三种求解方法:

ID3C4.5CART

参考资料:

1https://blog.csdn.net/dfly_zx/article/details/107797695

2https://blog.csdn.net/dfly_zx/article/details/107797864

ID3

利用信息熵原理选择信息增益最大的属性作为分类属性,依次确定决策树的分枝,完成决策树的构造

信息熵(entropy)是度量随机变量不确定性的指标,熵越大,样本的不确定性就越大。假定当前样本集合D中第k类样本所占的比例为pk,则D的信息熵为:

Ent(D)的值越小,样本分布的不确定性越小。

目标:划分后样本分布不确定性尽可能小,即划分后信息熵小,信息增益大

决策树算法优缺点

优点:

  • 计算量小,运算速度快
  • 判断步骤清晰,易于理解

缺点:

  • 忽略属性间的相关性
  • 样本类别分布不均匀时,容易影响模型表现

适用场景:

需要清晰地描述类别判断的前后逻辑(先依据哪个指标判断,接下来使用哪个指标)

知识巩固

根据面试者工作合适与否的案例数据,计算使用ID3算法建立决策树时各节点的信息增益

Python实战:决策树判断员工是否适合相关工作

基础环境: Python语言;安装核心工具包numpy、pandas、sklearn、matplotlib;环境管理软件Anaconda;Jupyter notebook

环境配置参考:机器学习入门与Python实战核心工具篇:pip源、python、anaconda、工具包(完整版)https://blog.csdn.net/dfly_zx/article/details/110188923

任务:基于文章中决策树案例与task1_data数据,基于信息熵原理建立决策树模型。

1、建立决策树模型、计算准确率

2、预测申请者skill=1,experice=0,degree=1,Income=1是否适合该工作;

3、可视化模型结构

4、修改min_samples_leaf参数,对比模型结果

属性数值意义:

Skill技能

0:不达标; 1:达标; 2:超强

Experience经验
0:无相关经验; 1:有相关经验

Degree学位

0:不符合; 1:符合

Income收入期望

0:未达到期望; 1:达到期望

Y结果

0:不适合该工作; 1:适合该工作


#数据加载
import pandas as pd
import numpy as np
data = pd.read_csv('task1_data.csv')
data.head(10)

#X y赋值
X = data.drop(['y'],axis=1)
y = data.loc[:,'y']
X.head()
y.head()
#维度却确认
print(X.shape,y.shape)

#建立决策树模型
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier(criterion='entropy',min_samples_leaf=5)
#模型训练
model.fit(X,y)

#模型预测
y_predict = model.predict(X)
#准确率指标评估
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y,y_predict)
print(accuracy)

#测试样本预测
X_test = np.array([[1,0,1,1]])
y_test_predict = model.predict(X_test)
print('适合' if y_test_predict==1 else '不适合')

from matplotlib import pyplot as plt
fig1 = plt.figure(figsize=(200,200))
from sklearn import tree
tree.plot_tree(model,filled='True',feature_names=['Skill','Experience','Degree','Income'],class_names=['Un-qualified','Qualified'])
fig1.savefig('dc_result.png')
model2 = DecisionTreeClassifier(criterion='entropy',min_samples_leaf=50)
#模型训练
model2.fit(X,y)
y_predict2 = model2.predict(X)
accuracy2 = accuracy_score(y,y_predict2)
print(accuracy2)

fig2 = plt.figure(figsize=(200,200))
tree.plot_tree(model2,filled='True',feature_names=['Skill','Experience','Degree','Income'],class_names=['Un-qualified','Qualified'])
#设置字体
import matplotlib as mpl
mpl.rcParams['font.family'] = 'SimHei'
fig3 = plt.figure(figsize=(200,200))
tree.plot_tree(model2,filled='True',feature_names=['技能','经验','学历','薪资'],class_names=['不适合','适合'])
fig3.savefig('final_result.png')

决策树判断员工是否适合相关工作实战summary:
1、通过建立决策树模型,实现了基于不同属性的分级判断,达到了预测申请者是否适合对应岗位的目标,模型准确率0.85;
2、对新申请者skill=1,experice=0,degree=1,Income=1进行预测,判断其适合该岗位
3、实现了决策树模型结果可视化,并完成存储
4、通过修改叶子节点最少样本数对应参数min_samples_leaf,简化了模型结构,判断逻辑更加清晰,模型准确率轻微下降至0.83;

核心算法参考链接:https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html


拓展学习

如果现在就想开始学习机器学习,你还可以:

1、添加微信:ai_flare,领取Python编程课(AI方向)、Python实现机器学习,免费领取(仅限前100名)

2、人工智能学习路线:专为AI小白设计的人工智能实战课 - Python3入门人工智能 基础+实战 学习视频教程-CSDN学院

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值