分类:具有明确的类别

        如:去银行借钱,会有借或者不借的两种类别

回归:不具有明确的类别和数值

        如:去银行借钱,预测银行会借给我多少钱,如:1~100000之间的一个数值

不纯度:

        为了要将表格转化为一棵树,决策树需要找出最佳节点和最佳的分枝方法,对分类树来说,衡量这个 “ 最佳 ” 的指标 叫做“ 不纯度 ” 。通常来说,不纯度越低,决策树对训练集的拟合越好。

        ·不纯度基于节点来计算,树中的每个节点都会有一个不纯度,并且子节点的不纯度一定是低于父节点的,也就是 说,在同一棵决策树上,叶子节点的不纯度一定是最低的。

不存度的概念  

        决策树的每个叶子节点中都会包含一组数据,在这组数据中,如果有某一类标签占有较大的比例,我们就说叶子 节点“ 纯 ” ,分枝分得好。某一类标签占的比例越大,叶子就越纯,不纯度就越低,分枝就越好。
       如果没有哪一类标签的比例很大,各类标签都相对平均,则说叶子节点 ” 不纯 “ ,分枝不好,不纯度高。      

过拟合

模型在训练集上表现很好,在测试集上表现很糟糕,学习能力很强但是学得太过精细了

欠拟合

模型在训练集和测试集上都表现糟糕,学习能力不足

机器学习的例子:

y=kx+b

先通过已知:x和y,求出:k和b

再通过y=kx+b(k已知,b已知)和x的测试集

求出y预测=k已知*x测试+b已知

y的预测值和y的测试值相比较,需要使y的预测与y的测试尽量的接近

from sklearn import tree #从sklearn 包里面导入tree类
clf = tree.DecisionTreeClassifier() #实例化一个决策树分类器
clf =clf.fit(X_train,y_train) #用训练集数据训练模型
result=clf.score(X_test,y_test)#导入测试集,从接口中调用需要的信息

建立一棵树

#导入需要的算法库和模块
from sklearn import tree
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split#搜索数据

红酒数据集 

