机器学习——决策树基础

第1关:创建数据集

python 复制代码
def createDataSet():
    dataSet = [[1, 1, 'yes'],
               [1, 1, 'yes'],
               [1, 0, 'no'],
               [0, 1, 'no'],
               [0, 1, 'no']]
    labels = ['no surfacing','flippers']
    return dataSet, labels
####请在此处输入代码####
myDat, t = createDataSet()
#######################
print(myDat)

第2关:计算数据集的信息熵

python 复制代码
from math import log
import operator
def calcShannonEnt(dataSet):
    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) #log base 2
    return shannonEnt

第3关:数据集的划分

python 复制代码
def splitDataSet(dataSet, axis, value):
    retDataSet = []                                   #创建列表对象引用数据集,防止由于多次调用而改变元数据集。
    ####请在此处输入代码####
    for i in dataSet:
        if i[axis] == value:
            t = i[:axis]
            t.extend(i[axis + 1:])
            retDataSet.append(t)
    #######################
    return retDataSet

第4关:计算信息增益

python 复制代码
from ex03_lib import calcShannonEnt,splitDataSet

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]#create a list of all the examples of this feature
        uniqueVals = set(featList)           #创建唯一的分类标签列表。
        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                                 #返回最优划分的索引值。
相关推荐
深小乐1 分钟前
从 AI Skills 学实战技能(六):让 AI 帮你总结网页、PDF、视频
人工智能
宝贝儿好8 分钟前
【LLM】第二章:文本表示:词袋模型、小案例:基于文本的推荐系统(酒店推荐)
人工智能·python·深度学习·神经网络·自然语言处理·机器人·语音识别
周末程序猿26 分钟前
详解 karpathy 的 microgpt:实现一个浏览器运行的 gpt
人工智能·llm
ACP广源盛1392462567332 分钟前
破局 Type‑C 切换器痛点@ACP#GSV6155+LH3828/GSV2221+LH3828 黄金方案
c语言·开发语言·网络·人工智能·嵌入式硬件·计算机外设·电脑
xixixi7777740 分钟前
通信领域的“中国速度”:从5G-A到6G,从地面到星空
人工智能·5g·安全·ai·fpga开发·多模态
Dfreedom.1 小时前
计算机视觉全景图
人工智能·算法·计算机视觉·图像算法
EasyDSS1 小时前
智能会议管理系统/私有化视频会议平台EasyDSS私有化部署构建企业级私域视频全场景解决方案
人工智能·音视频
zhanghongbin012 小时前
成本追踪:AI API 成本计算与预算管理
人工智能
YBAdvanceFu2 小时前
从零构建智能体:深入理解 ReAct Plan Solve Reflection 三大经典范式
人工智能·python·机器学习·数据挖掘·多智能体·智能体
啦啦啦在冲冲冲2 小时前
多头注意力机制的优势是啥,遇到长文本的情况,可以从哪些情况优化呢
人工智能·深度学习