机器学习—决策树算法的python实现

  • 想要实现的效果
  • 先来看下结果
  • 程序原理
  • 数据
  • 完整代码(附有具体解析)

想要实现的效果

对于这个不好玩的决策树,我想要得到的就是通过决策树训练我的数据然后生成这棵决策树,再进行测试,把辣鸡数据输入得出最后的预测结果

先来看下结果

1.得到的辣鸡决策树
哇,调用graph模块竟然可直接生成如下的PDF图片诶

2.那随手在来张测试结果的截图吧

程序原理

这个什么鬼原理就是先将训练集的数据按age、spectacle-prescrip、astigmatism、tear-prod-rate、contact-lenses的分类提取特征数据,再转化为如下的numpy矩阵。其中age有三中数据故前三位数代表age,以此类推。接着两位数为astigmatism,再两位为spectacle-prescrip,再为ear-prod-rate,右边那3个就是代表contact-lenses。
这个总共有19行的数据蛮,就是代表有19组的数据(数据后面有的)

通过得到的上图就可以推断出各个数据所对应的代码,下图中把age下的三个数据代码写出来了,其他的蛮,emmmmm就留给你们了(假装不是因为我懒哈哈哈哈哈哈)

得到楼上辣个矩阵后直接调用python的决策树库函数构建决策树再生成一个决策树PDF就好了,哈哈

数据

以下这些乱七八糟的数据是隐形眼镜数据,属性特征为:
age:{young,pre-presbyopic,presbyopic};
年龄 {年轻的,老花眼前期,老花眼}
astigmatism:{no,yes}
散光 {否,是}
spectacle-prescrip:{myope,hypermetrope};
眼睛处方 {近视者,远视者}
tear-prod-rate {reduced, normal}
眼泪分泌率 {减少,正常}
contact-lenses {soft, hard, none}
隐形眼镜 {软性,硬性,不适合佩戴}
(我们最后就是要通过前面几个属性来预测这个孩子适合什么样的眼镜)

1.那就先给你看下训练集数据吧

number,age,spectacle-prescrip,astigmatism,tear-prod-rate,contact-lenses
1,young,myope,no,reduced,none
2,young,myope,no,normal,soft
3,young,myope,yes,reduced,none
4,young,myope,yes,normal,hard
5,young,hypermetrope,no,reduced,none
6,young,hypermetrope,no,normal,soft
7,young,hypermetrope,yes,reduced,none
8,young,hypermetrope,yes,normal,hard
9,pre-presbyopic,myope,no,reduced,none
10,pre-presbyopic,myope,no,normal,soft
11,pre-presbyopic,myope,yes,reduced,none
12,pre-presbyopic,myope,yes,normal,hard
13,pre-presbyopic,hypermetrope,no,reduced,none
14,pre-presbyopic,hypermetrope,no,normal,soft
15,pre-presbyopic,hypermetrope,yes,reduced,none
16,pre-presbyopic,hypermetrope,yes,normal,none
17,presbyopic,myope,no,reduced,none
18,presbyopic,myope,no,normal,none
19,presbyopic,myope,yes,reduced,none

2.在来个测试数据

young,hypermetrope,yes,normal,hard
pre-presbyopic,hypermetrope,yes,reduced,none
pre-presbyopic,hypermetrope,yes,normal,none
presbyopic,hypermetrope,yes,reduced,none
presbyopic,hypermetrope,yes,normal,none

完整代码(附有具体解析)

