当前位置:   article > 正文

Python数据挖掘与机器学习——决策树算法代码实现_python决策树算法代码

python决策树算法代码

目录

一、决策树算法原理

1.1信息增益

1.2提前分类规则

二、案例分析及代码实现

三、结果分析


一、决策树算法原理

        决策树由:根节点、内部节点和叶子节点。前两者的作用在于根据属性对对对象进行划分,而后者是分类的结果。

1.1信息增益

        熵是指类别属性的不确定性,而决策树算法的本质是通过描述属性从而减少熵。对于某个属性取值为{b_{1},...,b_{k}},其中p(b_{i})是该属性分类出现的概率p(b_{i})=s_{i}/n,s_{i}为属性出现的元祖数

,定义自信息量I(b_{i})=log_{2}\frac{1}{p(b_{i})}=-log_{2}p(b_{i})。同时定义无条件熵

E(B)=-\sum{p(c_{i})log_{2}p(c_{i})}=-\sum{\frac{s_{i}}{n}log_{2}\frac{s_{i}}{n}}

注意这里对数函数以2为底是因为信息用二进制位编码,但并非不可改变。无条件熵反映了该属性中各类别取值的平均自信息量,即平均不确定值。当p_{i}相同时均值最大。定义条件熵为

E(B,A_{k})=\sum{\frac{s_{j}}{n}}\left ( -\sum{\frac{s_{ij}}{s_{j}}log_{2}\frac{s_{ij}}{s_j}} \right )

对应的信息增益为G(B,A_{k})=E(B)-E(B,A_{k})

1.2提前分类规则

        建立IF-THEN分类规则,即每个内部属性值形成规则前件(IF部分)的一个合取项,叶子结点形成规则后件(THEN部分)

二、案例分析及代码实现

  1. import pandas as pd
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. from sklearn.model_selection import train_test_split
  5. from sklearn.tree import DecisionTreeClassifier
  6. from sklearn.metrics import accuracy_score
  7. from sklearn.metrics import roc_curve
  8. from sklearn.metrics import roc_auc_score
  9. from sklearn.tree import export_graphviz
  10. import graphviz
  1. ###########数据读取和预处理#####################################
  2. df=pd.read_excel('员工离职预测模型.xlsx')
  3. df.head()
  4. #数据中的文字内容也成为哑变量需要进行数据化处理
  5. df=df.replace({'工资':{'低':0,'中':1,'高':2}})
  6. df.head()
  7. #########提取特征变量和目标函数##################################
  8. #单独提取特征变量和目标变量单独提取
  9. X=df.drop(colums='离职')
  10. y=df['离职']
  11. ########划分训练集和测试集###################################
  12. X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=123)
  13. X_train.head()##划分后数据展示
  14. X_test.head()
  15. y_train.head()
  16. y_test.head()
  17. ##########模型训练及搭建#################################
  18. model=DecisionTreeClassifier(max_depth=3,random_state=123)
  19. model.fit(X_train,y_train)
  20. y_pred=model.predict(X_test)#直接预测是否离职
  21. #将预测值和实际值汇总到一起
  22. a=pd.DataFrame()
  23. a['预测值']=list(y_pred)
  24. a['实际值']=list(y_test)
  25. #查看整体的预测准确度
  26. score=accuracy_score(y_pred,y_test)
  27. ##########预测离职和不离职的概率########################
  28. y_pred_proba=model.predict_proba(X_test)
  29. b=pd.DataFrame(y_pred_proba,columns=['不离职概率','离职概率'])
  30. #########模型预测效果估计########################
  31. fpr,tpr,thres=roc_curve(y_test,y_pred_proba[;,1])
  32. #命中率(tpr):实际离职预测离职 假警报率(FPR):实际不离职预测为离职 阈值:为划分的门槛
  33. a=pd.DataFrame()
  34. a['阈值']=list(thres)
  35. a['假警报率']=list(fpr)
  36. a['命中率']=list(tpr)
  37. ##绘制图表可视化不同阈值下的假警报率和命中率
  38. score=roc_auc_score(y_test,y_pred_proba[;,1])
  39. plt.plot(fpr,tpr)
  40. plt.show()
  41. print(model.feature_importances_)
  42. >output:[0. 0.59810862 0.14007392 0.10638659 0.00456495 0.15086592]
  43. #######模型特征重要性评估#####################
  44. features=X.columns#查看特征重要性
  45. importances=model.feature_importances_
  46. ##在特征比较多的情况下
  47. features=X.columns#获取特征名称
  48. importances=model.feature_importances_#或许特征重要性
  49. importances_df=pd.DataFrame()#通过二维表格形式显示
  50. importances_df['特征名称']=features
  51. importances_df['特征重要性']=importances
  52. importances_df.sort_values('特征重要性',ascending=False)
  53. importances_df=pd.DataFrame([features,importances],index=['特征名称','特征重要性']).T
  54. print(importances_df)
  55. >output
  56. 特征名称 特征重要性
  57. 0 工资 0.0
  58. 1 满意度 0.598109
  59. 2 考核得分 0.140074
  60. 3 工程数量 0.106387
  61. 4 月工时 0.004565
  62. 5 工龄 0.150866
  63. #############决策树模型的可视化######################
  64. dot_data=export_graphviz(model,out_file=None)#model极为模型名称
  65. graph=graphviz.Source(dot_data)#将决策树模型模型可视化
  66. graph.render('决策树可视化')#生产决策树可视化PDF文件

三、结果分析

 roc_auc曲线

通过特征重要性的表格可以观察到不同特征的重要程度

 本文为个人学习所得,多有疏漏不足之处还望读者诸君批评指正

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/460474
推荐阅读
相关标签
  

闽ICP备14008679号