机器学习-决策树(decisiontree)算法

YEN_csdn YEN_csdn     2022-12-15     786

关键词:

学习彭亮《深度学习基础介绍:机器学习》课程
[toc]

决策树概念

决策树是一种用于监督学习的层次模型,由此,局部区域通过少数几步递归分裂决定。
决策树是一个类似流程图的树结构:其中每个结点表示在一个属性上测试,每个分支代表一个属性输出,每个树叶结点代表类或类分布。树的最顶层是根节点。

信息熵entropy概念

一条信息的信息量大小和它的不确定性有直接的关系,要搞清楚一件非常非常不确定的事情,或者是我们一无所知的事情,需要了解大量信息 => 信息量的度量就等于不确定性的多少

比特(bit)来衡量信息的多少
-[P1*log2(P1)+P2*log2(P2)+…+Pn*log2(Pn)] (其中Pi:i发生的概率)
变量的不确定性越大,熵也就越大

决策树算法

  • 分类与回归树(classification and regression,CART)算法
  • ID3算法
  • C4.5算法(ID3算法的扩展)

相同点:都是贪心算法,自上而下
区别:信息度量方法不一样: C4.5 (gain ratio), CART(gini index), ID3 (Information Gain)

决策树归纳算法实例 (ID3)

选择属性判断结点:信息获取量(Information Gain):Gain(A) = Info(D) - Infor_A(D),通过A来作为节点分类获取了多少信息

假设以年龄(youth)来分

14个人中年轻人(youth)有5个: P1=5/14 ,在5个人中yes有两个,no有三个

在没有用年龄区分是信息熵为0.940bit,用年龄区分信息熵为0.694bit,所以以年轻人来分信息获取量为:

同理:
根据收入信息获取量:Gain(income)=0.029
根据学生信息获取量:Gain(student)=0.151
根据信用信息获取量:Gain(Credit_rating)=0.048

所以以age信息获取量最大,取它做为第一个节点,

下一步在选取新的属性来做为新结点,同样计算谁能带来最大的信息获取量。重复进行。

注:连续型要离散化处理。

剪枝

  • 先剪枝
  • 后剪枝,实践中比先剪枝效果好。
    在后剪枝中,我们让树完全增长至所有树叶都是纯的并具有零训练误差。然后,我们找出导致过分拟合的子树并剪掉它。

决策树优缺点

  • 优点:直观;便于理解;小规模数据集有效
  • 缺点:处理连续变量不好;类别较多时,增加的比较快;可规模性一般

决策树归纳算法实例代码 (Python)

Python机器学习的库:scikit-learn
覆盖问题领域:分类(classification), 回归(regression), 聚类(clustering), 降维(dimensionality reduction),模型选择(model selection), 预处理(preprocessing)

代码

#coding=utf-8
# @Author: yangenneng
# @Time: 2018-01-09 16:17
# @Abstract:Decision_Tree.py   决策树应用

# DictVectorizer: 读取原始数据
import csv
# 导入机器学习包

# DictVectorizer: 将dict类型的list数据,转换成numpy array
from sklearn.feature_extraction import DictVectorizer
from sklearn import tree
from sklearn import preprocessing
from sklearn.externals.six import StringIO

# 主程序

#读取使用的数据文件
allElectroncsData=open(r'D:\\Python\\PyCharm-WorkSpace\\MachineLearningDemo\\Decision_Tree\\data\\buyComputer.csv','rb')
#csv中按行读取函数reader()
reader=csv.reader(allElectroncsData)
headers=reader.next() #读取第一行标题

# print (headers)

featureList=[]  # 装取特征值
lableList=[]    # 装取类别 buy:yes|no

#逐行读取
for row in reader:
    lableList.append(row[len(row)-1]) #每行最后一列的值加入lableList
    rowDict= #字典 key为对并的属性名:eg:age  value为属性值:eg:youth
    for i in range(1,len(row)-1):
        rowDict[headers[i]]=row[i]

    featureList.append(rowDict)

