决策树算法实现

1、python

本课程的机器学习的算法都是基于python语言实现的,所以你需要有一定的python语言基础,可以参考彭亮在麦子学院讲授的“Python语言编程基础”。

2、python机器学习的库:scikit-learn

特性: 
1)简单高效的数据挖掘和机器学习分析 
2)对所有用户开放,根据不同需求高度可重用性 
3)基于Numpy, SciPy和matplotlib 
4)开源,商用级别:获得 BSD许可

覆盖问题领域: 
分类(classification),,回归(regression), 聚类(clustering), 
降维(dimensionality reduction),模型选择(model selection), 预处理(preprocessing)

3、使用scikit-learn

方式一:pip, easy_install(两个都是python安装package的工具,感觉pip更好用) 
方式二(推荐): 可使用Anaconda(这是一个科学计算环境 ,包含numpy, scipy,matplotlib等科学计算常用package,当然也包含scikit-learn包) 
anaconda下载地址:www.continuum.io/downloads 
anaconda安装注意问题:匹配的Python解释器版本(2.7 or 3.5), 系统版本(32位or64位)

4、安装Graphviz(数据可视化软件)

下载地址:www.graphviz.org 
安装完成后,将C:\Program Files (x86)\Graphviz2.38\bin(找你的graphviz/bin的路径)加入到系统变量path中


5、决策树算法实现

5.1、将原始数据录入csv文件中(如下图)

这里写图片描述

5.2、引入sk-learn相关的package

这里写图片描述

5.3、读取csv文件的数据到程序中

这里写图片描述

5.3、对数据预处理

这里写图片描述

5.4、决策树分类的核心代码

这里写图片描述

5.5、生成dot文件(结果不够直观)

这里写图片描述

dot文件: 
这里写图片描述

5.6、将dot文件用graphviz转换为pdf文件

在命令行下,cd到你的dot文件的路径下,输入 
dot -Tpdf filename.dot -o output.pdf 
(filename以dot文件名为准) 
可以看见同路径下生成了一个pdf文件

如图: 
这里写图片描述

5.7、测试代码

这里写图片描述

5.8、源程序
#coding=gbk

# DictVectorizer:数据类型转换
from sklearn.feature_extraction import DictVectorizer

# csv:原始数据放在csv文件中,该package为python自带,不需要安装
import csv

#引入数据预处理包、决策树包、读写字符串包
from sklearn import preprocessing
from sklearn import tree
from sklearn.externals.six import StringIO


#从csv文件中读取数据,并保存到allElectronicsData变量中
allElectronicsData = open(r'D:\eclipse\mars\project\DeepLearningBasicsMachineLearning\Datasets\AllElectronics.csv','r')
# csv的reader方法按行读取数据
reader = csv.reader(allElectronicsData)
#next方法读取到csv文件的第一行数据
headers = next(reader)
#打印第一行数据
print(headers)


#建两个list,featureList装特征值,labelList装类别标签
featureList = []
labelList = []

#遍历csv文件的每一行
for row in reader:
    #将类别标签加入到labelList中
    labelList.append(row[len(row)-1])
    #下面这几步的目的是为了让特征值转化成一种字典的形式,就可以调用sk-learn里面的DictVectorizer,直接将特征的类别值转化成0,1值
    rowDict = {}
    for i in range(1,len(row)-1):
        rowDict[headers[i]] = row[i]
    featureList.append(rowDict)
print(featureList)

#实例化    
vec = DictVectorizer()
dummyX = vec.fit_transform(featureList).toarray()
print("dummyX:"+str(dummyX))
print(vec.get_feature_names())

# label的转化,直接用preprocessing的LabelBinarizer方法
lb = preprocessing.LabelBinarizer()
dummyY = lb.fit_transform(labelList)
print("dummyY:"+str(dummyY))
print("labelList:"+str(labelList))


#criterion是选择决策树节点的标准,这里是按照“熵”为标准,即ID3算法;默认标准是gini index,即CART算法。
clf = tree.DecisionTreeClassifier(criterion = 'entropy')
clf = clf.fit(dummyX,dummyY)
print("clf:"+str(clf))

#生成dot文件
with open("allElectronicInformationGainOri.dot",'w') as f:
    f = tree.export_graphviz(clf,feature_names = vec.get_feature_names(),out_file = f)

#测试代码,取第1个实例数据,将001->100,即age:youth->middle_aged    
oneRowX = dummyX[0,:]
print("oneRowX:"+str(oneRowX))
newRowX = oneRowX
newRowX[0] = 1
newRowX[2] = 0
print("newRowX:"+str(newRowX))

newRowX = newRowX.reshape(1, -1)
#预测代码predictedY = clf.predict(newRowX)print("predictedY:"+str(predictedY))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73

5.9、sk-learn的决策树文档

地址:scikit-learn.org/stable/modules/tree.html

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值