关闭

scikit-learn学习之决策树算法

12642人阅读 评论(15) 收藏 举报
分类:
======================================================================
本系列博客主要参考 Scikit-Learn 官方网站上的每一个算法进行,并进行部分翻译,如有错误,请大家指正   
======================================================================

决策树的算法分析与Python代码实现请参考之前的一篇博客:点击阅读    接下来我主要演示怎么使用Scikit-Learn完成决策树算法的调用


iris数据集说明:

点击查看



决策树算法的优点:
1:理解和解释起来简单,且决策树模型可以想象
2:需要准备的数据量不大,而其他的技术往往需要很大的数据集,需要创建虚拟变量,去除不完整的数据,但是该算法对于丢失的数据不能进行准确的预测
3:决策树算法的时间复杂度(即预测数据)是用于训练决策树的数据点的对数
4:能够处理数字和数据的类别(需要做相应的转变),而其他算法分析的数据集往往是只有一种类型的变量
5:能够处理多输出的问题
6:使用白盒模型,如果给定的情况是在一个模型中观察到的,该条件的解释很容易解释的布尔逻辑,相比之下,在一个黑盒子模型(例如人工神经网络),结果可能更难以解释
7:可能使用统计检验来验证模型,这是为了验证模型的可靠性
8:从数据结果来看,它执行的效果很好,虽然它的假设有点违反真实模型



决策树算法的缺点:

1:决策树算法学习者可以创建复杂的树,但是没有推广依据,这就是所谓的过拟合,为了避免这种问题,出现了剪枝的概念,即设置一个叶子结点所需要的最小数目或者设置树的最大深度
2:决策树的结果可能是不稳定的,因为在数据中一个很小的变化可能导致生成一个完全不同的树,这个问题可以通过使用集成决策树来解决
3:众所周知,学习一恶搞最优决策树的问题是NP——得到几方面完全的优越性,甚至是一些简单的概念。因此,实际决策树学习算法是基于启发式算法,如贪婪算法,寻求在每个节点上的局部最优决策。这样的算法不能保证返回全局最优决策树。这可以减轻训练多棵树的合奏学习者,在那里的功能和样本随机抽样更换。
4:这里有一些概念是很难的理解的,因为决策树本身并不难很轻易的表达它们,比如说异或校验或复用的问题。
5:决策树学习者很可能在某些类占主导地位时创建有有偏异的树,因此建议用平衡的数据训练决策树



Classification  简单示例

>>> from sklearn import tree
>>> X = [[0, 0], [1, 1]]
>>> Y = [0, 1]
>>> clf = tree.DecisionTreeClassifier()
>>> clf = clf.fit(X, Y)
>>> clf.predict([[2., 2.]])
array([1])

Regression 简单示例

>>> from sklearn import tree
>>> X = [[0, 0], [2, 2]]
>>> y = [0.5, 2.5]
>>> clf = tree.DecisionTreeRegressor()
>>> clf = clf.fit(X, y)
>>> clf.predict([[1, 1]])
array([ 0.5])

决策树算法使用 示例

数据集如下图:


程序如下:
<span style="font-size:18px;">#-*- coding: UTF-8 -*- 
'''
Created on 2016/4/23

@author: Administrator
'''
from sklearn.feature_extraction import DictVectorizer
import csv
from sklearn import preprocessing
from sklearn import tree
from sklearn.externals.six import StringIO

#Read in the csv File and put feature in a list of class label
allElectronicsData = open(r"example.csv","rb")
reader = csv.reader(allElectronicsData)
headers = reader.next()
#print headers

featureList = []  
labelList = []
#存放在两个元祖中
for row in reader:
    labelList.append(row[len(row)-1])
    rowDic = {}
    for i in range(1,len(row)-1):
        rowDic[headers[i]] = row[i]
    featureList.append(rowDic)
    
# print featureList
# print labelList

# Vector Feature
vec = DictVectorizer()
dummyX = vec.fit_transform(featureList) .toarray()
# print "dummyX:",dummyX
# print vec.get_feature_names()
# print "labelList:"+str(labelList)

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

#using desicionTree for classfication
clf = tree.DecisionTreeClassifier(criterion="entropy") #创建一个分类器,entropy决定了用ID3算法
clf = clf.fit(dummyX, dummyY)
print "clf:"+str(clf)

#Visulize model
with open("allEallElectronicInfomationGainori.txt","w") as f:
    f = tree.export_graphviz(clf, feature_names=vec.get_feature_names(), out_file = f)

#预测    
oneRowX = dummyX[0,:]
#print "oneRowX:" +str(oneRowX)

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

predictedY = clf.predict(newRowX)
print "predictedY:" + str(predictedY)</span>

使用命令导出图形为pdf:dot -T pdf ex.txt -o output.pdf.txt  (windows cmd的命令)


2
0
查看评论

