文档章节

机器学习系列二:决策树算法

听风的小猪
 听风的小猪
发布于 2017/03/16 11:32
字数 730
阅读 142
收藏 2

机器学习中分类和预测算法的评估:

  • 准确率
  • 速度
  • 强壮性
  • 可规模性
  • 可解释性

一、什么是决策树(decision tree)

决策树是一个类似于流程图的树结构:其中每个内部节点表示在一个属性上的测试,每个分支代表一个属性输出,而每个树节点代表类或类分布,树的最顶层是根节点。输入图片说明

熵(entropy):如何度量信息。

一条信息的信息量大小和它的不确定性有直接的关系,要搞清楚一件非常非常不确定的事情,或者是我们一无所知的事情,需要了解大量的信息=====》信息量的度量就等于不确定性的多少。

计算信息熵的公式: 输入图片说明

公式意思是每一个可发生情况的概率乘以一个以2为底的对数,所有情况相加起来。

变量的不确定性越大,熵也就越大,比特(bit)来衡量信息的多少。

二、决策树归纳算法(ID3算法)

选择属性判断节点

信息获取量:Gain(A) = Info(D)- Info_A(D)

通过A来作为节点分类获取了多少信息。下图是根据年龄、收入、是否为学生、信用度来判断是否买了电脑。

输入图片说明 输入图片说明

根据年龄

输入图片说明 输入图片说明 输入图片说明 输入图片说明

决策树的优点:

直观、便于理解,小规模数据集有效

决策树的缺点:

  1. 处理连续变量不好
  2. 类别较多时,错误增加的比较快
  3. 可规模性一般

下面是实例代码: 代码中的example.csv文件是根据图片上的内容整理的csv文件,如下: 输入图片说明

首先需要先安装scikit-learn、numpy等包。

pip install scikit-learn

# -*- coding:utf-8 -*-
from sklearn.feature_extraction import DictVectorizer
import csv
from sklearn import preprocessing
from sklearn import tree
from sklearn.externals.six import StringIO

#读取csv文件
allElectronicsData = open('example.csv', 'rb')
reader = csv.reader(allElectronicsData)
headers = reader.next()

# headers是csv文件的第一行数据
print(headers)
# featurelist是特征值,例如年龄、信用度等
featureList = []
# labelList是标签值,也就结果即是否买电脑
labelList = []

for row in reader:
    labelList.append(row[len(row) - 1])
    rowDict = {}
    for i in range(1, len(row) - 1):
        rowDict[headers[i]] = row[i]
    featureList.append(rowDict)
print(featureList)

allElectronicsData.close()

vec = DictVectorizer()
# 特征值的列表,是0,1的列表
dummyX = vec.fit_transform(featureList).toarray()
print("dummyX:" + str(dummyX))
print(type(dummyX))
print(vec.get_feature_names())
print("labelList:" + str(labelList))

lb = preprocessing.LabelBinarizer()
dummyY = lb.fit_transform(labelList)
print("dummyY:" + str(dummyY))

# 根据信息熵来构建树的节点
clf = tree.DecisionTreeClassifier(criterion="entropy")
# 建模
clf = clf.fit(dummyX, dummyY)
print("clf:" + str(clf))
# 生成一个dot树,可用 dot命令生成pdf文件
with open("allElectronicInformationGainOri.dot", "w") as f:
    f = tree.export_graphviz(clf, feature_names=vec.get_feature_names(), out_file=f)

# oneRowX是拷贝出一条数据,修改一些特征值,来进行测试
oneRowX = dummyX[0, :]
print("oneRowX:" + str(oneRowX))
newRowX = oneRowX

newRowX[0] = 1
newRowX[2] = 0
print("newRowX:" + str(newRowX))

# predicedY是预测的结果
predictedY = clf.predict(newRowX)
print("predictedY:" + str(predictedY))

生成的allElectronicInformationGainOri.dot文件可以用dot生成pdf文件

sudo apt-get install graphviz

dot -Tpdf allElectronicInformationGainOri.dot -o test.pdf

生成的pdf文件如下:

输入图片说明

© 著作权归作者所有

听风的小猪

听风的小猪

粉丝 81
博文 39
码字总数 35907
作品 0
黄浦
程序员
私信 提问
《机器学习》(周志华)课后习题参考答案

目录: 周志华《机器学习》课后习题解答系列(二):Ch1 - 绪论 周志华《机器学习》课后习题解答系列(三):Ch2 - 模型评估与选择 周志华《机器学习》课后习题解答系列(四):Ch3 - 线性模...

kchai31
2018/01/04
0
0
算法|决策树算法究竟说的是什么?

作者简介 浩彬老撕,R语言中文社区特邀作者。 个人公众号:探数寻理 决策树算法概述

kmd8d5r
2018/05/10
0
0
机器学习系列(三十六)——回归决策树与决策树总结

本篇主要内容:回归决策树原理、回归树学习曲线、决策树总结 回归决策树原理 回归决策树树是用于回归的决策树模型,回归决策树主要指CART算法, 同样也为二叉树结构。以两个特征预测输出的回...

Ice_spring
08/03
0
0
大白话5分钟带你走进人工智能 - 第二十二节决策树系列之概念介绍(1)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LHWorldBlog/article/details/89854819 第二十二节决策树系列之概念介绍(1) 本系列我们讲一个新算法及其衍生出...

LHWorldBlog
05/05
0
0
决策树(decision tree)(三)——连续值处理

决策树(decision tree)(三)——连续值处理 **注:本博客为周志华《机器学习》读书笔记,虽然有一些自己的理解,但是其中仍然有大量文字摘自周老师的《机器学习》书。 决策树系列博客: 决策...

tantexian
2018/08/11
277
0

没有更多内容

加载失败,请刷新页面

加载更多

代理模式之JDK动态代理 — “JDK Dynamic Proxy“

动态代理的原理是什么? 所谓的动态代理,他是一个代理机制,代理机制可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成,通过代理可以有效的让调...

code-ortaerc
29分钟前
4
0
学习记录(day05-标签操作、属性绑定、语句控制、数据绑定、事件绑定、案例用户登录)

[TOC] 1.1.1标签操作v-text&v-html v-text:会把data中绑定的数据值原样输出。 v-html:会把data中值输出,且会自动解析html代码 <!--可以将指定的内容显示到标签体中--><标签 v-text=""></......

庭前云落
今天
7
0
VMware vSphere的两种RDM磁盘

在VMware vSphere vCenter中创建虚拟机时,可以添加一种叫RDM的磁盘。 RDM - Raw Device Mapping,原始设备映射,那么,RDM磁盘是不是就可以称作为“原始设备映射磁盘”呢?这也是一种可以热...

大别阿郎
今天
10
0
【AngularJS学习笔记】02 小杂烩及学习总结

本文转载于:专业的前端网站☞【AngularJS学习笔记】02 小杂烩及学习总结 表格示例 <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names | orderBy ......

前端老手
昨天
14
0
Linux 内核的五大创新

在科技行业,创新这个词几乎和革命一样到处泛滥,所以很难将那些夸张的东西与真正令人振奋的东西区分开来。Linux内核被称为创新,但它又被称为现代计算中最大的奇迹,一个微观世界中的庞然大...

阮鹏
昨天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部