目录
现实问题:“求职简历太多,给不给面试机会?”
简历上有什么:个人技能、工作经验、学校学历、期望薪资等
任务:根据求职者的相应技能、工作经验、学历背景和薪资要求判断能否安排该求职者面试。
决策树
一种基于样本分布概率,以树形结构的方式,实现多层判断从而确定目标所属类别
根据数据集D的分布,生成树形结构,实现最终类别判断
决策树求解
三种求解方法:
ID3、C4.5、CART
1、https://blog.csdn.net/dfly_zx/article/details/107797695
2、https://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学院