#使用信息熵寻找最优划分
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
iris = datasets.load_iris()X = iris.data[:,2:]
y = iris.target
y.shape
from sklearn.tree import DecisionTreeClassifier
dt_clf = DecisionTreeClassifier(max_depth = 2,criterion = "entropy")
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, linewidth=5, 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])

#模拟使用信息熵进行划分
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 log
def entropy(y):counter = Counter(y)res = 0.0for num in counter.values():p = num / len(y)res += -p * log(p)return res
def 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 - 1],d] != X[sorted_index[i],d]:v = (X[sorted_index[i - 1],d] + X[sorted_index[i],d]) / 2X_l,X_r,y_l,y_r = split(X,y,d,v)e = entropy(y_l) + entropy(y_r)if e < best_entropy:best_entropy,best_d,best_v = e, d, vreturn best_entropy,best_d,best_v
best_entropy,best_d,best_v = try_split(X,y)
print('best_entropy = ',best_entropy)
print('best_d = ',best_d)
print('best_v = ',best_v)
#第0个维度,最佳划分是2.45
best_entropy =  0.6931471805599453
best_d =  0
best_v =  2.45
X1_l,X1_r,y1_l,y1_r = split(X,y,best_d,best_v)
entropy(y1_l)
0.0
entropy(y1_r)
0.6931471805599453
best_entropy,best_d,best_v = try_split(X,y)
print("best_entropy = ",best_entropy)
print("best_d = ",best_d)
print("best_v = ",best_v)
best_entropy =  0.6931471805599453
best_d =  0
best_v =  2.45
best_entropy2,best_d2,best_v2 = try_split(X1_r,y1_r)
print("best_entropy2 = ",best_entropy2)
print("best_d2 = ",best_d2)
print("best_v2 = ",best_v2)
best_entropy2 =  0.4132278899361904
best_d2 =  1
best_v2 =  1.75

Python机器学习:决策树003使用信息熵寻找最优划分相关推荐

  1. python机器学习——决策树(分类)及“泰坦尼克号沉船事故”数据集案例操作

    决策树(分类)及具体案例操作 一.决策树(分类)算法 (1)算法原理(类似于"分段函数") (2)决策树的变量类型 (3)量化纯度 (4)基本步骤 (5)决策树的优缺点 二.决策树 ...

  2. Python机器学习——决策树

    # 模型用途:既可以分类,也能解决回归问题 ###主要还是应用分类决策树:本质是从训练数据集中归纳出一组分类规则,称为树归纳.对于给定的训练集,存在许多对他无错编码的树.为了简单起见,我们选出最小的树 ...

  3. 机器算法有哪几种 python_8种顶级Python机器学习算法-你必须学习

    今天,我们将更深入地学习和实现8个顶级Python机器学习算法. 让我们开始Python编程中的机器学习算法之旅. 8 Python机器学习算法 - 你必须学习 以下是Python机器学习的算法: 1 ...

  4. 机器学习—决策树构造算法的python实现

    机器学习-决策树算法的python实现 想要实现的效果 先来看下结果 程序原理 数据 完整代码(附有具体解析) 想要实现的效果 对于这个不好玩的决策树,我想要得到的就是通过决策树训练我的数据然后生成这 ...

  5. python机器学习库sklearn——决策树

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 决策树的相关的知识内容可以参考 http://blog.csdn.net/luanpeng825485697/article/deta ...

  6. Python机器学习(二):决策树(Decision Tree-DTs)

    Python机器学习(二):决策树(Decision Tree-DTs) 目录: Python机器学习(二):决策树(Decision Tree-DTs) 一.什么是决策树 1.基本概念 2.决策树算 ...

  7. Python机器学习【二】 - 决策树

    Python机器学习[二] - 决策树 原文地址:Python机器学习[二] - 决策树 上一篇基于sklearn Python库创建K近邻模型(KNN)实现了机器学习Hello World示例,KN ...

  8. 机器学习-决策树之回归树python实战(预测泰坦尼克号幸存情况)(三)

    本文用通俗易懂的方式来讲解分类树中的回归树,并以"一维回归的图像绘制"和"泰坦尼克号幸存者预测"两个例子来说明该算法原理. 以下是本文大纲: 1 Decisio ...

  9. 机器学习决策树DecisionTree以及python代码实现

    机器学习决策树DecisionTree以及python代码实现 1.基本算法原理 2.选择最优特征进行划分 2.1信息增益 2.2信息增益率 2.3基尼系数 4.连续值以及缺失值的处理 4.1连续值的 ...

最新文章

  1. 好程序员HTML5大前端分享常用开发工具大集合
  2. 《精通Nginx》——1.2 从源代码安装Nginx
  3. plspl和oracle,LOL2017LSPL春季死啊DS轻取NON ME逆转GD赢得首胜
  4. [译]通过wp-config来定制你的WordPress
  5. 谷歌启动搜索引擎新功能 网页Flash内容即时预览
  6. 对话腾讯云汽车业务副总经理李博:构建出行大版图,腾讯云迈向新征程
  7. 不懂就问,我月薪三千,离用lamer开mini还有多远?
  8. DataTable to byte[]、DataTable to XML(string)
  9. 【转】Android Studio安装配置学习教程指南 Gradle基础--不错
  10. 详解:Oracle数据库的分区表
  11. node -v 突然显示 killed 9 处理历程
  12. Easyui datagrid getData简单使用
  13. MYSQL建表语句转换成oracle建表语句
  14. Hadoop简介概述
  15. 中国人在发表英文论文时汉字姓名究竟应该如何写?
  16. mysql转拼音首字母大写_mysql中文字段转拼音首字母,以及中文拼音模糊查询
  17. 2020年信创产品测试结果
  18. AutoLeaders——翁恺老师的结构的笔记
  19. 短文件名漏洞如何修复_IIS短文件名泄露漏洞修复解决方案?
  20. keil工程 freertos AC5编译器移植到AC6编译器

热门文章

  1. linux服务器的诗句迁移,使用scp命令在两台linux上对拷文件或者文件夹
  2. iphone退款申请教程_【揭秘】朋友圈卖的iOS退款、王者荣耀0元撸点券教程
  3. bzoj3572 [HNOI2014]世界树 虚树 +乱dp
  4. 2017.3.22 小z的袜子 思考记录
  5. 【英语学习】【医学】无机化学 - 化合物命名(2) - 非金属类二元化合物
  6. Intel 64/x86_64/IA-32/x86处理器 - 通用指令(9/E) - 比特位操控指令(BMI1 BMI2)
  7. Intel 64/x86_64/x86/IA-32处理器串行化指令(1) - 概述
  8. Java语言基本元素
  9. python底层源码_大师兄的Python机器学习笔记:统计学基础之底层代码实现(一)...
  10. 光线求交加速算法:边界体积层次结构(Bounding Volume Hierarchies)3-LBVH(Linear Bounding Volume Hierarchies)