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实现以及作图的更多相关文章

  1. Scikit Learn: 在python中机器学习

    转自:http://my.oschina.net/u/175377/blog/84420#OSC_h2_23 Scikit Learn: 在python中机器学习 Warning 警告:有些没能理解的 ...

  2. scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类 (python代码)

    scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类数据集 fetch_20newsgroups #-*- coding: UTF-8 -*- import ...

  3. Scikit Learn

    Scikit Learn Scikit-Learn简称sklearn,基于 Python 语言的,简单高效的数据挖掘和数据分析工具,建立在 NumPy,SciPy 和 matplotlib 上.

  4. (原创)(三)机器学习笔记之Scikit Learn的线性回归模型初探

    一.Scikit Learn中使用estimator三部曲 1. 构造estimator 2. 训练模型:fit 3. 利用模型进行预测:predict 二.模型评价 模型训练好后,度量模型拟合效果的 ...

  5. (原创)(四)机器学习笔记之Scikit Learn的Logistic回归初探

    目录 5.3 使用LogisticRegressionCV进行正则化的 Logistic Regression 参数调优 一.Scikit Learn中有关logistics回归函数的介绍 1. 交叉 ...

  6. 用python的turtle作图(二)动画吃豆人

    本文是用python的turtle作图的第二篇,通过这个例子可以了解动画的原理,用python自带的turtle库制作一些小动画. 1.问题描述 在上一篇"用python的turtle作图( ...

  7. Python第三方库(模块)"scikit learn"以及其他库的安装

    scikit-learn是一个用于机器学习的 Python 模块. 其主页:http://scikit-learn.org/stable/. GitHub地址: https://github.com/ ...

  8. Query意图分析:记一次完整的机器学习过程(scikit learn library学习笔记)

    所谓学习问题,是指观察由n个样本组成的集合,并根据这些数据来预测未知数据的性质. 学习任务(一个二分类问题): 区分一个普通的互联网检索Query是否具有某个垂直领域的意图.假设现在有一个O2O领域的 ...

  9. 决策树及其python实现

    剪枝 由于悲观错误剪枝 PEP (Pessimistic Error Pruning).代价-复杂度剪枝 CCP (Cost-Complexity Pruning).基于错误剪枝 EBP (Error ...

随机推荐

  1. 牛顿迭代法(Newton's Method)

    牛顿迭代法(Newton's Method) 简介 牛顿迭代法(简称牛顿法)由英国著名的数学家牛顿爵士最早提出.牛顿法的作用是使用迭代的方法来求解函数方程的根.简单地说,牛顿法就是不断求取切线的过程. ...

  2. [转]Linux内核最新的连续内存分配器(CMA)——避免预留大块内存

    http://blog.csdn.net/21cnbao/article/details/7309757 在我们使用ARM等嵌入式Linux系统的时候,一个头疼的问题是GPU,Camera,HDMI等 ...

  3. redis 集群目标、集群查看、配置方法及过程、哨兵配置启动

    集群目标 主从复制,读写分离:故障切换(通过哨兵实现) 查看集群状态 info replication 配置方法 只设置从数据库就可以了:最佳实践,在主数据库配置masterauth <mast ...

  4. elipse安装php

    在用eclipse作为PHP的开发IDE工具时,如果下载的Eclipse不带有PHP功能,则需要我们自己来给Eclipse升级.不过也可以下载eclipseForPHP 在Eclipse的help菜单 ...

  5. Axure中移动端原型设计方法(附IPhoneX和IPhone8最新模板)

    Axure中移动端原型设计方法(附IPhoneX和IPhone8最新模板) 2018年4月16日luodonggan Axure中基于设备模板的移动端原型设计方法(附IPhoneX和IPhone8最新 ...

  6. 1.windows下Redis安装

    参考文档:https://www.cnblogs.com/Leo_wl/p/6392196.html?utm_source=itdadao&utm_medium=referral Redis数 ...

  7. windows下搭建vue开发环境

    Vue.js是一套构建用户界面的 “渐进式框架”.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合.2016 ...

  8. 【Excel】如何用SUMIF实现SUMIFS的功能

    如何用SUMIF实现SUMIFS的功能   添加辅助列,辅助列内容为"条件区域1内容+条件区域内容2" 举个例子,我要挑选出"二车间"的"过桥过路费& ...

  9. zabbix的日常监控-磁盘性能监控(十二)

    监控磁盘的性能 参考文章: https://wiki.enchtex.info/howto/zabbix/zabbix_iostat_monitoring https://blog.csdn.net/ ...

  10. QQ邮箱验证码

    人的记忆有时候跟鱼一样,只有七秒钟,短暂的时间! .NET  Web窗体实现忘记密码,使用QQ邮箱验证修改 一.首先设置一下发送个人或企业发送的邮箱 二.登录邮箱进行设置,如图:  三.关闭邮箱 四. ...