机器学习第一个算法决策树(DecisionTree)
来源:互联网 发布:银河历险记3mac破解版 编辑:程序博客网 时间:2024/05/20 07:34
开始认真学习机器学习相关的内容,看到了一个非常好的教学视频(麦子学院,彭亮老师讲的课),基本上是一节一节视频跟着来学习的。
机器学习主要目标是根据已有的属性,得到未知的结论,或者说预测,而能预测的前提是已经积累了很多的经验,等等类似的说法。从基本的监督学习,非监督学习,半监督学习,训练集,测试集等概念讲起,视频非常棒。
第一个介绍的算法是DecisionTree:
通过将数据模型转化为一个一个节点,满足条件即往下走的思路,走到最后就需要做出决策,这样一种算法称之为决策树。
简单的有比如,考虑西瓜甜不甜,我们可以将目标设置为甜还是不甜,即是0还是1。一般我们可以根据瓜蒂,声音,颜色等外在属性对西瓜进行预测。
假设瓜蒂有生、熟之分,声音有清脆、浑浊之分,颜色有深绿,浅绿,泛白之分。每一种属性我们都可以用0,1,来表示,主要是因为做数据处理之前需要将描述语言进行这样的数据处理。
瓜蒂生:0
瓜蒂熟:1
清脆:1
浑浊:0
深绿:1
浅绿:0
泛白:0
这样一组[0,1,10,1,0,0]的数据就可以表示瓜蒂熟,声音清脆,颜色深绿的西瓜,如果西瓜甜,则相当于结果是1。绍完基本思路之后,我们就开始用python做初步的demo。
先看 代码:
from sklearn.feature_extraction import DictVectorizer #字典转换import csv #读取csv数据from sklearn import preprocessing #sklearn的一些类from sklearn import tree from sklearn.externals.six import StringIO #读取csv文件,2.x和3.x在next()方法上有差别,2.x的时候open用('rb')reader.nest()#我用的是3.6,所以有一些改变,除了一问题在csv的读取上。try: filename = r'data3.csv' allElectronicsData = open(filename,'rt') reader = csv.reader(allElectronicsData) headers = next(reader) #第一行的数据 #for index, column_header in enumerate(headers): #print(index, column_header) #print(headers) #第一行 except: print("失败")#处理数据featureList = [] #python 列表,强大的数组labelList = []for row in reader: #reader 内容里有14行 #len(row) = 6 labelList.append(row[len(row)-1]) #标签的最后一列row[0]~row[5] rowDict = {} #创建字典 for i in range(1,len(row)-1): #从1到4 rowDict[headers[i]] = row[i] #字典的头和内容配对 featureList.append(rowDict) #print(featureList)#########以上是把数据从csv里读出来生成一一对应的字典##################以下就是将字典转成我们所需要的数据结构###############vec = DictVectorizer()dummyX = vec.fit_transform(featureList).toarray()print("dummyX:"+str(dummyX))print(vec.get_feature_names())#名字的对应关系#'age=middle_aged', 'age=senior', 'age=young', #'credit_rating=excellent', 'credit_rating=fair',#'income=high','income=low', 'income=medium',#'student=no', 'student=yes'#单独转结论的数据结构lb = preprocessing.LabelBinarizer()dummyY = lb.fit_transform(labelList)#print("dummyY:"+str(dummY))######################################entropy =>ID3#树形分类用很多种方法,我们用的是熵来判断,在代码里就是参数的不同clf = tree.DecisionTreeClassifier(criterion = 'entropy') clf = clf.fit(dummyX,dummyY)#print('clf:'+str(clf))#将决策树描述在了.dot上with open("resultTree.dot",'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 = oneRowXnewRowX[0] = 0 newRowX[1] = 1 #老年人 age=senior newRowX[2] = 0newRowX[3] = 1 #信用好 credit_rating=excellent newRowX[4] = 0newRowX[5] = 0newRowX[6] = 0newRowX[7] = 1 #收入中等newRowX[8] = 1 #不是学生newRowX[9] = 0print("newRowX"+str(newRowX))newRowX = newRowX.reshape(1, -1) #it contains a single sample.predictedY = clf.predict(newRowX)print("predictedY: "+ str(predictedY))
csv里的数据如图:
以上便是csv的数据,我先是在excel里打的,在把后缀改成csv,在读取的时候一直有问题,怎么都不行,后来我用txt写了一遍再改后缀,就可以了。
生成.dot文件之后,打开一开和想象的树状图差别很大,视频里介绍了怎么用graphviz来将dot转成pdf的树状图的方法,先在官网上下载,点击msi
之后双击安装即可,需要记住安装路径,将下图所示的.bin路径添加到环境变量path里。
好了之后即可在cmd里验证:输入dot -version
即可
之后就是一个转换的代码输入:
dot -Tpdf src.dot -o des.pdf
src.dot表示的是带路径的.dot文件
des.pdf表示的是生成的.pdf文件,最好也带个路径
如我的,在cmd里直接输入:
dot -Tpdf D:\MLearning\Decisiontree\resultTree.dot -o D:\MLearning\Decisiontree\test.pdf
csv数据下载连接:
csv数据
- 机器学习第一个算法决策树(DecisionTree)
- 【机器学习实战】第3章 决策树(DecisionTree)
- 机器学习框架xr-learn: decisionTree(决策树)
- 决策树算法(DecisionTree)
- 机器学习算法---决策树
- 机器学习算法-决策树
- 机器学习算法-决策树
- 机器学习--决策树算法
- 机器学习-算法--决策树
- 机器学习-决策树算法
- 机器学习:决策树算法
- 机器学习算法-决策树
- 机器学习算法---决策树
- 机器学习---决策树算法
- 机器学习算法---决策树
- SparkMLlib Java 决策树分类算法(DecisionTree)
- 机器学习算法(二):决策树算法
- 机器学习算法(3:决策树算法)
- MYSQL使用通配符[charlist]的方法
- NFS原理详解
- 用if else 完成成绩的分布, while完成循坏。
- Java语言学习(三) 面向对象初步(1)
- 插入排序,选择排序和快速排序
- 机器学习第一个算法决策树(DecisionTree)
- Unity Shader 学习笔记(28) 噪声纹理、消融效果、水波效果、噪声雾效
- “自顶而下,逐步求精” 应用体会
- 根据两个数组元素个数一样,元素一样,那么两个数组一样,写一个实现。
- Angular 2-模板
- 线程读书笔记
- LBP简介(附opencv代码)
- T
- java新特性—枚举