python_sklearn机器学习算法系列之Decision_tree(决策树算法)-DecisionTreeClassifier

原创 2018年04月15日 19:38:17

       本文主要目的是通过及其简单的小程序来快速学习python 中sklearn的DecisionTreeClassifier这一函数的基本操作和使用,注意不是用python纯粹从头到尾自己构建DecisionTreeClassifier,既然sklearn提供了现成的我们直接拿来用就可以了,当然其原理十分重要,这里仅给出最核心部分:

1)树以代表训练样本的单个结点开始。

2)如果样本都在同一个类.则该结点成为树叶,并用该类标记。

3)否则,算法选择最有分类能力的属性作为决策树的当前结点.

4)根据当前决策结点属性取值的不同,将训练样本数据集tlI分为若干子集,每个取值形成一个分枝,有几个取值形成几个分枝。匀针对上一步得到的一个子集,重复进行先前步骤,递4'I形成每个划分样本上的决策树。一旦一个属性出现在一个结点上,就不必在该结点的任何后代考虑它。

5)递归划分步骤仅当下列条件之一成立时停止:

①给定结点的所有样本属于同一类。

②没有剩余属性可以用来进一步划分样本.在这种情况下.使用多数表决,将给定的结点转换成树叶,并以样本中元组个数最多的类别作为类别标记,同时也可以存放该结点样木的类别分布,

③如果某一分支没有样本,则以样本的多数类创建一个树叶

详细的实现该算法的原代码读者可以自己百度看,还是那句话本文不是介绍怎么实现而是怎样使用

代码一:主要介绍树算法的基本操作

源数据为:(第一列为身高,第二列为体重,数据不具有真实性,仅供学习使用)

1.5 50 thin  
1.5 60 fat  
1.6 40 thin  
1.6 60 fat  
1.7 60 thin  
1.7 80 fat  
1.8 60 thin  
1.8 90 fat  
1.9 70 thin  
1.9 80 fat

代码:

import numpy as np  
import scipy as sp  
from sklearn import tree  
from sklearn.metrics import precision_recall_curve  
#决策树的基本操作
from sklearn.metrics import classification_report  
from sklearn.model_selection import train_test_split
#数据读入 
data   = []  
labels = []  
with open("source _data.txt") as ifile:  
        for line in ifile:  
            tokens = line.strip().split(' ')  
            data.append([float(tk) for tk in tokens[:-1]])  
            labels.append(tokens[-1])  
x = np.array(data)  
labels = np.array(labels)  
y = np.zeros(labels.shape)  
  
  
#标签转换为0/1   
y[labels=='fat']=1  
  
# 拆分训练数据与测试数据   
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.4)  
  
# 核心代码:使用信息熵作为划分标准,对决策树进行训练 
clf = tree.DecisionTreeClassifier(criterion='entropy')   
clf.fit(x_train, y_train)

#系数反映每个特征的影响力。越大表示该特征在分类中起到的作用越大
print(clf.feature_importances_)


#将学习树结构导出到tree.dot文件
with open("tree.dot", 'w') as f:
    f = tree.export_graphviz(clf, out_file=f)


#预测结果
answer = clf.predict(x_train)
answer_proba = clf.predict_proba(x_train)#计算属于每个类的概率
print(answer)
print(answer_proba)

#sklearn中的classification_report函数用于显示主要分类指标的文本报告
#具体见https://blog.csdn.net/akadiao/article/details/78788864
answer = clf.predict(x) 
print(classification_report(y, answer, target_names = ['thin', 'fat']))

运行结果:


precision、recall、f1-score分别是每种类别的准确率、召回率、准确率和召回率调和平均数(下同) 

代码二:

         本次用到的源数据是datasets.load_iris(),iris数据集是一个字典,可以看成150行5列的二维表。150个样本,每个样本包含了花萼长度、花萼宽度、花瓣长度、花瓣宽度四个特征(前4列)iris的每个样本都包含了品种信息,即目标属性(第5列,也叫target或label),其中有5个key键,data记录每个样本四个特征数值,target记录品种数(用0,1,2表示),target_names是具体品种名称,feature_names是具体的特征名称。

#利用iris数据源来预测所属花的种类
from sklearn import datasets
import os
import numpy as np  
import scipy as sp  
from sklearn import tree  
from sklearn.metrics import precision_recall_curve  
from sklearn.metrics import classification_report  
from sklearn.model_selection import train_test_split

iris=datasets.load_iris()
x=np.array(iris.data)
y=np.array(iris.target)
  
