机器学习——决策树

 

1.决策树模型与学习


决策树:分类决策树模型是一种描述对实例进行分类的树形结构。

组成:节点(node)和有向边(directed edge)

节点类型:内部节点(internal node):特征或属性,叶节点(leaf node):类。


if-then规则的集合

特征空间与类空间上的条件概率分布

决策树学习本质:从训练数据集中归纳出一组分类规则


2.特征选择

特征选择的准则:信息增益或信息增益比。

正则化:加与类别个数成正比的正则项;使用信息增益比。

熵(entropy):表示随机变量不确定性的度量。  H(p)=-\sum_{i=1}^{n}p_{i}logp_{i}  熵越大,随机变量的不确定性越大。

条件熵:  H(Y|X)=\sum_{i=1}^{n}p_{i}H(Y|X=x_{i}) 

信息增益(information gain)  g(D,A)=H(D)-H(D|A) 信息增益大的特征具有更强的分类能力

信息增益比:g_{R}(D,A)=\frac{g(D,A)}{H_{a}(D)}            H_{A}(D)=-\sum_{i=1}^{n}\tfrac{\left | D_{i} \right |}{\left | D \right |}log_{2}\tfrac{\left | D_{i} \right |}{\left | D \right |}

基尼不纯度(gini impurity) Gini(D)={\sum_{x\in X}^{}}P(x)(1-P(x))

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',)

!注意:

决策树只能处理离散化数据,连续性数据需要先进行离散化。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值