#红酒数据集
#导入需要的算法库和模块
from sklearn import tree
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
wine = load_wine() #加载并返回葡萄酒数据集(分类)。
wine.data.shape #看一下这个表格是怎么样的
#输出(178, 13),代表存在178行,13列
wine.target #查看表格中有几个标签
# array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
#        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
#        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
#        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
#        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
#        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
#        2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
#        2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
#        2, 2])
#即数据集中的标签有三种,0,1和2,也就是这些红酒被分成了三类。#如果wine是一张表,应该长这样
# import pandas as pd
# pd.concat([pd.DataFrame(wine.data),pd.DataFrame(
#     .wine.target)],axis=1)
#这里是将红酒属性数据集和标签列进行了横向链接(也叫合并,学过数据库的都知道)# wine.feature_names
#查看红酒的属性名字
# wine.target_names
#查看标签名字,也就是分类的名字Xtrain,Xtest,Ytrain,Ytest=train_test_split(wine.data,wine.target,test_size=0.3)
#将数据集分为训练集和测试集,其中70%为训练集,30%为测试集。
Xtrain.shape
#训练集有124个样本,13个属性
Xtest.shape
#训练集有54个样本,13个属性
Ytrain
#查看训练集的目标属性;有三种,为0,1,2#建立模型
clf = tree.DecisionTreeClassifier(criterion="entropy") #建立决策分类树,判断不纯度的方法是信息熵
clf = clf.fit(Xtrain,Ytrain) #用训练集数据训练模型
score = clf.score(Xtest,Ytest) #返回预测的准确accuracy(分数)
score#查看预测的模型分数#画出这棵树
feature_name = ['酒精','苹果酸','灰','灰的碱性','镁','总酚','类黄酮','非黄烷类酚类','花青素','颜 色强度','色调','od280/od315稀释葡萄酒','脯氨酸']
import graphviz
dot_data = tree.export_graphviz(clf,out_file = None,feature_names= feature_name,class_names=["琴酒","雪莉","贝尔摩德"],filled=True,rounded=True)
#以 DOT 格式导出决策树。# decision_tree:决策树分类器;要导出到 GraphViz 的决策树。# out_file:对象或字符串,默认=无;输出文件的句柄或名称。如果 None ,则结果以字符串形式返回。# feature_names:str列表,默认=无;每个函数的名称。如果 None 将使用通用名称(“feature_0”、“feature_1”、...)。# class_names:str 或 bool 的列表,默认 = 无
# 每个目标类别的名称按数字升序排列。仅与分类相关,不支持multi-output。如果 True ,则显示类名的符号表示。# filled:布尔,默认=假
# 当设置为 True 时,绘制节点以指示分类的多数类、回归值的极值或 multi-output 的节点纯度。#rounded:布尔,默认=假;当设置为 True 时,绘制圆角节点框。
graph = graphviz.Source(dot_data) #获取生成的决策树
graph #打印生成的决策树#特征重要性
clf.feature_importances_
#打印每个属性的重要性的数值,只有数值,不知道数值对应的属性是什么
[*zip(feature_name,clf.feature_importances_)]
#打印每个属性及其对应的重要性的数值# 建更多的不同的树,然后从中取最好的。
# 在每次分枝时,不从使用全部特征,而是随 机选取一部分特征,从中选取不纯度相关指标最优的作为分枝用的节点。
clf = tree.DecisionTreeClassifier(criterion="entropy",random_state=30)
# random_state 用来设置分枝中的随机模式的参数,默认 None
#random_state是一个随机种子,是在任意带有随机性的类或函数里作为参数来控制随机模式。
#当random_state取某一个值时,也就确定了一种规则。
# 在高维度时随机性会表现更明显,低维度的数据 (比如鸢尾花数据集),随机性几乎不会显现。
#固定random_state后,每次构建的模型是相同的、生成的数据集是相同的、每次的拆分结果也是相同的。clf = clf.fit(Xtrain, Ytrain)
score = clf.score(Xtest, Ytest) #返回预测的准确度
score
#这里的score会固定在0.925,不论你运行多少遍,它都不会变,因为每次都是选择的最优的树。#使用splitter来降低过拟合的可能性
clf = tree.DecisionTreeClassifier(criterion="entropy",random_state=30 ,splitter="random")
clf = clf.fit(Xtrain, Ytrain)
score = clf.score(Xtest, Ytest)
score #输出结果为0.944444
# splitter 也是用来控制决策树中的随机选项的,有两种输入值
# 输入 "best" :决策树在分枝时虽然随机,但是还是会 优先选择更重要的特征进行分枝(重要性可以通过属性feature_importances_ 查看)
# 输入 "random" :决策树在 分枝时会更加随机,树会因为含有更多的不必要信息而更深更大,并因这些不必要信息而降低对训练集的拟合。
# 这也是防止过拟合的一种方式。当你预测到你的模型会过拟合,用这两个参数来帮助你降低树建成之后过拟合的可能性。#画出图像
import graphviz
dot_data = tree.export_graphviz(clf,feature_names= feature_name,class_names=["琴酒","雪莉","贝尔摩德"],filled=True,rounded=True )
graph = graphviz.Source(dot_data)
graph#我们的树对训练集的拟合程度如何?
score_train = clf.score(Xtrain, Ytrain) #返回预测的准确分数
score_train  #查看预测的准确分数,此时结果为1.0 过拟合了#剪枝方法降低过拟合的可能性:
#(1)max_depth 限制树的最大深度
#(2)min_samples_split 限定,一个节点必须要包含至少 min_samples_split 个训练样本,这个节点才允许被分枝,否则分枝就不会发生。
#(3)min_samples_leaf 限定,一个节点在分枝后的每个子节点都必须包含至少 min_samples_leaf 个训练样本,否则分枝就不会发生
#     或者,分枝会朝着满足每个子节点都包含min_samples_leaf 个样本的方向去发生#通过限制条件进行剪枝,得到的决策树会更简洁,预测的准确分数也不错
clf=tree.DecisionTreeClassifier(criterion="entropy",random_state=30,splitter="random",max_depth=3,min_samples_leaf=5,min_samples_split=5)
clf = clf.fit(Xtrain, Ytrain)
dot_data = tree.export_graphviz(clf,feature_names= feature_name,class_names=["琴酒","雪莉","贝尔摩德"],filled=True,rounded=True)
graph = graphviz.Source(dot_data)
graph
score = clf.score(Xtest, Ytest)
score #0.9629629629629629# 超参数的学习曲线,是一条以超参数的取值为横坐标,模型的度量指标为纵坐标的曲线,它是用来衡量不同超参数取值下模型的表现的线。
# 在我们建好的决策树里,我们的模型度量指标就是score 。
import matplotlib.pyplot as plt #导入画图库
test = [] #创建一个列表
for i in range(10): #循环10次clf = tree.DecisionTreeClassifier(max_depth=i+1,criterion="entropy",random_state=30,splitter="random")clf = clf.fit(Xtrain, Ytrain) #训练模型score = clf.score(Xtest, Ytest) #预测的准确分数test.append(score) #往列表里面添加预测的分数值
plt.plot(range(1,11),test,color="red",label="max_depth") #画图
#横坐标为max_depth取值,纵坐标为score,图线颜色为red,label为图例的名称
#从图中我们可以看到,当max_depth取3的时候,模型得分最高
plt.legend() #给图像加图例
plt.show() #显示所打开的图形

