“这是我参与更文挑战的第22天,活动详情查看: 更文挑战”
决策树模型是机器学习的各种算法模型中比较好理解的一种模型,它的基本原理是通过对一系列问题进行if/else的推导,最终实现相关决策。
下图所示为一个典型的决策树模型——员工离职预测模型的简单演示。该决策树首先判断员工满意度是否小于5,若答案为“是”,则认为该员工会离职,若答案为“否”,则接着判断该员工收入是否小于10000元,若答案为“是”,则认为该员工会离职,若答案为“否”,则认为该员工不会离职。
该图所示即决策树模型的核心原理,之后要讲解的员工离职预测模型是基于大数据搭建的一个稍复杂的模型。商业实战中不会仅根据“满意度”和“收入”两个特征来判断是否离职,而是根据多个特征来预测离职概率,再根据相应的阈值来判断是否离职,例如,离职概率超过50%即认为该员工会离职。
下面解释决策树模型的几个重要概念:父节点和子节点、根节点和叶子节点。
父节点和子节点是相对的,子节点由父节点根据某一规则分裂而来,然后子节点作为新的父节点继续分裂,直至不能分裂为止。根节点则和叶子节点是相对的,根节点是没有父节点的节点,即初始节点,叶子节点则是没有子节点的节点,即最终节点。决策树模型的关键就是如何选择合适的节点进行分裂。
在上图中,“满意度<5”是根节点,同时也是父节点,分裂成两个子节点“离职”和“收入<10000元”;子节点“离职”因为不再分裂出子节点,所以又是叶子节点;另一个子节点“收入<10000元”又是其下面两个节点的父节点;“离职”及“不离职”则为叶子节点。
在实际应用中,企业会通过已有的数据来分析离职员工都符合何种特征,如查看他们的满意度、收入、工龄、月工时、项目数等,然后选择相应的特征进行节点分裂,便能搭建出类似上面的决策树模型,再利用该模型预测员工离职情况,并根据预测结果采取应对措施。
决策树的概念并不复杂,主要是通过连续的逻辑判断得出最后的结论,其关键在于如何建立这样一棵“树”。例如,根节点应该选择哪一个特征,选择“满意度<5”或选择“收入<10000元”作为根节点,会收到不同的效果。其次,收入是一个连续变量,选择“收入<10000元”或选择“收入<100000元”作为一个节点,其结果也是有区别的。下面就来讲解决策树模型的建树依据。
分类决策树模型
分类决策树模型的演示代码如下。
from sklearn.tree import DecisionTreeClassifier
X=[[1,2],[3,4],[5,6],[7,8],[9,10]]
y=[1,0,0,1,1]
model = DecisionTreeClassifier(random_state=0)
model fit(X,y)
print(model.predict([5,5]))
运行后得到的预测结果如下。
[0]
可以看到,数据[5,5]被预测为类别0。
如果要同时预测多个数据,可以使用如下代码。
print(model.predict([[5,5],[7,7],[9,9]]))
预测结果如下。
[0 0 1]
回归决策树模型
决策树除了能进行分类分析,还能进行回归分析,即预测连续变量,此时的决策树称为回归决策树。回归决策树模型的简单演示代码如下。
from sklearn.tree import DecisionTreeRegressor
X=[[1,2],[3,4],[5,6],[7,8],[9,10]]
y=[1,2,3,4,5]
model = DecisionTreeRegressor(max_depth=2,random_state=0)
model.fit(X,y)
print(model.predict([[9,9]]))
预测结果如下。
[4.5]