机器学习实战_初识决策树算法_理解其python代码(一)

简介: 机器学习实战_初识决策树算法_理解其python代码(一)

这是经过我修改后能在python3.0中完美运行的Tree决策树 project源码,可以直接拿来学习:
http://download.csdn.net/download/qq_36396104/10142842

(一)计算给定数据集的香农熵(个人理解为计算给定信息集纯度的一种数学计算指标):

from math import log
def calcShannonEnt(dataSet):#calculata shannonEnt
    numEntries = len(dataSet)
    labelCounts = {}
    for featVec in dataSet:#将当前键值加入字典并记录类别出现的次数
        currentLabel = featVec[-1]
        if currentLabel not in labelCounts.keys():
            labelCounts[currentLabel] = 0
        labelCounts[currentLabel] += 1
    shannonEnt = 0.0
    for key in labelCounts:#计算香农熵
        prob = float(labelCounts[key])/numEntries#使用所有类标签的发生频率计算类别出现的概率
        shannonEnt -= prob*log(prob,2)#得到香农熵
    return shannonEnt

测试代码:

def createDataSet():
    dataSet = [[1,1,'maybe'],
               [1, 1,'yes'],
               [1,0,'no'],
               [0,1,'no'],
               [0,1,'no']]
    labels = ['no surfacing','flippers']
    return dataSet,labels
#放在另一个py文件内的test:
import CreateDataSet
import trees
myDat,labels=CreateDataSet.createDataSet()
print(myDat)
print(trees.calcShannonEnt(myDat))

(二)划分数据集:

需要的python基础:也可看我整理出来的文章

列表解析(列表推导)

前期准备(人为划分,给定属性以及相应的值,作为后面函数的调用)

def splitDataSet(dataSet,axis,value):#将属性axis中满足值为value的数据划分出来

retDataSet = []#Python在函数中传递的是列表的引用,在函数内部对列表对象的修改将会影响该列表的整个生命周期。为了消除这个不良影响,需要在函数的开始声明一个新列表对象。

for featVec in dataSet:

if featVec[axis] == value:

reducedFeatVec = featVec[:axis]#通过以下两步可得到满足所给条件的除去属性(axis+1发挥的作用)axis的数据

reducedFeatVec.extend(featVec[axis+1:])

retDataSet.append(reducedFeatVec)

return retDataSet

测试代码:

import CreateDataSet

import trees

myDat,labels=CreateDataSet.createDataSet()

print(trees.splitDataSet(myDat,1,1))

正式划分:(利用信息增益得到所有属性中最适合划分的一个)

def chooseBestFeatureToSplit(dataSet):

numFeatures = len(dataSet[0]) - 1

baseEntropy = calcShannonEnt(dataSet)

bestInfoGain = 0.0;bestFeature=-1

for i in range(numFeatures):

featList = [example[i] for example in dataSet]#列表解析(推导),得到dataSet中的第i个属性的所有取值eg:(1,1,1,0,0)

uniqueVals = set (featList)#通过集合中元素唯一的特性,将得到的featList中的重复元素变唯一eg:(1,0)

newEntropy = 0.0

for value in uniqueVals:

subDataSet = splitDataSet(dataSet,i,value)

prob = len(subDataSet)/float(len(dataSet))

newEntropy += prob * calcShannonEnt(subDataSet)

infoGain = baseEntropy - newEntropy

if(infoGain > bestInfoGain):

bestInfoGain = infoGain

bestFeature = i

return bestFeature

test:

import CreateDataSet

import trees

myDat,labels=CreateDataSet.createDataSet()

print(trees.chooseBestFeatureToSplit(myDat))

“`

AIEarth是一个由众多领域内专家博主共同打造的学术平台,旨在建设一个拥抱智慧未来的学术殿堂!【平台地址:https://devpress.csdn.net/aiearth】 很高兴认识你!加入我们共同进步!

目录
相关文章
|
8月前
|
算法 搜索推荐 JavaScript
基于python智能推荐算法的全屋定制系统
本研究聚焦基于智能推荐算法的全屋定制平台网站设计,旨在解决消费者在个性化定制中面临的选择难题。通过整合Django、Vue、Python与MySQL等技术,构建集家装设计、材料推荐、家具搭配于一体的一站式智能服务平台,提升用户体验与行业数字化水平。
|
9月前
|
存储 算法 调度
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
431 26
|
9月前
|
机器学习/深度学习 编解码 算法
【机器人路径规划】基于迪杰斯特拉算法(Dijkstra)的机器人路径规划(Python代码实现)
【机器人路径规划】基于迪杰斯特拉算法(Dijkstra)的机器人路径规划(Python代码实现)
713 4
|
9月前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于D*算法的机器人路径规划(Python代码实现)
【机器人路径规划】基于D*算法的机器人路径规划(Python代码实现)
399 0
|
9月前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于改进型A*算法的机器人路径规划(Python代码实现)
【机器人路径规划】基于改进型A*算法的机器人路径规划(Python代码实现)
608 0
|
存储 缓存 NoSQL
实战|教你用Python玩转Redis
之前辰哥已经给大家教了Python如何去连接Mysql(实战|教你用Python玩转Mysql),并进行相应操作(插、查、改、删)。除了Mysql外,Python最常搭配的数据库还有Redis。 那么今天辰哥就来给大家讲解一下Python如何使用Redis,并进行相关的实战操作。
782 0
|
9月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
1530 102
|
9月前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
493 104
|
9月前
|
人工智能 自然语言处理 算法框架/工具
Python:现代编程的首选语言
Python:现代编程的首选语言
387 103
|
9月前
|
机器学习/深度学习 人工智能 数据挖掘
Python:现代编程的首选语言
Python:现代编程的首选语言
406 82