# pyinstaller -F agfd.py
import os
import csv
import sys
import pydotplus
from sklearn.feature_extraction import DictVectorizer
from sklearn import preprocessing
from sklearn import tree#导入挖掘数据
film_data = open('film.csv','r')
reader = csv.reader(film_data)
headers = next(reader)#展示数据内容
file = open('film.txt', 'r')
for line in file:print(line,end="")
file.close()#定义特征值数组,结果数组
feature_list = []
result_list = []#按行循环
for row in reader:#取结果 将每行最后一个添加到数组中result_list.append(row[-1])#取特征值 即除去序号和结果的中间部分其余留下,压缩两个数组为字典,添加到特征数组中feature_list.append(dict(zip(headers[1:-1],row[1:-1])))# print(result_list)
# print(feature_list)#转化数据类型为numpy array
vec = DictVectorizer()#进行标准化处理数据
featue1 = vec.fit_transform(feature_list)
result1 = preprocessing.LabelBinarizer().fit_transform(result_list)# print(dummyX)
# print(dummyY)#调用决策树,传入信息熵类型
clf = tree.DecisionTreeClassifier(criterion='entropy',random_state=0)
#用fit方法传入训练集及结果集
clf = clf.fit(featue1,result1)
os.environ["PATH"] += os.pathsep + 'D:/Graphviz/bin/'#展示决策树
dot_data = tree.export_graphviz(clf,feature_names=vec.get_feature_names(),filled=True, rounded=True,special_characters=True,out_file=None)
from IPython.display import display, Image
graph = pydotplus.graph_from_dot_data(dot_data)
graph.write_pdf("film.pdf")#测试数据,展示分类结果
age = input("age: ")
dct = {'young': '0,0,1', 'pre-presbyopic': '1,0,0', 'presbyopic': '0,1,0'}
age1 = dct[age]
# print(age1)ast = input("astigmatism: ")
dct = {'no': '1,0', 'yes': '0,1'}
ast1 = dct[ast]
# print(ast1)spe = input("spectacle-prescrip: ")
dct = {'myope': '0,1', 'hypermetrope': '1,0'}
spe1 = dct[spe]
# print(spe1)tear = input("tear-prod-rate: ")
dct = {'reduce': '0,1', 'normal': '1,0'}
tear1 = dct[tear]
# print(tear1)print("A=([[%s,%s,%s,%s]])" % (age1, ast1, spe1, tear1))
input("请将A值填入程序中的对应位置,填完后请输入'1'确认:")A=([[0,0,1,0,1,1,0,1,0]])
predict_result = clf.predict(A)if sum((predict_result==[[0,0,1.]])[0])==3:predict_result = 'soft'print('预测结果:' + predict_result)if sum((predict_result==[[0,1,0.]])[0])==3:predict_result = 'none'print('预测结果:' + predict_result)if sum((predict_result==[[1,0,0.]])[0])==3:predict_result = 'hard'print('预测结果:' + predict_result)sys.exit()

