目录

什么是决策树

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章 决策树 学习笔记上相关推荐

  1. 第五章 决策树——学习笔记

    (一)决策树模型与学习 (二)特征选择  熵(entropy): H ( x ) = H ( p ) = − ∑ n j = 1 p i l o g p i H(x)=H(p)=- \underset ...

  2. 【西瓜书】第4章决策树---学习笔记

    1.基本流程 createBranch()函数的伪代码: 检测数据集中的每个子项是否属于同一分类: If so return 类标签: Else 寻找划分数据集的最好特征 划分数据集 创建分支节点 f ...

  3. 【深度学习(deep learning)】花书第12章 应用 读书笔记

    [深度学习(deep learning)]花书第12章 应用 读书笔记 第12章 应用 [深度学习(deep learning)]花书第12章 应用 读书笔记 前言 一.大规模深度学习 1.快速的CP ...

  4. cart算法_决策树学习笔记(三):CART算法,决策树总结

    点击上方"Python数据科学",选择"星标公众号" 关键时刻,第一时间送达! 作者:xiaoyu 介绍:一个半路转行的数据挖掘工程师 推荐导读:本篇为树模型系 ...

  5. 《互联网理财一册通》一一第12章 移动互联网“指尖上的理财”

    第12章 移动互联网"指尖上的理财" 互联网理财一册通 12.1 网银银行移动客户端 12.2 投资软件与操盘软件 12.3 微信理财通 12.4 手机支付宝 伴随移动互联网的迅猛 ...

  6. nodejs学习笔记(上)

    nodejs学习笔记 (上) 通过学习需要做到的是 了解 前后端是如何进行交互的 nodejs也是使用javaScript进行编写的 javaScript在不同的运行环境中有不同的作用 在浏览器内核中 ...

  7. 控制系统仿真与CAD-薛定宇-第四章matlab学习笔记

    控制系统仿真与CAD-薛定宇-第四章matlab学习笔记 04-02传递函数模型 tfdata() 传递函数属性法 04-07典型系统连接计算 pretty 用法 04-08方框图简化 04-09代数 ...

  8. 学海灯塔新增学习笔记上传功能

    又经过一天的努力,学海灯塔学习笔记上传功能实现.欢迎访问我们的学海灯塔 学习笔记这一模块的功能和课程文件类似,由同学们上传自己的学习笔记,用户可以下载,并且可以对笔记进行打分,后期将增加文件讨论功能. ...

  9. python列表乘数值_《利用Python进行数据分析》十一章· 时间序列·学习笔记(一)...

    一.时间序列 时间序列(time series)数据是一种重要的结构化数据形式,应用于多个领域,包括金融学.经济学.生态学.神经科学.物理学等.在多个时间点观察或测量到的任何事物都可以形成一段时间序列 ...

  10. 机器学习之决策树学习笔记

    决策树 1.决策树的概念 决策树是什么? 决策树(decision tree)是一种基本的分类与回归方法,通俗的讲也就是一颗用于决策的树. 决策树长什么样呢? 举个通俗易懂的例子,如下图所示的流程图就 ...

最新文章

  1. 常见的容错机制+failover+failback
  2. 十进制度转换为度分秒
  3. mysql 语句 函数分析
  4. Linux工程师新法宝:在Visual Studio上用C++ 写Linux
  5. 随想录(关于论文投稿)
  6. POJ3292 UVA11105 Semi-prime H-numbers【筛法打表】
  7. 为什么一般都使用 List list = new ArrayList() ,而不用 ArrayList alist = new ArrayList()呢?...
  8. 《数学建模与数学实验》第5版 统计分析 习题9.7
  9. 个人申请软件著作权的记录
  10. Contents mismatch at: 08000000H (Flash=FFH Required=00H) ! Too many errors to display !
  11. 50行Python搞定京东商品抢购
  12. 【缅怀妈妈系列诗歌】之二十四:一份永不忘却的思念
  13. Xtrabackup 安装以及 mysql 使用 Xtrabackup 物理备份过程记录
  14. Mezzanine入门
  15. c语言编程a4988驱动步进电机,A4988步进电机单片机驱动程序
  16. 小米运动同步到Google Fit健身, 解决睡眠和体重不同步的情况
  17. 触发拍照4G低功耗摄像机数据监控方案
  18. unicode字符转换成中文
  19. 讲解关于编写跨平台Java程序时的注意事项 选择自 tiewen 的 Blog
  20. 【大数据入门核心技术-Hbase】(一)HBase简介

热门文章

  1. 信锐nac6100管理口怎么进去_建盏生锈了怎么办?
  2. http status 400 – bad request 亚马逊_蛮拼的!这个亚马逊卖家为Prime Day做了这三大准备,销量暴涨58倍...
  3. mysql索引使用b_mysql索引的数据结构,为什么用b+树
  4. c# 火狐浏览器怎么嵌入窗体中_语言C#.net 如何将子窗体嵌入到父窗体里面
  5. python中http_Python中的HTTP错误
  6. 解除主键锁_mysql 锁
  7. TP5实践小总结(1)
  8. iOS移动开发周报-第18期
  9. Java prepare
  10. SecureCRT 查询ORCLE NUMBER字段显示问题