1.决策树模型与学习
决策树:分类决策树模型是一种描述对实例进行分类的树形结构。
组成:节点(node)和有向边(directed edge)
节点类型:内部节点(internal node):特征或属性,叶节点(leaf node):类。
if-then规则的集合
特征空间与类空间上的条件概率分布
决策树学习本质:从训练数据集中归纳出一组分类规则
2.特征选择
特征选择的准则:信息增益或信息增益比。
正则化:加与类别个数成正比的正则项;使用信息增益比。
熵(entropy):表示随机变量不确定性的度量。 熵越大,随机变量的不确定性越大。
条件熵:
信息增益(information gain) g(D,A)=H(D)-H(D|A) 信息增益大的特征具有更强的分类能力
信息增益比:
基尼不纯度(gini impurity)
3.决策树的生成
ID3 核心:信息增益选择特征(偏向于选择取值较多的特征的问题)
C4.5核心:信息增益比选择特征
4.决策树的剪枝
1)前剪枝
在构造决策树的同时进行剪枝。
信息熵减小的数量小于某个阈值,即使还可以继续降低熵,也停止继续创建分支。限制叶子节点的样本个数。
2)后剪枝
通过遍历所有子树
损失函数的极小值等价于正则化的极大似然估计
5.CART算法
classification and regression tree
决策树生成,决策树剪枝
对回归树用平方误差最小化准则,对分类树用基尼指数(Gini index)最小化准则
6.集合算法(Ensemble)
是一种元算法(Meta-algorithm)
1)自助聚合算法 Bagging
采用有放回的采样规则,创建多个树。
2)正向激励算法boosting
给每个样本分配一个初识权重
3)随机森林
从n个特征里,采用无放回采样规则,从中取出f个特征作为输入特征
4)ExtraTrees算法
直接从特征里随机选择一个特征来分裂
7.实例:泰坦尼克号幸存者
(1)数据分析
(2)模型训练
(3)优化模型参数
DecisionTreeClassifier(max_depth=d)
DecisionTreeClassifier(criterion='gini',min_impurity_split=val)
(4)模型参数选择工具包
1)选择一个参数的最优值
threshold=np.linspace(0,0.5,50)
param_grid={'min_impurity_split':thresholds}
clf=GridSearchCV(DecisionTreeClassifier(),param_grid,cv=5)
2)多组参数选择最优值
param_grid=[{'criterion':['entropy'],
'min_impurity_decrease':entropy_thresholds},
{'criterion':['gini'],
'min_impurity_decrease':gini_thresholds},
{'max_depth':range(2,10)},
{'min_samples_split':range(2,30,2)}]
clf=GridSearchCV(DecisionTreeClassifier(),param_grid,cv=5)
(5)提交数据
test=read_dataset('/Desktop/scikit-learn/code/datasets/titanic/test.csv')
clf=DecisionTreeClassifier(criterion='gini',min_impurity_decrease=best_param)
clf.fit(X,y)
y_predict=clf.predict(test.values)
df=pd.DataFrame(y_predict,index=test.index,columns=['Survived'])
df.index.name='PassengerId';
df.to_csv('/Desktop/predict.csv',)
!注意:
决策树只能处理离散化数据,连续性数据需要先进行离散化。