赞
踩
目录
决策树由:根节点、内部节点和叶子节点。前两者的作用在于根据属性对对对象进行划分,而后者是分类的结果。
熵是指类别属性的不确定性,而决策树算法的本质是通过描述属性从而减少熵。对于某个属性取值为,其中是该属性分类出现的概率,为属性出现的元祖数
,定义自信息量。同时定义无条件熵
注意这里对数函数以2为底是因为信息用二进制位编码,但并非不可改变。无条件熵反映了该属性中各类别取值的平均自信息量,即平均不确定值。当相同时均值最大。定义条件熵为
对应的信息增益为
建立IF-THEN分类规则,即每个内部属性值形成规则前件(IF部分)的一个合取项,叶子结点形成规则后件(THEN部分)
- import pandas as pd
- import numpy as np
- import matplotlib.pyplot as plt
- from sklearn.model_selection import train_test_split
- from sklearn.tree import DecisionTreeClassifier
- from sklearn.metrics import accuracy_score
- from sklearn.metrics import roc_curve
- from sklearn.metrics import roc_auc_score
- from sklearn.tree import export_graphviz
- import graphviz
- ###########数据读取和预处理#####################################
- df=pd.read_excel('员工离职预测模型.xlsx')
- df.head()
- #数据中的文字内容也成为哑变量需要进行数据化处理
- df=df.replace({'工资':{'低':0,'中':1,'高':2}})
- df.head()
-
- #########提取特征变量和目标函数##################################
- #单独提取特征变量和目标变量单独提取
- X=df.drop(colums='离职')
- y=df['离职']
-
- ########划分训练集和测试集###################################
- X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=123)
- X_train.head()##划分后数据展示
- X_test.head()
- y_train.head()
- y_test.head()
-
- ##########模型训练及搭建#################################
- model=DecisionTreeClassifier(max_depth=3,random_state=123)
- model.fit(X_train,y_train)
- y_pred=model.predict(X_test)#直接预测是否离职
- #将预测值和实际值汇总到一起
- a=pd.DataFrame()
- a['预测值']=list(y_pred)
- a['实际值']=list(y_test)
- #查看整体的预测准确度
- score=accuracy_score(y_pred,y_test)
-
- ##########预测离职和不离职的概率########################
- y_pred_proba=model.predict_proba(X_test)
- b=pd.DataFrame(y_pred_proba,columns=['不离职概率','离职概率'])
-
- #########模型预测效果估计########################
- fpr,tpr,thres=roc_curve(y_test,y_pred_proba[;,1])
- #命中率(tpr):实际离职预测离职 假警报率(FPR):实际不离职预测为离职 阈值:为划分的门槛
- a=pd.DataFrame()
- a['阈值']=list(thres)
- a['假警报率']=list(fpr)
- a['命中率']=list(tpr)
- ##绘制图表可视化不同阈值下的假警报率和命中率
- score=roc_auc_score(y_test,y_pred_proba[;,1])
-
- plt.plot(fpr,tpr)
- plt.show()
-
- print(model.feature_importances_)
- >output:[0. 0.59810862 0.14007392 0.10638659 0.00456495 0.15086592]
-
- #######模型特征重要性评估#####################
- features=X.columns#查看特征重要性
- importances=model.feature_importances_
- ##在特征比较多的情况下
- features=X.columns#获取特征名称
- importances=model.feature_importances_#或许特征重要性
-
- importances_df=pd.DataFrame()#通过二维表格形式显示
- importances_df['特征名称']=features
- importances_df['特征重要性']=importances
- importances_df.sort_values('特征重要性',ascending=False)
- importances_df=pd.DataFrame([features,importances],index=['特征名称','特征重要性']).T
- print(importances_df)
- >output
- 特征名称 特征重要性
- 0 工资 0.0
- 1 满意度 0.598109
- 2 考核得分 0.140074
- 3 工程数量 0.106387
- 4 月工时 0.004565
- 5 工龄 0.150866
-
- #############决策树模型的可视化######################
- dot_data=export_graphviz(model,out_file=None)#model极为模型名称
- graph=graphviz.Source(dot_data)#将决策树模型模型可视化
- graph.render('决策树可视化')#生产决策树可视化PDF文件
roc_auc曲线
通过特征重要性的表格可以观察到不同特征的重要程度
本文为个人学习所得,多有疏漏不足之处还望读者诸君批评指正
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。