1、概述
ps:分类问题可以根据熵值分类,回归问题可以根据每个节点的方差看拟合程度
2、熵
越混乱,熵值越大;越稳定,熵值越小。
课件:
ps:
公式中pi表示不同类别出现的概率,比如:
A={1,1,1,1}
pi(1)=100%
B={1,2,2,1}
pi(1)=50%, pi(2)=50%
而当pi=1时,logpi=0,熵值最小,画图也可知,不确定性越大,pi值月小,熵值离0越远
3、例子
4、决策树算法
ID3:不适合解决每个样本都有特定标识符(如ID)的问题,因为当ID当作特征时,特征足够分散,熵值为0,可以作为根节点,但是ID无法作为分类标准
CART:采用基尼系数进行运算的决策树也称为CART决策树。基尼系数(gini)用于计算一个系统中的失序现象,即系统的混乱程度(纯度)。基尼系数越高,系统的混乱程度就越高(不纯),建立决策树模型的目的就是降低系统的混乱程度(体高纯度),从而得到合适的数据分类效果。
CART的具体理解
5、决策树应对连续值问题
6、遇到决策树模型过拟合的情况
决策树把每个叶子节点都分为一类,熵值为0,此时分类相当于无效了
后剪枝公式个人理解:C(T)表示树节点分叉的损失成本(gini系数),alpha为系数,T表示后继节点样本个数(samples)
7、具体代码实现
7.1 分类决策树特征
数据集:
# 1.数据读取与预处理
import pandas as pd
df = pd.read_excel('员工离职预测模型.xlsx')
df = df.replace({'工资':{'低':0,'中':1,'高':2}})
# 2.提取特征变量与目标变量
X = df.drop(columns=['离职'])
y = df['离职']
# 3.划分训练集与测试集
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=123)
# 4.模型训练与拟合
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier(max_depth=3,random_state=123)
model.fit(X_train,y_train)
7.2 回归决策树模型
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)
model.predict([[9,9]])
7.3 一些参数
- random_state:当数据量较大或特征变量较多,可能在某个节点划分时,会遇到两个特征变量的信息增益或基尼系数下降值相同的情况,此时决策树模型默认会从中随机选择一个特征变量进行划分,这样可能会导致每次运行程序后生成的决策树不一致。设置random_state参数(如设置为123)可以保证每次运行程序后各节点的分裂结果都是一致的,这在特征变量较多、树的深度较深时较为重要。
- criterion:特征选择标准,取值为’entropy’(信息熵)和’gini’(基尼系数),默认值为’gini’。
- max_depth:决策树最大深度,取值为int型数据或None,默认值为None。一般数据或特征较少时可以不设置,如果数据或特征较多,可以设置最大深度进行限制。
参考