机器学习:分类、回归、决策树相关推荐

  1. 机器学习-分类之决策树原理及实战

    决策树 简介 决策树是一个非参数的监督学习方法,又称为判定树,是运用于分类的一种树结构,其中的每个内部节点代表对某一属性的一次测试,每条边代表一个测试结果,叶子节点代表某个类或者类的分布. 简单决策树 ...

  2. Python机器学习--分类\回归--决策树算法

    决策树算法类型 决策树是一系列算法,而不是一个算法. 决策树包含了 ID3分类算法,C4.5分类算法,Cart分类树算法,Cart回归树算法. 决策树既可以做分类算法,也可以做回归算法.因此决策树既可 ...

  3. spark机器学习-分类回归总结

    1.spark支持的分类包括以下几个场景: a.二分类,顾名思义就是只分成A和B两类 b.多分类 分成A,B,C,D等多个分类 不支持多标签分类,所谓的多标签分类是指一个样本可以属于多个分类,也就是比 ...

  4. 机器学习-分类算法-决策树,随机森林10

    决策树: 决策树的思想来源非常朴素,程序设计中的条件分支机构就是if-then结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法. 信息和消除不确定性是相联系的 信息增益:当得知一个特征后, ...

  5. id3决策树 鸢尾花 python_机器学习之分类回归树(python实现CART)

    机器学习之分类回归树(python实现CART) 之前有文章介绍过决策树(ID3).简单回顾一下:ID3每次选取最佳特征来分割数据,这个最佳特征的判断原则是通过信息增益来实现的.按照某种特征切分数据后 ...

  6. 机器学习--sklearn之决策树(分类+回归)

    什么是决策树? 决策树算法实现分类问题可以被理解为不断地进行条件语句判断,最终实现分类,如下图: 进行判断的分支很像树的枝干,被分出来的类别像是枝干上的叶子,所以将这个图称为决策树.所以,用决策树算法 ...

  7. 机器学习之分类决策树与回归决策树—基于python实现

    大家好,我是带我去滑雪! 本期为大家介绍决策树算法,它一种基学习器,广泛应用于集成学习,用于大幅度提高模型的预测准确率.决策树在分区域时,会考虑特征向量对响应变量的影响,且每次仅使用一个分裂变量,这使 ...

  8. 【机器学习】分类决策树与回归决策树案例

    一.回顾 什么是决策树,信息熵 构建决策树的过程 ID3.C4.5和CRAT算法 上面三篇,主要介绍了相关的理论知识,其中构建决策树的过程可以很好地帮助我们理解决策树的分裂属性的选择. 本篇所有源代码 ...

  9. 机器学习系列之手把手教你实现一个分类回归树

    https://www.ibm.com/developerworks/cn/analytics/library/machine-learning-hands-on5-cart-tree/index.h ...

  10. 分类决策树 回归决策树_决策树分类器背后的数学

    分类决策树 回归决策树 决策树分类器背后的数学 (Maths behind Decision Tree Classifier) Before we see the python implementat ...

最新文章

  1. 秘鲁国家馆中国电商平台 美食周对话国际农民丰收节贸易会
  2. Flink状态管理与CheckPoint、Savepoint
  3. warning: control reaches end of non-void function
  4. javafx 打开新窗口_新的JMetro JavaFX 11兼容版本
  5. Java中HashMap的常用操作
  6. asp.net配置IIS过程错误解决
  7. Android项目实战(三十六):给背景加上阴影效果
  8. 清华成北京赛赢家,旷视唐文斌分享本质创业 | 联想高校AI精英挑战赛
  9. [七]JavaIO之 PipedInputStream 和 PipedInputStream
  10. Kali安装问题解决方案
  11. 服务链路追踪配置mysql_学习微服务的服务链路追踪——Spring Cloud Sleuth+zipkin
  12. 磁盘位置_ORACLE RAC ASM磁盘组迁移到新的ASM磁盘组方法
  13. 安装sql2012 正在启动操作系统功能NetFx3
  14. winform 打印快递电子面单_电子面单接口说明文档-(附C#源码)
  15. 框架设计--第十章 MyBatis与Spring的整合--习题答案
  16. 蓝桥杯试题——随意组合
  17. 美化我们的windows xp
  18. python 网页制作教程_python如何制作网页
  19. 二分法的复杂度O(log2n)是什么意思
  20. 怎么自测植物神经紊乱

热门文章

  1. 9款免费的跨浏览器测试工具
  2. lumia1520 越狱_如何设置Luma家庭Wi-Fi系统
  3. Ubuntu 16.04安装有道词典(完全版)
  4. 得益大陆改革开放 台企旺旺销售屡创佳绩
  5. matlab aac读,aacmatlab 该源码是在 平台上实现的,是音频编码的一种重要 AAC, 的压缩 238万源代码下载- www.pudn.com...
  6. 多文件批量压缩下载,单文件夹压缩下载
  7. vivoy27android版本,步步高vivo Y27 开启USB调试模式
  8. FileNotFoundError: [WinError 3]系统找不到指定的路径
  9. 永久白嫖,新发现的外卖漏洞,请低调使用
  10. 计算机教室英语手抄报,英语手抄报我的教室