[Python] 决策树

《机器学习实战》第三章 决策树

-------------------------------------

#1 trees.py  计算给定数据集的香农熵

-------------------------------------

 1 from math import log
 2
 3 # 计算给定数据集的香农熵
 4 def calcShannonEnt(dataSet):
 5     numEnres = len(dataSet)
 6     labelCoounts = {}
 7     for featVec in dataSet:
 8         #为所有可能分类创建字典
 9         currentLabel = featVec[-1]
10         if currentLabel not in labelCoounts.keys():
11             labelCoounts[currentLabel] = 0
12         labelCoounts[currentLabel] += 1
13     shannonEnt = 0.0
14     for key in labelCoounts:
15         prob = float(labelCoounts[key]) / numEnres
16         shannonEnt -= prob * log(prob, 2)               #以2为底求对数
17     return shannonEnt
18
19 #用来 得到简单鱼类鉴定数据集
20 def createDataSet():
21     dataSet = [[1, 1, ‘yes‘],
22                [1, 1, ‘yes‘],
23                [1, 0, ‘no‘],
24                [0, 1, ‘no‘],
25                [0, 1, ‘no‘]]
26     labels = [‘no surfacing‘, ‘flippers‘]
27     return dataSet, labels

-------------------------------------

#2 trees.py  划分数据集 待划分的数据集、划分数据集的待征、需要返回的特征的值

-------------------------------------

1 # 划分数据集   待划分的数据集、划分数据集的待征、需要返回的特征的值
2 def splitDataSet(dataSet, axis, value):
3     retDataSet = []
4     for featVec in dataSet:
5         if featVec[axis] == value:
6             reducedFeatVec = featVec[:axis]
7             reducedFeatVec.extend(featVec[axis + 1:])
8             retDataSet.append(reducedFeatVec)
9     return retDataSet

-------------------------------------

#3 trees.py  选择最好的数据集划分方式

-------------------------------------

 1 # 划分数据集   待划分的数据集、划分数据集的待征、需要返回的特征的值
 2 def splitDataSet(dataSet, axis, value):
 3     retDataSet = []
 4     for featVec in dataSet:
 5         if featVec[axis] == value:
 6             reducedFeatVec = featVec[:axis]
 7             reducedFeatVec.extend(featVec[axis + 1:])
 8             retDataSet.append(reducedFeatVec)
 9     return retDataSet
10
11
12 # 选择最好的数据集划分方式
13 def chooseBestFeatureToSplit(dataSet):
14     numFeatures = len(dataSet[0]) - 1
15     baseEntropy = calcShannonEnt(dataSet)
16     bestInfoGain = 0.0;
17     bestFeature = -1;
18     for i in range(numFeatures):
19         featList = [example[i] for example in dataSet]
20         uniqueVals = set(featList)
21         newEntropy = 0.0;
22
23         for value in uniqueVals:
24             subDataSet = splitDataSet(dataSet, i, value)
25             prob = len(subDataSet) / float(len(dataSet))
26             newEntropy += prob * calcShannonEnt(subDataSet)
27
28         infoGain = baseEntropy - newEntropy
29
30         if (infoGain > bestInfoGain):
31             bestInfoGain = infoGain
32             bestFeature = i
33
34     return bestFeature

-------------------------------------

#4 trees.py  创建树的函数代码   两个参数:数据集、标签列表

-------------------------------------

 1 import operator
 2
 3 # 创建树的函数代码 两个参数:数据集、标签列表
 4 def createTree(dataSet, labels):
 5     classList = [example[-1] for example in dataSet]
 6
 7     # 类别完全相同则停止继续划分
 8     if classList.count(classList[0]) == len(classList):
 9         return classList[0]
10
11     # 遍历完所有特征时返回出现次数最多的
12     if len(dataSet[0]) == 1:
13         return majorityCnt(classList)
14
15     bestFeat = chooseBestFeatureToSplit(dataSet)
16     bestFeatLabel = labels[bestFeat]
17     myTree = {bestFeatLabel: {}}
18     del (labels[bestFeat])
19
20     # 得到列表包含的所有属性值
21     featValues = [example[bestFeat] for example in dataSet]
22     uniqueVals = set(featValues)
23
24     # 遍历当前选择特征包含的所有属性值,在每个数据集划分上递归调用函数createTree()
25     for value in uniqueVals:
26         subLabels = labels[:]
27         myTree[bestFeatLabel][value] = createTree(splitDataSet(dataSet, bestFeat, value), subLabels)
28
29     return myTree