用Python开始机器学习(2:决策树分类算法)

从这一章开始进入正式的算法学习。首先我们学习
  • lsldd
  • lsldd
  • 2014-11-18 01:05
  • 60444

Python sklearn库中决策树tree.DecisionTreeClassifier()函数参数介绍

Python sklearn库中决策树tree.DecisionTreeClassifier()函数参数介绍
  • li980828298
  • li980828298
  • 2016-04-17 13:12
  • 11861

sklearn中的分类决策树

决策树决策树简介决策树是一种使用if-then-else的决策规则的监督学习方法.其三要素为,枝节点,叶节点与分支条件,同时为了减少过拟合还有剪枝方法 为了便于记忆,可以称其为一方法三要素决策树的优势 便于理解和解释。树的结构可以可视化出来。 训练需要的数据少。其他机器学习模型通常需要数据规范化,...
  • FontThrone
  • FontThrone
  • 2017-12-17 11:55
  • 245

CART决策树的sklearn实现及其GraphViz可视化

这一部分,我使用了sklearn来调用决策树模型对葡萄酒数据进行分类。在此之外,使用Python调用AT&T实验室开源的画图工具GraphViz软件以实现决策树的可视化。from sklearn.datasets import load_iris from sklearn import tr...
  • chai_zheng
  • chai_zheng
  • 2017-10-13 15:25
  • 1345

python实现机器学习之决策树

这几天在看决策树算法,发现这算法在实际的应用中使用挺多的。所以想总结一下: 这里给出一些我觉得比较好的博客链接: http://blog.jobbole.com/86443/ 通俗易懂,同时也讲了一些决策树算法:如ID3、C4.5之类的。以及建立完完整的决策树之后,为了防止过拟合而进行的剪枝的操...
  • LULEI1217
  • LULEI1217
  • 2015-11-02 10:35
  • 6551

使用python+sklearn的决策树方法预测是否有信用风险

使用python+sklearn的决策树方法预测是否有信用风险
  • sun_shengyun
  • sun_shengyun
  • 2016-09-21 11:01
  • 1961

决策树ID3、C4.5、C5.0以及CART算法之间的比较-并用scikit-learn决策树拟合Iris数据集

引言在这篇文章中,我主要介绍一下关于信息增益,并比较ID3、C4.5、C5.0以及CART算法之间的不同,并给出一些细节的实现。最后,我用scikit-learn的决策树拟合了Iris数据集,并生成了最后的决策树图片信息增益(information gain (IG))在介绍信息增益之前,我想先介绍...
  • xlinsist
  • xlinsist
  • 2016-05-21 20:57
  • 11398

30分钟学会用scikit-learn的基本回归方法(线性、决策树、SVM、KNN)和集成方法(随机森林,Adaboost和GBRT)

真注:本教程是本人尝试使用scikit-learn的一些经验,scikit-learn帧的超级容易上手,简单实用。30分钟学会用调用基本的回归方法和集成方法应该是够了。 本文主要参考了scikit-learn的官方网站 前言:本教程主要使用了numpy的最最基本的功能,用于生成数据,matplo...
  • u010900574
  • u010900574
  • 2016-09-26 03:16
  • 9572

决策树分类器在Scikit-learn的使用小结

scikit-learn决策树算法库内部实现是使用了调优过的CART树算法,既可以做分类,又可以做回归。本文详细介绍DecisionTreeClassifier 在python scikit-learn上的使用。包含数据读取,模块载入,模块使用,规则导出,模型保存,调参说明。
  • qq_29003925
  • qq_29003925
  • 2017-07-17 11:54
  • 625

【scikit-learn】07:数据加载,数据归一,特征选择,逻辑回归,贝叶斯,k近邻,决策树,SVM

引言      对于一些开始搞机器学习算法有害怕下手的小朋友,该如何快速入门,这让人挺挣扎的。       在从事数据科学的人中,最常用的工具就是R和Python了,每个工具都...
  • kevinelstri
  • kevinelstri
  • 2016-09-23 11:51
  • 2248
    微信公众号【数据与算法联盟】

    扫码关注公众号,不定期推送实战文章!

    扫码加我微信,拉你进数据算法大佬群!
    个人资料
    • 访问:1066112次
    • 积分:11758
    • 等级:
    • 排名:第1530名
    • 原创:227篇
    • 转载:22篇
    • 译文:2篇
    • 评论:343条
    个人简介
    姓名:Thinkgamer

    Github:https://github.com/thinkgamer

    主攻:云计算/python/数据分析

    程度:熟悉/熟悉/熟悉

    微信:gyt13342445911

    Email:thinkgamer@163.com

    工作状态:在职ing

    心灵鸡汤:只要努力,你就是下一个大牛...

    hadoop/spark/机器学习群:279807394(大神建的群,蹭个管理员)

    欢迎骚扰........
    博客专栏
    最新评论