机器学习—决策树构造算法的python实现相关推荐

  1. 机器学习-决策树之回归树python实战(预测泰坦尼克号幸存情况)(三)

    本文用通俗易懂的方式来讲解分类树中的回归树,并以"一维回归的图像绘制"和"泰坦尼克号幸存者预测"两个例子来说明该算法原理. 以下是本文大纲: 1 Decisio ...

  2. 机器学习-决策树分类算法与应用

    1. 决策树分类算法原理 1.1 概述 决策树(decision tree)--是一种被广泛使用的分类算法. 相比贝叶斯算法,决策树的优势在于构造过程不需要任何领域知识或参数设置 在实际应用中,对于探 ...

  3. python决策树剪枝_决策树剪枝算法的python实现方法详解

    python 决策树怎样修剪枝 剪枝是决策树停止分支的方法之一,剪枝有分预先剪枝和后剪枝两种.预先剪枝是在树的生长过程中设定一个指标,当达到该指标时就停止生长,这样做容易产生"爱已不在,却还 ...

  4. DNS通道检测 国内学术界研究情况——研究方法:基于特征或者流量,使用机器学习决策树分类算法居多...

    http://xuewen.cnki.net/DownloadArticle.aspx?filename=BMKJ201104017&dbtype=CJFD <浅析基于DNS协议的隐蔽通 ...

  5. 机器学习之kNN算法(纯python实现)

    前面文章分别简单介绍了线性回归,逻辑回归,贝叶斯分类,并且用python简单实现.这篇文章介绍更简单的 knn, k-近邻算法(kNN,k-NearestNeighbor). k-近邻算法(kNN,k ...

  6. 机器学习算法—决策树(ID3)算法

    机器学习--决策树(ID3)算法 1.决策树(ID3)算法 1.1 算法引入 我们首先以一个分类问题开始,假设我们有这样一份样本数据: 我们的目标是想通过色泽.根蒂.敲声.纹理.脐部.触感来判断这是不 ...

  7. 第四篇:决策树分类算法原理分析与代码实现

    前言 本文详细介绍机器学习分类算法中的决策树算法,并全面详解如何构造,表示,保存决策树,以及如何使用决策树进行分类等等问题. 为了全面的理解学习决策树,本文篇幅较长,请耐心阅读. 算法原理 每次依据不 ...

  8. id3决策树_信息熵、信息增益和决策树(ID3算法)

    决策树算法: 优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关的特征数据. 缺点:可能会产生过度匹配问题. 适用数据类型:数值型和标称型. 算法原理: 决策树是一个简单的为 ...

  9. 机器学习——K近邻算法(KNN)(K Nearest Neighbor)

    参考视频与文献: python与人工智能-KNN算法实现_哔哩哔哩_bilibili 机器学习--K近邻算法(KNN)及其python实现_清泉_流响的博客-CSDN博客_python实现knn 机器 ...

最新文章

  1. Linux下的内存对齐函数
  2. pandas使用tabulate函数将pandas dataframe以类似于plsql表格的方式打印出来(printing dataframe in tabular format)
  3. OpenGL ---渲染流水线之世界矩阵,相机变换矩阵,透视投影变换矩阵
  4. MySQL启动关闭添加到 /etc/init.d/mysqld
  5. 量子位MEET大会报名开启!各领域头部玩家集结,AI年度榜单揭晓,在这里预见智能科技新未来...
  6. 主机甲和主机乙之间已建立一个TCP连接,TCP最大段长为1000B。若主机甲的当前拥塞窗口为4000B,在主机甲向主机乙连续发送两个最大段后,成功收到主机乙发送的第一个段的确认段,确认段中通告的接收窗
  7. 从流量控制算法谈网络优化-TCP核心原理理解
  8. 退出页面删除cookie_Cookie 机制
  9. 什么样的外链才是高质量的外链|网站优化
  10. 学会这2招,不用设计师,一样能做出精美炫酷的可视化大屏模板
  11. 关于Windowsn 7因验证未通过被视为“非正版”出现“黑屏”的应急处理预案
  12. [MetalKit]7-Using-MetalKit-part-6使用MetalKit6
  13. 阿里云实践案例:使用ECS与OSS搭建个人云盘
  14. 茅台抢购特产平台(葫芦娃)
  15. 洛阳理工学院linux实验报告,谁来给我抄实验报告啊!这一张又一张写得。。。。...
  16. 时序建模:时间戳与时序特征衍生思路汇总
  17. Centos7超详细服务器上安装配置教程
  18. 带宽与码元的关系_数据速率、载波频率和带宽的关系
  19. 使用git管理文件版本(本地仓库)
  20. 元宇宙的新鲜度,终归离不开一个“玩”字

热门文章

  1. Android TextView 在strings 里面 实现换行
  2. android studio 去掉标题栏的简单方法
  3. 20172324 2018-2019-1《程序设计与数据结构》实验2报告
  4. 【傻瓜教程】CentOS 7 下 LNMP 环境搭建过程
  5. Ubuntu中的minicom
  6. Java 设计模式_代理模式(2016-08-19)
  7. 30岁前挣够500万
  8. pat 多项式A/B
  9. usaco Healthy Holsteins
  10. springboot 多线程_SpringBoot异步调用@Async