# print featureList

#使用python提供的DictVectorizer()进行转化我们需要的特征值dummyx格式
vec=DictVectorizer()
dummyx=vec.fit_transform(featureList).toarray()

# print ("dummyx:"+str(dummyx))
# print (vec.get_feature_names())

# print ("lableList:",str(lableList))

#使用python提供的DictVectorizer()进行转化我们需要的分类dummyy格式
lb=preprocessing.LabelBinarizer()
dummyy=lb.fit_transform(lableList)

# print ("dummyy:"+str(dummyy))

# using decision tree for classfication

# 使用ID3算法,即用Information Gain来分类
clf=tree.DecisionTreeClassifier(criterion='entropy')
# 建模   参数:特征值矩阵 分类列矩阵
clf=clf.fit(dummyx,dummyy)

# print ("clf",str(clf))

# 产生dot文件
with open("allElectroncInfomationGainori.dot",'w') as f:
    # 原始的数据变为0 1了,再画决策树时要还原之前定义的feature,即feature_names=vec.get_feature_names()
    f=tree.export_graphviz(clf,feature_names=vec.get_feature_names(),out_file=f)
# 取第一行
oneRowX=dummyx[0,:]
print ("oneRowX:"+str(oneRowX))

#预测新数据
newRowx=oneRowX
newRowx[0]=1
newRowx[2]=0

print ("newRowx:"+str(newRowx))

predictedY=clf.predict(newRowx)
print  ("predictedY:"+str(predictedY))






数据

需把每一行进行转化为以下格式:

print featureList

print ("dummyx:"+str(dummyx))
print (vec.get_feature_names())
print ("lableList:",str(lableList))

print ("dummyy:"+str(dummyy))

print ("clf",str(clf))

print ("oneRowX:"+str(oneRowX))

得到的allElectroncInfomationGainori.dot

#预测新数据
newRowx=oneRowX
newRowx[0]=1
newRowx[2]=0

print ("newRowx:"+str(newRowx))

predictedY=clf.predict(newRowx)
print  ("predictedY:"+str(predictedY))

使用graphviz转为PDF决策树

安装graphviz:https://graphviz.gitlab.io
配置环境变量,转化dot文件至pdf可视化决策树:dot -Tpdf 文件名.dot -o 文件名.pdf


机器学习-决策树(decisiontree)算法

学习彭亮《深度学习基础介绍:机器学习》课程[toc]决策树概念决策树是一种用于监督学习的层次模型,由此,局部区域通过少数几步递归分裂决定。决策树是一个类似流程图的树结构:其中每个结点表示在一个... 查看详情

机器学习sklearn监督学习分类算法决策树decisiontree(代码片段)

#导入鸢尾花数据集、决策树分类器、计算交叉验证值的函数cross_val_scorefromsklearn.datasetsimportload_irisfromsklearn.treeimportDecisionTreeClassifierfromsklearn.model_selectionimportcross_val_score#使用默认参数,创建一颗基于基尼系数的决策树&# 查看详情

机器学习实战之第三章决策树(decisiontree)

...st/MathJax.js?config=default"></script>决策树概述决策树(DecisionTree)算法主要用来处理分类问题,是最经常使用的数据挖掘算法之一。决策树场景一个叫做"二十个问题"的游戏,游戏的 查看详情

机器学习:决策树(decisiontree)--id3算法(代码片段)

决策树的主要算法构建决策树的关键:按照什么样的次序来选择变量(属性/特征)作为分类依据。根据不同的目标函数,建立决策树主要有以下三种算法ID3(J.RossQuinlan-1975)核心:信息熵,信息增益C4.5——ID... 查看详情

机器学习sklearn监督学习分类算法决策树decisiontree(代码片段)

...数cross_val_scorefromsklearn.datasetsimportload_irisfromsklearn.treeimportDecisionTreeClassifierfromsklearn.model_selectionimportcross_val_score#使用默认参数,创建一颗基于基尼系数的决策树,并将该决策树分类器赋值给变量clfclf=DecisionTreeClassifier()i... 查看详情

