第12章 决策树 学习笔记上
目录
什么是决策树
12-2 信息熵
12-3 使用信息熵寻找最优划分
12-4 基尼系数
模拟使用基尼系数划分
对比信息熵和基尼系统
什么是决策树
取后两个维度
from sklearn import datasetsiris = datasets.load_iris()
X = iris.data[:,2:]
y = iris.targetplt.scatter(X[y==0,0], X[y==0,1])
plt.scatter(X[y==1,0], X[y==1,1])
plt.scatter(X[y==2,0], X[y==2,1])
plt.show()
from sklearn.tree import DecisionTreeClassifierdt_clf = DecisionTreeClassifier(max_depth=2, criterion="entropy", random_state=42)
dt_clf.fit(X, y)def plot_decision_boundary(model, axis):x0, x1 = np.meshgrid(np.linspace(axis[0], axis[1], int((axis[1]-axis[0])*100)).reshape(-1, 1),np.linspace(axis[2], axis[3], int((axis[3]-axis[2])*100)).reshape(-1, 1),)X_new = np.c_[x0.ravel(), x1.ravel()]y_predict = model.predict(X_new)zz = y_predict.reshape(x0.shape)from matplotlib.colors import ListedColormapcustom_cmap = ListedColormap(['#EF9A9A','#FFF59D','#90CAF9'])plt.contourf(x0, x1, zz, cmap=custom_cmap)plot_decision_boundary(dt_clf, axis=[0.5, 7.5, 0, 3])
plt.scatter(X[y==0,0], X[y==0,1])
plt.scatter(X[y==1,0], X[y==1,1])
plt.scatter(X[y==2,0], X[y==2,1])
plt.show()
12-2 信息熵
pi<1,所以log(pi)<0
不确定度的度量
越大系统越不确定越随机
二分类
三类就是立体的曲面
12-3 使用信息熵寻找最优划分
传统的算法与数据结构是最基础的很重要
基于最前面的程序
def split(X, y, d, value):index_a = (X[:,d] <= value)index_b = (X[:,d] > value)return X[index_a], X[index_b], y[index_a], y[index_b]
from collections import Counter
from math import logdef entropy(y):counter = Counter(y)res = 0.0for num in counter.values():p = num / len(y)res += -p * log(p)return resdef try_split(X, y):best_entropy = float('inf')best_d, best_v = -1, -1for d in range(X.shape[1]):sorted_index = np.argsort(X[:,d])for i in range(1, len(X)):if X[sorted_index[i], d] != X[sorted_index[i-1], d]:v = (X[sorted_index[i], d] + X[sorted_index[i-1], d])/2X_l, X_r, y_l, y_r = split(X, y, d, v)p_l, p_r = len(X_l) / len(X), len(X_r) / len(X)e = p_l * entropy(y_l) + p_r * entropy(y_r)if e < best_entropy:best_entropy, best_d, best_v = e, d, vreturn best_entropy, best_d, best_v
d维度,best_d 是在哪一个维度 best_v哪一个阈值
best_d = 0 表示x轴
12-4 基尼系数
以二分类画出曲线
相邻两样本在d维度上不相等
from sklearn import datasetsiris = datasets.load_iris()
X = iris.data[:,2:]
y = iris.targetfrom sklearn.tree import DecisionTreeClassifierdt_clf = DecisionTreeClassifier(max_depth=2, criterion="gini", random_state=42)
dt_clf.fit(X, y)def plot_decision_boundary(model, axis):x0, x1 = np.meshgrid(np.linspace(axis[0], axis[1], int((axis[1]-axis[0])*200)).reshape(-1, 1),np.linspace(axis[2], axis[3], int((axis[3]-axis[2])*200)).reshape(-1, 1),)X_new = np.c_[x0.ravel(), x1.ravel()]y_predict = model.predict(X_new)zz = y_predict.reshape(x0.shape)from matplotlib.colors import ListedColormapcustom_cmap = ListedColormap(['#EF9A9A','#FFF59D','#90CAF9'])plt.contourf(x0, x1, zz, cmap=custom_cmap)plot_decision_boundary(dt_clf, axis=[0.5, 7.5, 0, 3])
plt.scatter(X[y==0,0], X[y==0,1])
plt.scatter(X[y==1,0], X[y==1,1])
plt.scatter(X[y==2,0], X[y==2,1])
plt.show()
模拟使用基尼系数划分
from collections import Counter
from math import logdef split(X, y, d, value):index_a = (X[:,d] <= value)index_b = (X[:,d] > value)return X[index_a], X[index_b], y[index_a], y[index_b]def gini(y):counter = Counter(y)res = 1.0for num in counter.values():p = num / len(y)res -= p**2return resdef try_split(X, y):best_g = float('inf')best_d, best_v = -1, -1for d in range(X.shape[1]):sorted_index = np.argsort(X[:,d])for i in range(1, len(X)):if X[sorted_index[i], d] != X[sorted_index[i-1], d]:v = (X[sorted_index[i], d] + X[sorted_index[i-1], d])/2X_l, X_r, y_l, y_r = split(X, y, d, v)p_l, p_r = len(X_l) / len(X), len(X_r) / len(X)g = p_l * gini(y_l) + p_r * gini(y_r)if g < best_g:best_g, best_d, best_v = g, d, vreturn best_g, best_d, best_v
对比信息熵和基尼系统
第12章 决策树 学习笔记上相关推荐
- 第五章 决策树——学习笔记
(一)决策树模型与学习 (二)特征选择 熵(entropy): H ( x ) = H ( p ) = − ∑ n j = 1 p i l o g p i H(x)=H(p)=- \underset ...
- 【西瓜书】第4章决策树---学习笔记
1.基本流程 createBranch()函数的伪代码: 检测数据集中的每个子项是否属于同一分类: If so return 类标签: Else 寻找划分数据集的最好特征 划分数据集 创建分支节点 f ...
- 【深度学习(deep learning)】花书第12章 应用 读书笔记
[深度学习(deep learning)]花书第12章 应用 读书笔记 第12章 应用 [深度学习(deep learning)]花书第12章 应用 读书笔记 前言 一.大规模深度学习 1.快速的CP ...
- cart算法_决策树学习笔记(三):CART算法,决策树总结
点击上方"Python数据科学",选择"星标公众号" 关键时刻,第一时间送达! 作者:xiaoyu 介绍:一个半路转行的数据挖掘工程师 推荐导读:本篇为树模型系 ...
- 《互联网理财一册通》一一第12章 移动互联网“指尖上的理财”
第12章 移动互联网"指尖上的理财" 互联网理财一册通 12.1 网银银行移动客户端 12.2 投资软件与操盘软件 12.3 微信理财通 12.4 手机支付宝 伴随移动互联网的迅猛 ...
- nodejs学习笔记(上)
nodejs学习笔记 (上) 通过学习需要做到的是 了解 前后端是如何进行交互的 nodejs也是使用javaScript进行编写的 javaScript在不同的运行环境中有不同的作用 在浏览器内核中 ...
- 控制系统仿真与CAD-薛定宇-第四章matlab学习笔记
控制系统仿真与CAD-薛定宇-第四章matlab学习笔记 04-02传递函数模型 tfdata() 传递函数属性法 04-07典型系统连接计算 pretty 用法 04-08方框图简化 04-09代数 ...
- 学海灯塔新增学习笔记上传功能
又经过一天的努力,学海灯塔学习笔记上传功能实现.欢迎访问我们的学海灯塔 学习笔记这一模块的功能和课程文件类似,由同学们上传自己的学习笔记,用户可以下载,并且可以对笔记进行打分,后期将增加文件讨论功能. ...
- python列表乘数值_《利用Python进行数据分析》十一章· 时间序列·学习笔记(一)...
一.时间序列 时间序列(time series)数据是一种重要的结构化数据形式,应用于多个领域,包括金融学.经济学.生态学.神经科学.物理学等.在多个时间点观察或测量到的任何事物都可以形成一段时间序列 ...
- 机器学习之决策树学习笔记
决策树 1.决策树的概念 决策树是什么? 决策树(decision tree)是一种基本的分类与回归方法,通俗的讲也就是一颗用于决策的树. 决策树长什么样呢? 举个通俗易懂的例子,如下图所示的流程图就 ...
最新文章
- 常见的容错机制+failover+failback
- 十进制度转换为度分秒
- mysql 语句 函数分析
- Linux工程师新法宝:在Visual Studio上用C++ 写Linux
- 随想录(关于论文投稿)
- POJ3292 UVA11105 Semi-prime H-numbers【筛法打表】
- 为什么一般都使用 List list = new ArrayList() ,而不用 ArrayList alist = new ArrayList()呢?...
- 《数学建模与数学实验》第5版 统计分析 习题9.7
- 个人申请软件著作权的记录
- Contents mismatch at: 08000000H (Flash=FFH Required=00H) ! Too many errors to display !
- 50行Python搞定京东商品抢购
- 【缅怀妈妈系列诗歌】之二十四:一份永不忘却的思念
- Xtrabackup 安装以及 mysql 使用 Xtrabackup 物理备份过程记录
- Mezzanine入门
- c语言编程a4988驱动步进电机,A4988步进电机单片机驱动程序
- 小米运动同步到Google Fit健身, 解决睡眠和体重不同步的情况
- 触发拍照4G低功耗摄像机数据监控方案
- unicode字符转换成中文
- 讲解关于编写跨平台Java程序时的注意事项 选择自 tiewen 的 Blog
- 【大数据入门核心技术-Hbase】(一)HBase简介
热门文章
- 信锐nac6100管理口怎么进去_建盏生锈了怎么办?
- http status 400 – bad request 亚马逊_蛮拼的!这个亚马逊卖家为Prime Day做了这三大准备,销量暴涨58倍...
- mysql索引使用b_mysql索引的数据结构,为什么用b+树
- c# 火狐浏览器怎么嵌入窗体中_语言C#.net 如何将子窗体嵌入到父窗体里面
- python中http_Python中的HTTP错误
- 解除主键锁_mysql 锁
- TP5实践小总结(1)
- iOS移动开发周报-第18期
- Java prepare
- SecureCRT 查询ORCLE NUMBER字段显示问题