Python之scikit-learn01--决策树
来源:互联网 发布:java运行命令行参数 编辑:程序博客网 时间:2024/05/20 16:33
1.CART决策树
在Python之机器学习01--决策树中介绍了通过ID3算法生成决策树,它使用熵来度量样本集的不确定性。本文将介绍另一种决策树,CART决策树,并使用scikit-learn来
实现算法。分类与回归树(Classfification And Regression Tree,CART)模型也是一种决策树模型,它既可用于分类,也可用于回归。分类与回归树模型采用不同的最优化策略,CART回归生成树采用平方误差最小化策略,CART分类生成树则采用基尼指数最小化策略。
1.1 CART回归树
给定训练数据集 。设已经将输入空间划分为 M个单元 ,且在单元Rm上输出值为cm,m=1,2...,M。则回归树模型为:
其中,I()为示性函数。
如果给定输入空间的一个划分,回归树在训练数据集上的误差(平方误差)为 。
最佳划分即使得该划分对应的回归树的平方误差在所有划分中最小。
CART回归树算法实现步骤如下。
(1)选择数据集D的最优切分维度j和切分点s。
(2)用选定的(j,s)划分区域并决定相应的输出值。
(3)对子区域R1,R2递归地调用上面两步,直到满足停止条件为止。
(4)将输入空间划分为M个区域R1,R2,...,RM,生成决策树:。
通常停止条件为:节点中样本个数小于预定值、样本集的平方误差小于预定值或没有更多的特征。
1.2 CART分类树
假设有K个分类,样本点属于第k类的概率为 。定义概率分布的基尼指数为:
对于给定的样本集合D,设属于类 ck的样本子集为Ck ,则基尼指数为:
给定特征A,根据其是否取某一个可能值a,样本集D被分为两个子集:D1和D2,定义
它表示在特征A的条件下,集合D的基尼指数。基尼系数与熵一样,也是用于度量不确定性的。对于样本集D,Gini(D)越小说明样本越属于同一类。
CART分类树算法实现步骤如下。
(1)对每个特征A,以及它可能的每个值a,计算Gini(D,A).
(2)选取最优特征和最优切分点:在所有特征A以及所有的切分点a中,基尼系数最小的A和a就是最优特征和最优切分点。根据最优特征和最优切分点将训练集D切分成两个子节点。
(3)对两个子节点递归调用上面两步,直到满足停止条件为止,
(4)最终生成决策树。
通常停止条件为:节点中样本个数小于预定值、样本集的基尼系数小于预定值或没有更多的特征。
1.3 CART回归树scikit-learn实现
#-*-coding:utf-8-*-import numpy as npimport matplotlib.pyplot as pltfrom sklearn.tree import DecisionTreeRegressorfrom sklearn.model_selection import train_test_split''' 产生用于回归问题的数据集 :param n: 数据集容量 :return: 返回一个元组,元素依次为:训练样本集、测试样本集、训练样本集对应的值、测试样本集对应的值'''def create_data(n): np.random.seed(0) X = 5 * np.random.rand(n, 1) y = np.sin(X).ravel() noise_num = (int)(n/5) y[::5] += 3 * (0.5-np.random.rand(noise_num)) #以5为间隔添加噪音 return train_test_split(X,y,test_size=0.25,random_state=1)''' 测试DecisionTreeRegressor的用法 :param data: 可变参数。它是一个元组,这里要求其元素依次为:训练样本集、测试样本集、训练样本的值、测试样本的值 :return: None'''def tDecisionTreeRegressor(*data): X_train,X_test,y_train,y_test = data regr = DecisionTreeRegressor() regr.fit(X_train,y_train) print("Training score:%f"%(regr.score(X_train,y_train))) print("Testing score:%f"%(regr.score(X_test,y_test))) ##绘图 fig = plt.figure() ax = fig.add_subplot(1,1,1) X = np.arange(0.0,5.0,0.01)[:, np.newaxis] Y = regr.predict(X) ax.scatter(X_train,y_train,label="train sample",c='g') ax.scatter(X_test, y_test, label="test sample", c='r') ax.plot(X,Y,label="predict_value",linewidth=2,alpha=0.5) ax.set_xlabel("data") ax.set_xlabel("target") ax.set_title(" Decision Tree Regressor") ax.legend(framealpha=0.5) plt.show()if __name__ == '__main__': X_train,X_test,y_train,y_test = create_data(100) tDecisionTreeRegressor(X_train,X_test,y_train,y_test)
参考:Python大战机器学习
- Python之scikit-learn01--决策树
- Scikit-learn之决策树
- Scikit-learn之决策树
- Python Scikit-learn ---- 决策树算法
- Python/scikit-learn机器学习库(决策树)
- scikit-learn学习之决策树算法
- python学习之决策树
- python之决策树
- Python scikit-learn包 决策树和随机森林实例代码
- scikit-learn决策树学习
- scikit-learn实现决策树
- scikit-learn实现决策树
- 可视化决策树之Python实现
- 【Scikit-Learn 中文文档】决策树
- 【Scikit-Learn 中文文档】决策树
- 【Scikit-Learn 中文文档】决策树
- 【Scikit-Learn 中文文档】决策树
- 【Scikit-Learn 中文文档】决策树
- 多相机全景的技术介绍
- Binary Tree Level Order Traversal问题及解法
- JavaScript 事件
- The cryptopals crypto challenges——Set 1-1
- 张家界游玩攻略
- Python之scikit-learn01--决策树
- bzoj 3281: 小P的烦恼 支配树算法+dp
- 注册登录时输入11位手机号,不能输入字母和特殊字符,input number类型去掉上下加减箭头
- hackerrank挑战题——寻找正在运行的中位数
- UnicodeEncodeError: 'latin-1' codec can't encode characters in position 35-38: ordinal not in range(
- PHP历史进程
- xpath很有帮助的一些用法
- 向界面中加入自定义View的几种方式
- Django 表单