# 拆分训练数据与测试数据,test_size代表学习样本占的比例,越大学习的结果越准确
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.8)  
  
# 核心代码:使用信息熵作为划分标准,对决策树进行训练 
clf = tree.DecisionTreeClassifier(criterion='entropy')   
clf.fit(x_train, y_train)

#系数反映每个特征的影响力。越大表示该特征在分类中起到的作用越大
print(clf.feature_importances_)

#预测
answer = clf.predict(x_train)
print(answer)

#sklearn中的classification_report函数用于显示主要分类指标的文本报告
#具体见https://blog.csdn.net/akadiao/article/details/78788864
answer = clf.predict(x) 
print(classification_report(y, answer, target_names = ['V','C','D']))

运行结果为:


更多算法可以参看博主其他文章,或者github:https://github.com/Mryangkaitong/python-Machine-learning

python_sklearn机器学习算法系列之K-Means(硬聚类算法)

          本文主要目的是通过一段及其简单的小程序来快速学习python 中sklearn的K-Means这一函数的基本操作和使用,注意不是用python纯粹从头到尾自己构建K-Means,既...
  • weixin_42001089
  • weixin_42001089
  • 2018-04-15 19:14:28
  • 25

Decision Tree 决策树 - ID3, C45, C50, CART...

是什么 决策树是最简单的也是最具解释性和表达性的一种机器学习算法,既可以处理分类问题(ID3,C45,C50),也可以处理回归问题(CART)。 它是根据特征(feature)的值逐步把数据分类,直到...
  • sandyzhs
  • sandyzhs
  • 2015-07-09 17:47:24
  • 7893

决策树算法

  • 2017年11月21日 19:26
  • 382KB
  • 下载

机器学习算法第一篇:决策树学习(一)

本篇是我学习决策树的一个入门,主要介绍最经典的决策树算法  ID3 决策树是由昆兰提出的一种作为分类的算法;它的特点主要是形象,简单易懂,不需要较多的专业领域知识;缺点则是根据不同算法各有不同;本篇先...
  • datarunner
  • datarunner
  • 2016-01-17 13:39:01
  • 917

机器学习知识点(七)决策树学习算法Java实现

为理解机器学习第四章节决策树学习算法,通过网上找到的一份现成代码,主要实现了最优划分属性选择和决策树构造,其中最优划分属性选择采用信息增益准则,代码如下: package sk.ml; import...
  • fjssharpsword
  • fjssharpsword
  • 2017-02-04 11:21:31
  • 2686

DecisionTree决策树算法及参数详解+实例+graphviz生成决策树

DecisionTree决策树算法及参数详解+实例+graphviz生成决策树 sklearn随机森林 sklearn集合算法库 sklearn-Bagging自助聚合算法 sklearn-Boost...
  • qq_41577045
  • qq_41577045
  • 2018-04-07 20:36:59
  • 23

python_sklearn机器学习算法系列之LinearRegression线性回归

        本文主要是通过程序来学习python 中sklearn的LinearRegression线性回归这一函数的基本操作和使用,注意不是用python纯粹从头到尾自己构建线性回归,既然skl...
  • weixin_42001089
  • weixin_42001089
  • 2018-04-15 17:00:34
  • 10

几个常用机器学习算法 - 决策树算法

几个常用机器学习算法 - 决策树算法本篇博客涉及到的信息论概念 - 熵和信息增益 - 可以参考这里。1决策树算法(Decision Tree)是从训练数据集中归纳出一组分类规则的过程。 实际操作中,...
  • xg123321123
  • xg123321123
  • 2016-10-25 18:03:33
  • 2182

scikit-learn学习之决策树算法

决策树是一个预测模型;他代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值。...
  • Gamer_gyt
  • Gamer_gyt
  • 2016-04-23 20:44:38
  • 13823

机器学习经典算法详解及Python实现–决策树(Decision Tree)

决策树是通过一系列规则对数据进行分类的过程。它提供一种在什么条件下会得到什么值的类似规则的方法。决策树分为分类树和回归树两种,分类树对离散变量做决策树,回归树对连续变量做决策树。 近来的调查表明...
  • u011089523
  • u011089523
  • 2016-06-24 09:14:34
  • 2701
收藏助手
不良信息举报
您举报文章:python_sklearn机器学习算法系列之Decision_tree(决策树算法)-DecisionTreeClassifier
举报原因:
原因补充:

(最多只允许输入30个字)