时间: 2024-10-06 12:20:13

[Python] 决策树的相关文章

Python——决策树实战:california房价预测

Python--决策树实战:california房价预测 编译环境:Anaconda.Jupyter Notebook 首先,导入模块: 1 import pandas as pd 2 import matplotlib.pyplot as plt 3 %matplotlib inline 接下来导入数据集: 1 from sklearn.datasets.california_housing import fetch_california_housing 2 housing = fetch_c

机器学习之路: python 决策树分类 预测泰坦尼克号乘客是否幸存

使用python3 学习了决策树分类器的api 涉及到 特征的提取,数据类型保留,分类类型抽取出来新的类型 需要网上下载数据集,我把他们下载到了本地, 可以到我的git下载代码和数据集: https://github.com/linyi0604/MachineLearning 1 import pandas as pd 2 from sklearn.cross_validation import train_test_split 3 from sklearn.feature_extraction

python 决策树建立 泰坦尼克号

### 泰坦尼克号海难生存人员预测 # 导入需要的库 import pandas as pd from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split from sklearn.model_selection import GridSearchCV from sklearn.model_selection import cross_val_predict

我的spark python 决策树实例

from numpy import array from pyspark.mllib.regression import LabeledPoint from pyspark.mllib.tree import DecisionTree, DecisionTreeModel from pyspark import SparkContext sc = SparkContext(appName="PythonDecisionTreeClassificationExample") data =

决策树ID3算法预测隐形眼睛类型--python实现

本节讲解如何预测患者需要佩戴的隐形眼镜类型. 1.使用决策树预测隐形眼镜类型的一般流程 (1)收集数据:提供的文本文件(数据来源于UCI数据库) (2)准备数据:解析tab键分隔的数据行 (3)分析数据:快速检查数据,确保正确地解析数据内容,使用createPlot()函数绘制最终的树形图 (4)训练算法:createTree()函数 (5)测试算法:编写测试函数验证决策树可以正确分类给定的数据实例 (6)使用算法:存储数的数据结构,以使下次使用时无需重新构造树 trees.py如下: #!/u

【Machine Learn】决策树案例:基于python的商品购买能力预测系统

决策树在商品购买能力预测案例中的算法实现 作者:白宁超 2016年12月24日22:05:42 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结合视频学习和书籍基础的笔记所得.本系列文章将采用理论结合实践方式编写.首先介绍机器学习和深度学习的范畴,然后介绍关于训练集.测试集等介绍.接着分别介绍机器学习常用算法,分别是监督学习之分类(决策树.临近取样.支持向量机.神经网络算法)监督学习之回归(线性回归.非线性回归)非监督学习(

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

(一)认识决策树 1,决策树分类原理 近来的调查表明决策树也是最经常使用的数据挖掘算法,它的概念非常简单.决策树算法之所以如此流行,一个很重要的原因就是使用者基本上不用了解机器学习算法,也不用深究它是如何工作的.直观看上去,决策树分类器就像判断模块和终止块组成的流程图,终止块表示分类结果(也就是树的叶子).判断模块表示对一个特征取值的判断(该特征有几个值,判断模块就有几个分支). 如果不考虑效率等,那么样本所有特征的判断级联起来终会将某一个样本分到一个类终止块上.实际上,样本所有特征中有一些特征

用Python开始机器学习(2:决策树分类算法)

http://blog.csdn.net/lsldd/article/details/41223147 从这一章开始进入正式的算法学习. 首先我们学习经典而有效的分类算法:决策树分类算法. 1.决策树算法 决策树用树形结构对样本的属性进行分类,是最直观的分类算法,而且也可以用于回归.不过对于一些特殊的逻辑分类会有困难.典型的如异或(XOR)逻辑,决策树并不擅长解决此类问题. 决策树的构建不是唯一的,遗憾的是最优决策树的构建属于NP问题.因此如何构建一棵好的决策树是研究的重点. J. Ross Q

【机器学习算法-python实现】决策树-Decision tree(1) 信息熵划分数据集

(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景 决策书算法是一种逼近离散数值的分类算法,思路比較简单,并且准确率较高.国际权威的学术组织,数据挖掘国际会议ICDM (the IEEE International Conference on Data Mining)在2006年12月评选出了数据挖掘领域的十大经典算法中,C4.5算法排名第一.C4.5算法是机器学习算法中的一种分类决策树算法,其核心算法是ID3算法. 算法的主要思想就是将数据集依照特