scikit-learn决策树的python实现以及作图
decsion tree(决策树)
其中每个内部结点表示在一个属性上的测试,每个分支代表一个属性的输出,而每个树叶结点代表类或类的分布。树的最顶层是根节点
连续变量要离散化
机器学习中分类方法的一个重要算法
信息熵:
一个信息的信息量大小和它的不确定性有直接的关系,要搞清楚一件非常非常不确定的事情,或者是我么你一无所知的事情,需要了解大量新==》新的度量就等于不确定性的多少
变量的不确定性越大,熵也就越大
ID3
通过信息熵来选择每个节点的判断依据。
infomation gain最大则为当前节点的依据。
决策树的优点缺点
优点:直观,便于理解,小规模数据集有效
缺点:处理连续变量不好 类别较多时,错误增加比较快,可规模性一般
决策树程序
安装anaconda python环境
anaconda环境包含了机器学习的基本所有库安装graphviz
转化dot文件到pdf生成决策树图
进入到cmd中allEectronicInformationGainorc.dot所在文件夹
dot -Tpdf allEectronicInformationGainorc.dot -o outpu.pdf
- program
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import csv
import os
from sklearn import preprocessing
from sklearn.feature_extraction import DictVectorizer
from sklearn import tree
dataDir = os.path.dirname(__file__)
#载入数据并分割
allElectroncsData = open(dataDir+"/data/red.csv","r")
reader = csv.reader(allElectroncsData)
num =0
headers = []
for row in reader:
headers = row
if num == 0:
break
print(headers)
featureList = []
labelList = []
for row in reader:
labelList.append(row[-1])
rowDict={}
for i in range(1 , len(row)-1):
rowDict[headers[i]] = row[i]
featureList.append(rowDict)
print(labelList)
for feature in featureList:
print(feature)
#vectordic,向量化
vec = DictVectorizer()
dummyX = vec.fit_transform(featureList).toarray()
print(dummyX)
print(vec.get_feature_names())
#vectorize calss labels
lb = preprocessing.LabelBinarizer()
dummyY = lb.fit_transform(labelList)
print("dummyY:"+str(dummyY))
#using decision tree for classfication
clf = tree.DecisionTreeClassifier(criterion='entropy')##度量标准为entropy信息熵
clf = clf.fit(dummyX,dummyY)
print("clf"+str(clf))
#viuslize model,可视化
# with open("allEectronicInformationGainorc.dot", 'w') as f:
# f = tree.export_graphviz(clf, feature_names=vec.get_feature_names(), out_file=f)
#
# with open("hello.dot", "w") as f1:
# f1 = tree.export_graphviz(clf, feature_names=vec.get_feature_names(), out_file=f1)
#predic 预测
oneRowX = dummyX[0,:]
print("oneRowX:"+str(oneRowX))
newRowX = oneRowX
newRowX[0] =1
newRowX[2] =0
print("newRowX: "+str(newRowX))
predictedY = clf.predict(newRowX)
print("predictY: "+str(predictedY))
scikit-learn决策树的python实现以及作图的更多相关文章
- Scikit Learn: 在python中机器学习
转自:http://my.oschina.net/u/175377/blog/84420#OSC_h2_23 Scikit Learn: 在python中机器学习 Warning 警告:有些没能理解的 ...
- scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类 (python代码)
scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类数据集 fetch_20newsgroups #-*- coding: UTF-8 -*- import ...
- Scikit Learn
Scikit Learn Scikit-Learn简称sklearn,基于 Python 语言的,简单高效的数据挖掘和数据分析工具,建立在 NumPy,SciPy 和 matplotlib 上.
- (原创)(三)机器学习笔记之Scikit Learn的线性回归模型初探
一.Scikit Learn中使用estimator三部曲 1. 构造estimator 2. 训练模型:fit 3. 利用模型进行预测:predict 二.模型评价 模型训练好后,度量模型拟合效果的 ...
- (原创)(四)机器学习笔记之Scikit Learn的Logistic回归初探
目录 5.3 使用LogisticRegressionCV进行正则化的 Logistic Regression 参数调优 一.Scikit Learn中有关logistics回归函数的介绍 1. 交叉 ...
- 用python的turtle作图(二)动画吃豆人
本文是用python的turtle作图的第二篇,通过这个例子可以了解动画的原理,用python自带的turtle库制作一些小动画. 1.问题描述 在上一篇"用python的turtle作图( ...
- Python第三方库(模块)"scikit learn"以及其他库的安装
scikit-learn是一个用于机器学习的 Python 模块. 其主页:http://scikit-learn.org/stable/. GitHub地址: https://github.com/ ...
- Query意图分析:记一次完整的机器学习过程(scikit learn library学习笔记)
所谓学习问题,是指观察由n个样本组成的集合,并根据这些数据来预测未知数据的性质. 学习任务(一个二分类问题): 区分一个普通的互联网检索Query是否具有某个垂直领域的意图.假设现在有一个O2O领域的 ...
- 决策树及其python实现
剪枝 由于悲观错误剪枝 PEP (Pessimistic Error Pruning).代价-复杂度剪枝 CCP (Cost-Complexity Pruning).基于错误剪枝 EBP (Error ...
随机推荐
- SQL索引的优缺点
--索引的优点 /* (1)创建唯一索引,保证数据库表中每一行数据的唯一性 (2)大大加速数据的检索速度,这也是创建索引的最主要的原因 (3)加速表和表至今的连接,特别是在实现数据的参考完整性特别有意 ...
- 【代码笔记】iOS-单击手势的添加
一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...
- Git——远程操作详解
转载自:http://www.ruanyifeng.com/blog/2014/06/git_remote.html 作者: 阮一峰 日期: 2014年6月12日 Git是目前最流行的版本管理系统,学 ...
- PHP自定义函数&数组
<?php//生成随机数 和 时间函数//echo rand();//echo "<br>";//echo rand(0,10);//echo time();// ...
- RxJava重温基础
RxJava是什么 a library for composing asynchronous and event-based programs using observable sequences f ...
- String 类型
一.不可变 一个 String 类型的值是不可以改变的,比如,String china = "中国",“中国”这个字符串从它创建开始直到销毁都是不可改变的. 二.字符串常量池 字面 ...
- SQL索引未使用
针对自己曾经经历过的一道面试题,那些情况不走索引,于是搜索网络和书籍的一些资料,整理如下: 1.查询谓词没有使用索引的主要边界,换句话说就是select *,可能会导致不走索引.比如,你查询的是SEL ...
- Oracle使用order by排序关于null值处理
select * from dual order by age desc nulls last select * from test order by age asc nulls first sqls ...
- 记录Ubuntu14.04 LTS版本中使用Docker的过程
sudo apt-get update sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ software-p ...
- [BZOJ 5252][LOJ 2478][九省联考2018] 林克卡特树
[BZOJ 5252][LOJ 2478][九省联考2018] 林克卡特树 题意 给定一个 \(n\) 个点边带权的无根树, 要求切断其中恰好 \(k\) 条边再连 \(k\) 条边权为 \(0\) ...