机器学习方法:决策树decisiontree原理与实现技巧

欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld。技术交流QQ群:433250724,欢迎对算法、技术、应用感兴趣的同学加入。前面三篇写了线性回归,lasso,和LARS的一些内容,这篇写一下决策树... 查看详情

机器学习入门-1.介绍与决策树(decisiontree)

机器学习(MachineLearning)介绍与决策树(DecisionTree)机器学习入门系列是个人学习过程中的一些记录与心得。其主要以要点形式呈现,简洁明了。1.什么是机器学习?一个比较概括的理解是:根据现有的数据,预测未来2.核心思想:Genera... 查看详情

机器学习--决策树分类算法及应用

1.决策树分类算法原理1.1概述决策树(decisiontree)——是一种被广泛使用的分类算法。相比贝叶斯算法,决策树的优势在于构造过程不需要任何领域知识或参数设置在实际应用中,对于探测式的知识发现,决策树更加适用1.2算法... 查看详情

机器学习入门之决策树算法

1、什么是决策树(DecisionTree)       决策树是一个类似于流程图的树结构,其中每一个树节点表示一个属性上的测试,每一个分支代表一个属性的输出,每一个树叶节点代表一个类或者类的分布,树的... 查看详情

机器学习——决策树(下)算法实现

Decisiontree在机器学习(5)——决策树(上)原理中介绍了决策树的生成和剪枝原理。介绍了CART,ID3,C4.5等算法的算法流程,其中CART算法可以实现回归和分类,是基于基尼不纯度实现的,这里并未实... 查看详情

machinelearning01_decisiontree(决策树)

分类树(决策树)是一种十分常用的分类方法。他是一种监管学习,所谓监管学习就是给定一堆样本,每个样本都有一组属性和一个类别,这些类别是事先确定的,那么通过学习得到一个分类器,这个分类器能够对新出现的对象... 查看详情

机器学习--决策树

决策树(DecisionTree)决策树是监督学习(supervisedlearning)的一种。机器学习中分类和预测算法的评估:1.准确率2.速度3.强壮型4.可规模性5.可解释性什么是决策树?决策树是一个类似于流程图的树结构:其中,每个内部节点表示在一... 查看详情

机器学习——决策树(上)原理

Decisiontree决策树是机器学习中一种基本的分类和回归算法,是依托于策略抉择而建立起来的树。其主要优点是模型具有可读性,分类速度快,易于理解。决策树的思想主要来源于Quinlan在1986年提出的ID3算法和1993年提出... 查看详情

机器学习决策树

决策树(DecisionTree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。由于这种决策分支画成图... 查看详情

机器学习——决策树

决策树一、了解决策树  决策树(DecisionTree)是一类常见的机器学习算法,属于非参数的监督学习方法,主要用于分类和回归,也可以用于特征提取。  决策树就是一棵树(很像流程图),其内包含一个... 查看详情

决策树(decisiontree)吧啦吧啦

#小魔仙?#参考:美BrettLantz的《机器学习与R语言》,周志华老师的《机器学习》#仅供个人学习用#比较长和啰嗦,提醒自己:最好使用电脑看,手机看长篇大论总是不太合适? 这两天学R与机器学习,真心赶脚R太简单化了,转... 查看详情

机器学习实战基础(二十八):决策树概述(代码片段)

概述决策树是如何工作的 决策树(DecisionTree)是一种非参数的有监督学习方法,它能够从一系列有特征和标签的数据中总结出决策规则,并用树状图的结构来呈现这些规则,以解决分类和回归问题。决策树算法容易理解,适... 查看详情

361机器学习常见算法

...程(一):K-近邻算法(史诗级干货长文)决策树算法(DecisionTree)参考:机器学习实战教程(二):决策树基础篇之让我们从相亲说起参考:机器学习实战教程(三):决策树实战篇之为自己配个隐形眼镜朴素贝叶斯算法(Naiv... 查看详情