python使用sklearn实现决策树的方法示例


Posted in Python onSeptember 12, 2019

1. 基本环境

安装 anaconda 环境, 由于国内登陆不了他的官网 https://www.continuum.io/downloads, 不过可以使用国内的镜像站点: https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/

添加绘图工具 Graphviz http://www.graphviz.org/Download_windows.php

安装后, 将bin 目录内容添加到环境变量path 即可

参考blog : https://3water.com/article/169878.htm

官网技术文档 : http://scikit-learn.org/stable/modules/tree.html#tree-algorithms-id3-c4-5-c5-0-and-cart

2. 遇到的一些问题

csv 文件读取 https://docs.python.org/3.5/library/csv.html?highlight=csv#module-csv

https://docs.python.org/2/library/csv.html?highlight=csv#module-csv

3. 实现

数据文件:

python使用sklearn实现决策树的方法示例 

这是一个给定 4 个属性, age, income, student, credit_rating 以及 一个 标记属性 class_buys_computer 的数据集, 我们需要根据这个数据集进行分析并构建一颗决策树

代码实现:

核心就是调用 tree 的 DecisionTreeClassifier 方法对数据进行 训练得到一颗决策树

# -*- coding: utf-8 -*-
"""
Created on Sun Dec 25 11:25:40 2016

@author: Administrator
"""

from sklearn.feature_extraction import DictVectorizer
import csv
from sklearn import tree
from sklearn import preprocessing
from sklearn.externals.six import StringIO
import pydotplus
from IPython.display import Image

# Read in the csv file and put features into list of dict and list of class label
allElectornicsData = open('AllElectronics.csv', 'r')
reader = csv.reader(allElectornicsData)
# headers = reader.next()  python2.7 supported  本质获取csv 文件的第一行数据
#headers = reader.__next__()  python 3.5.2 
headers = next(reader)

print(headers)

featureList = []
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)
print(labelList)

# Vetorize features
vec = DictVectorizer()
dummyX = vec.fit_transform(featureList).toarray()

print("dummyX: " + str(dummyX))
print(vec.get_feature_names())
print("labelList: " + str(labelList))

# vectorize class labels
lb = preprocessing.LabelBinarizer()
dummyY = lb.fit_transform(labelList)
print("dummyY: ", str(dummyY))

# Using decision tree for classification    ===========【此处调用为算法核心】============
#clf = tree.DecisionTreeClassifier(criterion='entropy')
clf = tree.DecisionTreeClassifier(criterion='gini')
clf = clf.fit(dummyX, dummyY)
print("clf: ", str(clf))

# Visualize model
# dot -Tpdf iris.dot -o ouput.pdf
with open("allElectronicInformationGainOri.dot", 'w') as f:
  f = tree.export_graphviz(clf, feature_names = vec.get_feature_names(), out_file = f)


# predict
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))

输出结果:

ID3 算法

python使用sklearn实现决策树的方法示例

CART 算法

python使用sklearn实现决策树的方法示例

4. 决策树的优缺点

决策树的优势

  1. 简单易用,而且输出的结果易于解释,树能够被图形化,加深了直观的理解。
  2. 几乎不需要对数据进行预处理。
  3. 算法的开销不大,而且决策树一旦建立,对于未知样本的分类十分快,最坏情况下的时间复杂度是O(w),w是树的最大深度。
  4. 能够用于多类的分类。
  5. 能够容忍噪点。

决策树的劣势

  1. 容易过拟合。
  2. 容易被类别中占多数的类影响而产生bias,所以推荐在送入算法之间先平衡下数据中各个类别所占的比例。
  3. 决策树采用的是自顶向下的递归划分法,因此自定而下到了末端枝叶包含的数据量会很少,我们会依据很少的数据量取做决策,这样的决策是不具有统计意义的,这就是数据碎片的问题。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python异步任务队列示例
Apr 01 Python
深入Python函数编程的一些特性
Apr 13 Python
Python 实现简单的电话本功能
Aug 09 Python
Python正则表达式使用范例分享
Dec 04 Python
python 第三方库的安装及pip的使用详解
May 11 Python
Python中使用支持向量机SVM实践
Dec 27 Python
Python不使用int()函数把字符串转换为数字的方法
Jul 09 Python
使用apiDoc实现python接口文档编写
Nov 19 Python
python matplotlib.pyplot.plot()参数用法
Apr 14 Python
将pymysql获取到的数据类型是tuple转化为pandas方式
May 15 Python
Python如何操作docker redis过程解析
Aug 10 Python
python 读取串口数据的示例
Nov 09 Python
Python环境Pillow( PIL )图像处理工具使用解析
Sep 12 #Python
Python列表删除元素del、pop()和remove()的区别小结
Sep 11 #Python
python conda操作方法
Sep 11 #Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
Sep 11 #Python
浅谈Django+Gunicorn+Nginx部署之路
Sep 11 #Python
初次部署django+gunicorn+nginx的方法步骤
Sep 11 #Python
python 如何将数据写入本地txt文本文件的实现方法
Sep 11 #Python
You might like
php 防止单引号,双引号在接受页面转义
2008/07/10 PHP
PHP5权威编程阅读学习笔记 附电子书下载
2012/07/05 PHP
jquery+php实现搜索框自动提示
2014/11/28 Javascript
javaScript基础语法介绍
2015/02/28 Javascript
javascript密码强度校验代码(两种方法)
2015/08/10 Javascript
Node.js实现数据推送
2016/04/14 Javascript
JS获取和修改元素样式的实例代码
2016/08/06 Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
2017/07/09 Javascript
python爬取安居客二手房网站数据(实例讲解)
2017/10/19 Javascript
angular4 共享服务在多个组件中数据通信的示例
2018/03/30 Javascript
webpack 3.X学习之多页面打包的方法
2018/09/04 Javascript
JS实现在线ps功能详解
2019/07/31 Javascript
python抓取京东价格分析京东商品价格走势
2014/01/09 Python
Python爬虫之模拟知乎登录的方法教程
2017/05/25 Python
Python单例模式的两种实现方法
2017/08/14 Python
python时间日期函数与利用pandas进行时间序列处理详解
2018/03/13 Python
Selenium定时刷新网页的实现代码
2018/10/31 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
2019/07/09 Python
关于python字符串方法分类详解
2019/08/20 Python
WxPython实现无边框界面
2019/11/18 Python
html5 横向滑动导航栏的方法示例
2020/05/08 HTML / CSS
AmazeUI 导航条的实现示例
2020/08/14 HTML / CSS
美国家喻户晓的保健品品牌:Vitamin World(维他命世界)
2016/08/19 全球购物
瑜伽服装品牌:露露柠檬(lululemon athletica)
2017/06/04 全球购物
美国购买体育赛事门票网站:TicketCity
2019/03/06 全球购物
什么是Web Service?
2012/07/25 面试题
十岁生日家长答谢词
2014/01/17 职场文书
时尚休闲吧创业计划书
2014/01/25 职场文书
酒店保安员岗位职责
2014/01/31 职场文书
试用期转正员工自我评价
2014/09/18 职场文书
房屋买卖协议书范本
2014/09/27 职场文书
2014镇党委书记党建工作汇报材料
2014/11/02 职场文书
党小组推荐意见
2015/06/02 职场文书
《司马光》教学反思
2016/02/22 职场文书
python保存图片的四个常用方法
2022/02/28 Python
Python采集股票数据并制作可视化柱状图
2022/04/04 Python