机器学习之决策树

决策树模型(Decision Tree) P1P_1P1​:表一种类别的数据占总数居的比例。P01−P1P0​1−P1​:表示除了P1P_1P1​类别以外的其他数据占总数据的比例。 阅读详情

目录

一.决策树的相关概念

1.什么是决策树

2.决策树的构造步骤

3.构造决策树的三种常用算法

4.信息增益和基尼指数

二.ID3和CART算法构造决策树

1.ID3算法构造决策树

2.CART算法构造决策树

3.两种算法结果比较

三.总结

1.实验总结


一.决策树的相关概念

1.什么是决策树

        决策树是一种基本的分类与回归方法。决策树模型呈树形结构,在分类问题中,表示基于特征对实例进行分类的过程。它可以认为是if-then规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。其主要优点是模型具有可读性,分类速度快。学习时,利用训练数据,根据损失函数最小化的原则建立决策树模型。预测时,对新的数据,利用决策树模型进行分类。

2.决策树的构造步骤

        (1)特征选择:这是构造决策树的关键步骤,目的是选择将元组最好地划分成不同类的属性。通常采用信息增益、信息增益比、基尼指数等指标来度量特征的重要性和纯度。目标是使得每个子节点尽可能地纯净,即包含尽可能多的相同类别的实例

        (2)切分数据集:选择最优特征后,将数据集根据该特征的不同取值切分成多个子集。这个过程将数据集根据特征划分为不同的分支,每个分支对应于特征的一个取值,该分支上的数据集包含了特征取值与该分支对应的所有实例。

        (3)递归构建决策树:对于每个子集,重复上述步骤,选择最优特征、切分数据集,直到满足终止条件。终止条件可能包括子集中所有样本都属于同一类别,或者没有更多特征可供选择等。

        (4)剪枝:由于决策树可能存在过拟合问题,为了提高其泛化能力,需要对决策树进行剪枝操作。剪枝过程有预剪枝和后剪枝两种策略,目的是去除那些可能导致过拟合的分支。

1) 开始:构建根节点,将所有训练数据都放在根节点,选择一个最优特征,按着这一特征将训练数据集分割成子集,使得各个子集有一个在当前条件下最好的分类。

2) 如果这些子集已经能够被基本正确分类,那么构建叶节点,并将这些子集分到所对应的叶节点去。

3)如果还有子集不能够被正确的分类,那么就对这些子集选择新的最优特征,继续对其进行分割,构建相应的节点,如果递归进行,直至所有训练数据子集被基本正确的分类,或者没有合适的特征为止。

4)每个子集都被分到叶节点上,即都有了明确的类,这样就生成了一颗决策树

3.构造决策树的三种常用算法

(1)ID3算法:

        1>概念:ID3算法是一种贪心算法,用于构造决策树。它起源于概念学习系统(CLS),以信息熵的下降速度为选取测试属性的标准。ID3算法的核心思想是通过计算每个属性的信息增益来选择最佳的划分属性。信息增益表示了给定属性条件下,数据集的不确定性减少的程度。在每个节点,算法选择尚未被用来划分的具有最高信息增益的属性作为划分标准,然后递归地在每个子节点上应用同样的过程,直到生成的决策树能够完美分类训练样例或满足其他停止条件。

        2>优点:

  • 理论清晰,方法简单。
  • 可以处理不相关特征。

        3>缺点:

  • 只能处理离散型属性,对于连续型属性需要离散化。
  • 倾向于选择取值较多的属性作为划分属性,这可能导致过拟合。
  • 没有剪枝策略,容易生成过于复杂的树。

(2)C4.5算法:

        1>概念:C4.5算法是对ID3算法的一个扩展,由Ross Quinlan开发。C4.5算法同样使用信息增益作为选择划分属性的标准,但在处理连续特征、缺失值和剪枝等方面进行了优化。C4.5能够处理具有连续值的属性,通过离散化处理来选择最佳的划分点。此外,C4.5还引入了剪枝策略,通过删除一些可能导致过拟合的分支来提高决策树的泛化能力。C4.5算法的目标是通过学习找到一个从属性值到类别的映射关系,用于对新的未知类别的实体进行分类。

        2>优点:

  • 继承了ID3算法的优点。
  • 能够处理连续型属性。
  • 引入了剪枝策略,提高了模型的泛化能力

        3>缺点:

  • 在构造树的过程中,需要对数据集进行多次扫描和排序,导致算法效率较低。
  • 只适用于能够驻留在内存的数据集,难以处理大规模数据集。

(3)CART算法:

        1>概念:CART算法,全称Classification and Regression Trees,即分类与回归树算法。它既可用于分类问题,也可用于回归问题。CART算法使用基尼指数作为选择划分属性的标准。在分类问题中,CART算法根据特征值将数据集划分为多个子集,通过选择一个最佳划分特征和划分阈值来构建决策树。在回归问题中,CART算法同样根据特征值划分数据集,但构建的是回归树。CART算法生成的决策树是结构简洁的二叉树,每个非叶子节点都有两个分支。

        2>优点:

  • 既可以用于分类,也可以用于回归。
  • 生成的决策树是二叉树,结构简洁,易于理解。
  • 引入了剪枝策略,提高了模型的泛化能力。

        3>缺点:

  • 对样本的输入划分比较细致,如果个别样本发生较大的变动,决策树就需要进行调整。
  • 如果某些特征的取值较多,生成的决策树会比较庞大,影响决策效率。

4.信息增益和基尼指数

        信息增益和基尼指数都是评估数据集划分纯度和选择最佳特征的重要指标,它们各自具有不同的特点和适用场景,在决策树的构建过程中发挥着关键作用。

       1>信息增益:表示数据集中某个特征的信息使得类的不确定性减少的程度。在机器学习中,每个特征可以看作是一个信息源,每个特征值对应一个信息。特征对训练数据集的信息增益,定义为集合的熵与特征给定条件下集合的条件熵之差。通过计算信息增益,我们可以衡量每个特征对于分类模型的贡献程度,并选择最佳的特征进行数据集的划分。

熵定义为信息的期望值,如果待分类的事物可能划分在多个类之中,则符号xi的信息定义为:

l(Xi)=-log2*p(Xi)(其中p(xi)是选择该分类的概率)

为了计算熵,我们需要计算所有类别所有可能值所包含的信息期望值,通过下式可得:

H=-\sum_{i=1}^{n}P(Xi)*log2*P(Xi)(其中n为分类数目)

       2>基尼指数:也称为基尼不纯度,表示在样本集合中一个随机选中的样本被分错的概率。基尼指数越小,表示集合中被选中的样本被分错的概率越小,即集合的纯度越高。在构建决策树时,基尼指数可以帮助我们确定最佳的特征和特征值来分割数据集,从而构建出高效准确的分类模型。

Gini(D) = 1-\sum_{k=1}^{|y|}P(k)*P(k)

直观来说,Gini(D)反映了从数据集D中随机抽取两个样本,其类别标记不一致的概率,因此Gini(D)越小,则数据集D的纯度越高。

属性a的基尼指数定义为:

Gini_index(D,a)=\sum_{v=1}^{V}\frac{|{D}^v|}{|D|}Gini({D}^v)

二.ID3和CART算法构造决策树

1.ID3算法构造决策树

(为便于理解,利用不大的数据集实现)

(1)创建数据集以及标签:

def createDataSet():
    dataSet = [
        ['青绿', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', '好瓜'],
        ['乌黑', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑', '好瓜'],
        ['乌黑', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', '好瓜'],
        ['青绿', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑', '好瓜'],
        ['浅白', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', '好瓜'],
        ['青绿', '稍蜷', '浊响', '清晰', '稍凹', '软粘', '好瓜'],
        ['乌黑', '稍蜷', '浊响', '稍糊', '稍凹', '软粘', '好瓜'],
        ['乌黑', '稍蜷', '浊响', '清晰', '稍凹', '硬滑', '好瓜'],
        ['乌黑', '稍蜷', '沉闷', '稍糊', '稍凹', '硬滑', '坏瓜'],
        ['青绿', '硬挺', '清脆', '清晰', '平坦', '软粘', '坏瓜'],
        ['浅白', '硬挺', '清脆', '模糊', '平坦', '硬滑', '坏瓜'],
        ['浅白', '蜷缩', '浊响', '模糊', '平坦', '软粘', '坏瓜'],
        ['青绿', '稍蜷', '浊响', '稍糊', '凹陷', '硬滑', '坏瓜'],
        ['浅白', '稍蜷', '沉闷', '稍糊', '凹陷', '硬滑', '坏瓜'],
        ['乌黑', '稍蜷', '浊响', '清晰', '稍凹', '软粘', '坏瓜'],
        ['浅白', '蜷缩', '浊响', '模糊', '平坦', '硬滑', '坏瓜'],
        ['青绿', '蜷缩', '沉闷', '稍糊', '稍凹', '硬滑', '坏瓜']
    ]
    features = ['色泽', '根蒂', '敲声', '纹理', '脐部', '触感']
    return dataSet,features

(2)计算给定数据集的熵:利用字典进行数量统计并计算熵

def calShannonEnt(dataSet):
    numEntries = len(dataSet)
    labelCounts = {}
    for featVec in dataSet:
        currentLabel = featVec[-1]
        if currentLabel not in labelCounts.keys():
            labelCounts[currentLabel] = 0
            labelCounts[currentLabel] += 1
        else:
            labelCounts[currentLabel] += 1
    shannonEnt = 0.0
    for key in labelCounts:
        prob = float(labelCounts[key])/numEntries
        shannonEnt -= prob * log(prob,2)
    return shannonEnt

(3)按照给定的特征划分数据集:返回划分后的数据集的结果

def splitDataSet(dataSet, axis, value):
    retDataSet = []
    for featVec in dataSet:
        if featVec[axis] == value:
            reducedFeatVec = featVec[:axis]
            reducedFeatVec.extend(featVec[axis+1:])
            retDataSet.append(reducedFeatVec)
    return retDataSet

(4)选择最好的数据集的划分方式并输出每个特征的熵和信息增益

def choosebest(dataSet):
    numFeatures = len(dataSet[0])-1
    baseEntropy = calShannonEnt(dataSet)
    #print(baseEntropy)
    bestinfo = 0.0; beatFeature = -1
    for i in range(numFeatures):
        featList = [example[i] for example in dataSet]
        uniqueVals = set(featList)
        newEntropy = 0.0
        for value in uniqueVals:
            subDataSet = splitDataSet(dataSet, i, value)
            prob = len(subDataSet)/float(len(dataSet))
            newEntropy += prob * calShannonEnt(subDataSet)
        infoGain = baseEntropy - newEntropy
        print("第", i + 1, "个特征的信息熵为:", newEntropy)
        print("第", i + 1, "个特征的信息增益为:", infoGain)
        if(infoGain > bestinfo):
            bestinfo = infoGain
            beatFeature = i
    return beatFeature

(5)绘制决策树

def majorityCnt(classList):
    classCount = {}
    for vote in classList:
        if vote not in classCount.key():
            classCount[vote] = 0
            classCount[vote] += 1
    sortedClassCount = sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse=True)
    return sortedClassCount[0][0]

def createTree(dataSet,labels):
    classList = [example[-1] for example in dataSet]
    if classList.count(classList[0]) == len(classList):
        return classList[0]
    if len(dataSet[0]) == 1:
        return majorityCnt(classList)
    bestFeat = choosebest(dataSet)
    bestFeatLabel = labels[bestFeat]
    myTree = {bestFeatLabel:{}}
    del(labels[bestFeat])
    featValues = [example[bestFeat] for example in dataSet]
    uniqueVals = set(featValues)
    for value in uniqueVals:
        subLabels = labels[:]
        myTree[bestFeatLabel][value] = createTree(splitDataSet(dataSet,bestFeat,value),subLabels)
    return myTree

(6)运行结果如下:

2.CART算法构造决策树

(1)创建数据集和特征

def createDataSet():
    dataSet = [
        ['青绿', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', '好瓜'],
        ['乌黑', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑', '好瓜'],
        ['乌黑', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', '好瓜'],
        ['青绿', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑', '好瓜'],
        ['浅白', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', '好瓜'],
        ['青绿', '稍蜷', '浊响', '清晰', '稍凹', '软粘', '好瓜'],
        ['乌黑', '稍蜷', '浊响', '稍糊', '稍凹', '软粘', '好瓜'],
        ['乌黑', '稍蜷', '浊响', '清晰', '稍凹', '硬滑', '好瓜'],
        ['乌黑', '稍蜷', '沉闷', '稍糊', '稍凹', '硬滑', '坏瓜'],
        ['青绿', '硬挺', '清脆', '清晰', '平坦', '软粘', '坏瓜'],
        ['浅白', '硬挺', '清脆', '模糊', '平坦', '硬滑', '坏瓜'],
        ['浅白', '蜷缩', '浊响', '模糊', '平坦', '软粘', '坏瓜'],
        ['青绿', '稍蜷', '浊响', '稍糊', '凹陷', '硬滑', '坏瓜'],
        ['浅白', '稍蜷', '沉闷', '稍糊', '凹陷', '硬滑', '坏瓜'],
        ['乌黑', '稍蜷', '浊响', '清晰', '稍凹', '软粘', '坏瓜'],
        ['浅白', '蜷缩', '浊响', '模糊', '平坦', '硬滑', '坏瓜'],
        ['青绿', '蜷缩', '沉闷', '稍糊', '稍凹', '硬滑', '坏瓜']
    ]
    features = ['色泽', '根蒂', '敲声', '纹理', '脐部', '触感']
    numList = []  # [3, 3, 3, 3, 3, 2]
    for i in range(len(features)):
        numList.append(len(featureDic[features[i]]))
    newDataSet = np.array(dataSet)
    # 得到训练数据集
    trainIndex = [0, 1, 2, 3, 5, 6, 9, 13, 14, 15, 16]
    trainDataSet = newDataSet[trainIndex]
    # 得到剪枝数据集
    pruneIndex = [4, 7, 8, 10, 11, 12]
    pruneDataSet = newDataSet[pruneIndex]

    return np.array(dataSet), trainDataSet, pruneDataSet, features

(2)计算基尼指数

def calGini(dataArr):
    numEntries = dataArr.shape[0] #shape [0] 表示行数,即数据集样本总数
    classArr = dataArr[:, -1] #表示是好瓜还是坏瓜
    uniqueClass = list(set(classArr))
    Gini = 1.0
    for c in uniqueClass:
        Gini -= (len(dataArr[dataArr[:, -1] == c]) / float(numEntries)) ** 2
    return Gini

(3)划分数据集

def splitDataSet(dataSet, ax, value):
    return np.delete(dataSet[dataSet[:, ax] == value], ax, axis=1)

(4)计算给定的数据集的在属性ax上的基尼指数

def calSplitGin(dataSet, ax, labels):
    newGini = 0.0  # 划分完数据后的基尼指数
    # 对每一种属性
    for j in featureDic[ax]:
        axIndex = labels.index(ax)
        subDataSet = splitDataSet(dataSet, axIndex, j)
        prob = len(subDataSet) / float(len(dataSet))
        if prob != 0:  
            newGini += prob * calGini(subDataSet)
    return newGini

(5)根据基尼指数得到最好的分类特征

def chooseBestSplit(dataSet, labelList):
    bestGain = 1
    bestFeature = -1
    n = dataSet.shape[1]
    # 对每一个特征
    for i in range(n - 1):
        newGini = calSplitGin(dataSet, labelList[i], labelList)
        print(f"{labelList[i]}   {newGini}")
        if newGini < bestGain:
            bestFeature = i
            bestGain = newGini
    return bestFeature

(6)构造决策树

def majorityCnt(classList):
    classCount = {}
    for vote in classList:
        if vote not in classCount:
            classCount[vote] = 0
        classCount[vote] += 1
    sortedClassCount = sorted(classCount.items(),
                              key=operator.itemgetter(1),
                              reverse=True)
    return sortedClassCount[0][0]

def createTree(dataSet, labels):
    classList = dataSet[:, -1]
    # 如果基尼指数为0,即D中样本全属于同一类别,返回
    if calGini(dataSet) == 0:
        return dataSet[0][-1]
    # 属性值为空,只剩下类标签
    if len(dataSet[0]) == 1:
        return majorityCnt(classList)
    # 得到增益最大划分的属性、值
    bestFeatIndex = chooseBestSplit(dataSet, labels)  # bestFeat 是最优划分属性的坐标
    bestFeatLabel = labels[bestFeatIndex]
    myTree = {bestFeatLabel: {}}  # 创建字典,即树的节点。
    labelsCopy = labels[:]
    del (labelsCopy[bestFeatIndex])
    uniqueVals = featureDic[bestFeatLabel]  # 最好的特征的类别列表
    for value in uniqueVals: 
        subLabels = labelsCopy[:]
        subDataSet = splitDataSet(dataSet, bestFeatIndex, value)
        if len(subDataSet) != 0:
            myTree[bestFeatLabel][value] = createTree(subDataSet, subLabels)
        else:
            myTree[bestFeatLabel][value] = majorityCnt(classList)
    return myTree

(7)运行结果如下:

3.两种算法结果比较

         由以上的运行结果可知,ID3算法以信息增益为指标计算出的最好的特征为第四个特征,即:“纹理”;而CART算法以基尼指数为指标计算出的最好的特征为第五个特征,即“脐部”。因为两个算法计算出的最优的特征不同,因此所构造出的决策树也不同。

         所以可以得出,不同的构造决策树的算法,以不同的指标作为标准所计算出的最优特征会不同,因而构造出的决策树也会有所不同。

(以下图,上图为ID3算法构建的决策树;下图为CART算法构建的决策树)

三.总结

1.实验总结

       通过本次决策树相关知识的实验,我明白了机器学习中的ID3算法和CART算法是构建决策树的重要方法,两者均通过不同的标准来选择最优的划分属性。

       ID3算法采用信息增益作为划分标准,通过计算每个属性划分数据集前后的信息熵之差来衡量其信息量。信息增益越大,表示使用该属性进行划分所获得的“纯度提升”越大。然而,ID3算法倾向于选择取值较多的属性,可能导致决策树过于复杂。CART算法则采用基尼指数作为划分标准,它反映了从数据集中随机抽取两个样本,其类别标记不一致的概率。CART算法既可用于分类也可用于回归,对于分类问题,CART选择基尼指数最小的属性作为最优划分属性;对于回归问题,则采用平方误差最小化准则。

       总之,通过本次的实验,我对于如何构建决策树的具体流程有了更多的认识。同时,也学会了如何计算相关的信息增益以及基尼指数;并如何利用这些决策指标来实现分类完成决策树的构建。不同的构建决策树的算法,所得出的最优特征以及构建出的决策树也会有所不同。

决策树模型 文章目录模型概述模型表达式目标函数最优化方法模型举例ID3C4.5 模型概述 决策树(Decision Tree)是一类解释性强的机器学习非线性监督模型。 模型表达式 已知训练样本集{xi,yi},i=1,2,...,m\{x^i,y^i\}, i=1,2,...,m{xi,yi},i=1,2,...,m, 其中m为样本个数,xi=[x1i,x2i,...,xni]x^i=[x_1^i, x_2^... 阅读详情

相关推荐

十大经典算法——决策树

一、概述 本节我们先来了解一下什么是决策树,以及决策树中的一些术语,方便我们来进行后面的学习,假如现在有了一棵决策树,它是如何完成分类功能的呢?让我们来看下面的例子,如图所示: 杨杨是个大美女,但是从小热爱学习的她,一直读到了研究生都么有考虑个人问题,现在到了婚嫁的年龄,家里开始催促,于是她想为自己找个如意郎君,家里人就告诉她,你要看男孩家是不是有车,是不是房,薪资怎么样等等一系列的要求,...

1024Michael的博客 9631

【机器学习15】决策树模型详解

决策树算法前言一、决策树算法的概述1.树模型2.树模型基本流程二、熵的作用三、决策树构造实例四、信息增益率和gini系数五、剪枝方法六、分类、回归任务七、树模型的可视化展示八、决策边界展示分析九、决策树预剪枝常用参数十、回归树模型总结 前言 随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的决策树的详细内容。 一、决策树算法的概述 1.树模型 决策树是一种树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一种类别。

lys_828的博客 4万+

【机器学习】九大决策树模型总结

这篇博客深入探讨了九种不同的决策树模型,每种模型都拥有其独特的特点和应用场景。我将带您了解一些经典的模型,让你理解它们的工作原理,并在实践中灵活运用它们。

chunyang的博客 3611

机器学习——决策树

决策树是一个基于树形结构的分类模型,它将数据集中的不同特征的不同取值对数据集进行分割,构造出一个树形结构,这个树形结构就是决策树,使用决策树能够进行分类任务,预测数据样本的分类。我们使用的分类算法是k近邻算法,它是一个很容易实现的分类模型,可以完成很多的分类任务,但它最大的缺点就是无法给出数据的内在含义,因为它只是通过计算样本点的距离来进行分类的,这个距离并不包含对该样本分类的实际意义,而决策树的每一个分类都有对应一组特征判断的条件,可以很直观的看出分类规则,其数据形式非常容易理解。

linzixi0220的博客 2920

机器学习第五章之决策树模型

机器学习专题系列

wangyutao12345的博客 5182

机器学习西瓜书&南瓜书——决策树模型

决策树模型是机器学习领域最常见的模型之一,甚至有人说决策树模型上机器学习领域的水平上升了一个台阶。决策树的基本思想是根据样本的一些特征来构造一个树,树的每个分支节点都是一个分支属性,每个分支节点都会针对当前节点的属性把样本一分为二,有这个属性或者说在这个属性上表现为yes的数据被分为一个集合,没有这个属性或者在这个属性上表现为no的数据呗分为一个集合。一个完整的决策过程包含若干个子决策,最终得到判定结果。以“找出好瓜”这个任务为例,假设西瓜有“色泽“,”根蒂“,”敲击声“这三个属性,假设先判定“色泽”这个属

m0_73556978的博客 1838

[机器学习]决策树模型及实验

机器学习决策树

weixin_73049545的博客 2297

Python 机器学习 回归决策树

决策树是一种常用于分类和回归的机器学习算法。在回归问题中,决策树用于预测连续值的输出,如价格或温度等。回归决策树是一种用于回归问题的决策树模型。与分类决策树(输出离散标签)不同,回归决策树的目标是预测一个连续的数值。回归决策树的工作原理与分类树相似,但在决定分支如何划分时,它们寻求最小化的是目标变量的方差或均方误差(MSE),而不是不纯度(如基尼不纯度或熵)。

weixin_42098295的博客 1461

[ML]机器学习_决策树模型

决策树是一种经典的监督学习模型,它通过对数据集进行递归分区,最终形成一个树形结构,树上每个节点都对应一个关于特征的判断条件,而叶节点则是对应一个分类结果或者回归值。决策树可以用于分类(C4.5、CART)和回归(CART),其中分类树解决离散变量,回归树解决连续变量。决策树的构建过程一般包括以下几个步骤:特征选择:选择最优的特征作为当前节点的分裂依据,这一步通常根据信息熵或者基尼不纯度进行计算。

iazzz的博客 630

机器学习——决策树模型:Python实现

机器学习——决策树模型:Python实现欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你

qq_34357269的博客 8770

机器学习(三)决策树算法Decision Tree

上面两篇博客对机器学习有了简单的介绍,并介绍了机器学习中的一些基本的概念;下面我们来介绍机器学习中的第一个算法决策树算法DT(Decision Tree)。         介绍Decision Tree之前我先来引入一些经典的小例子来说明什么是决策树。如下面的图:                         在当今这个社会尤其是我们这群程序员对象是一个很头疼的问题

Sweet Baby,甜宝 2927

机器学习——决策树(Decision Tree)

决策树是一种模仿人类决策过程的机器学习算法,它通过学习简单的决策规则来预测目标变量的值。决策树模型由节点和边组成,形成一个树状结构。树的每个内部节点表示一个特征上的判断,每个边代表判断的结果,而每个叶子节点代表一个类别或决策结果。今天由我来向大家介绍决策树的相关算法以及如何构造和实现决策树。决策树(Decision Tree)是从一组无次序、无规则,但有类别标号的样本集中推导出的、树形表示的分类规则。一般的,一棵决策树包含一个根结点、若干个内部结点(中间结点)和若干个叶子结点。

zdx2585503940的博客 5479

【ML】基于机器学习的心脏病预测研究(附代码和数据集,决策树模型)

【ML】基于机器学习的心脏病预测研究(附代码和数据集,决策树模型)

学无止境、积少成多、厚积薄发 632

《machine learning in action》机器学习 算法学习笔记 决策树模型

决策树模型 重要任务:是为了理解数据中所蕴含的知识信息,因此决策树可以使用不熟悉的数据集合,并从中提取出一系列规则,这些机器根据数据集创建规则的过程就是机器学习的过程。 优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据。 缺点:可能会产生过度匹配问题。 范例:专家系统。 如何构造决策树: 编写构造树的python代码 度量算法成功率 递归建立分类器 Matplotlib绘制决策树图 利用信息论划分数据集,伪代码: IF (整个数据集属于同一个类型) return 类

m0_52186223的博客 1040

利用netmq在相机应用于unity之间传输图像数据

Unity工业相机接入方案解析 本文探讨了在Unity中接入不同品牌工业相机的技术方案。研究发现: Basler相机可直接调用官方DLL(pylonc.net.dll)实现接入 海康和大恒相机因驱动DLL依赖C++组件,无法直接调用 解决方案:通过独立进程(相机应用程序)与Unity进行通信,采用NetMQ实现图像数据传输 技术实现要点: 相机端:使用PublisherSocket发布JPEG图像帧 Unity端:通过SubscriberSocket订阅图像数据 优化:设置高水位线控制缓存帧数,避免数据堆积

weixin_46450859的博客 417

大模型微调框架之TRL

近年来,大语言模型(LLMs)的快速发展推动了下游应用的繁荣,但如何高效地对这些模型进行对齐和微调,依然是研究与应用的热点。Hugging Face 开源的 TRL(Transformer Reinforcement Learning) 框架,提供了基于强化学习的语言模型训练方法,并支持 SFT(监督微调)、PPO(近端策略优化)、DPO(直接偏好优化)等多种方式,是目前对齐和微调 LLM 的重要工具。

和大家一起涨芝士 904

决策树模型案例_机器学习进阶 决策树模型

本课程属于 Python人工智能 A 计划,不单独售卖,加入 A 计划可免费观看本课程及所有 Python人工智能 收费课程~Python人工智能 A 计划永久有效期购买链接:http://www.sikiedu.com/classroom/14/introduction> 课程简介与内容本次课程中会给大家详细讲解机器学习中决策树模型,为后面的集成打基础前置知识信息与熵不确定性计算...

weixin_39876450的博客 195

基于计算机视觉的Windows自动化工具openclaw-win:从原理到实战

计算机视觉与自动化技术正深刻改变人机交互方式,其核心在于让机器具备“感知-决策-执行”的能力。通过图像采集与处理算法,程序可以识别屏幕上的特定元素;结合模拟输入技术,便能自动执行点击、拖拽等操作,形成完整的自动化闭环。这一技术栈在软件测试、数据采集、重复性办公任务等领域具有重要价值,能够显著提升工作效率。开源项目openclaw-win正是这一理念的工程实践,它整合了图像识别与模拟操作模块,为开发者提供了一个研究自动化技术的具体样本。项目涉及模板匹配、坐标计算等关键技术点,并需处理屏幕适配、操作延迟等实际问

weixin_28745975的博客 329

决策树模型构建+调参Python代码——用决策树模型实现机器学习

决策树模型构建+调参Python代码——用决策树模型实现机器学习。

qq_41698317的博客 3526

单细胞转录组数据质控实战:如何用Seurat精准过滤低质量细胞(附完整代码)

本文详细介绍了使用Seurat进行单细胞转录组数据质控的实战方法,包括基因检出数、分子计数和线粒体基因比例等关键指标的解读与可视化技巧。通过动态阈值策略和高级质控技巧(如双细胞检测和红细胞过滤),帮助研究者精准过滤低质量细胞,提升数据分析可靠性。附完整代码示例,适合生物信息学研究人员参考实践。

ii567的博客 825

ESP32驱动MLX90640红外热成像传感器:从报错到成功运行的完整避坑指南

本文是一份详细的ESP32驱动MLX90640红外热成像传感器的实战指南。针对开发中常见的I2C通信失败、数据全零及‘坏点过多’等报错,文章提供了从环境搭建、驱动库选择与改造到实战代码解析的完整解决方案,并分享了数据滤波、热图生成及多任务优化等高级技巧,帮助开发者高效避坑,实现稳定运行。

weixin_29191669的博客 94

机器学习方法:15分钟带你吃透决策树模型

【本文的阅读时间约15分钟,希望大家耐心观看】这是机器学习方法系列科普文章,由浙中大公卫徐老师撰写,往期推文可以看集合。在众多机器学习模型中,决策树是最为简单直观的一种算法。它就像我们平常做决定时的过程,逐步排除可能的选项,最终得出结论。今天这篇文章中,我们将结合图例讲解讲解决策树的结构、数学原理、具体构建和优化过程,让大家在理解时不至于太抽象,同时我们也会提供构建决策树预测模型的数据和代码,感...

郑老师统计 2936

支持向量机算法之鸢尾花特征分类【机器学习】

支持向量机(SVM)是一种二元分类模型。它的基本模型是在特征空间中定义最大区间的线性分类器,这使它不同于感知器;支持向量机还包括核技术,这使得它本质上是一个非线性分类器。支持向量机的学习策略是区间最大化,它可以形式化为求解凸二次规划的问题,等价于正则化铰链损失函数的最小化。支持向量机的学习算法是求解凸二次规划的优化算法。Scikit learn(sklearn)是机器学习中常见的第三方模块。它封装了常见的机器学习方法,包括回归、降维、分类、聚类等。实例的特征向量(以2D为例)映射到空间中的一些点,如下图中的

一键难忘的博客 4971

Spark:基于PySpark的逻辑回归和决策树模型对泰旦尼克号幸存者预测的机器学习流程

基于PySpark,使用spark的MLLib部分机器学习包,SparkML,对Kaggle入门初级案例:泰坦尼克号幸存者预测的案例,从数据分析,数据清洗,数据整理,特征工程,特征向量化等完整流程示例,最后基于SparkML包中的逻辑回归和决策树模型进行了模型构建和预测测试

maoyuanming0806的博客 4224

YOLOv11-seg改进系列 | 引入CVPR2022 MetaFormer,零参数池化Token混合+StarReLU MLP,精度涨不掉速

本文提出了一种改进YOLOv11分割任务的C3k2_PoolingFormer模块,通过引入MetaFormer架构和Pooling Token Mixer,在保持模型轻量化的同时增强全局感受野建模能力。核心创新包括:1)使用零参数的AvgPool3×3差值作为Token Mixer,实现高效邻域信息聚合和局部对比增强;2)采用StarReLU MLP替代传统激活函数,提升非线性表达能力。改进后模型仅增加6.1%参数量,却能显著提升分割精度,特别适用于需要长程依赖建模的实例分割任务。该设计为轻量级视觉模型提

qq_44224801的博客 431

保姆级YOLOv8改进 | 基于DWRSeg扩张式残差机制的小目标检测优化(附修改后的C2f与Bottleneck模块)

DWRSeg机制:通过动态权重调整和扩张卷积有效提升了小目标的检测能力。C2f和Bottleneck模块修改:通过集成DWRSeg模块,增强了特征提取和残差学习能力。实验结果:在多个应用场景中,改进后的YOLOv8展现了更高的检测精度,特别是在小目标检测中表现突出。

一键难忘的博客 3216
上一篇: 机器学习之模型评估
下一篇: 机器学习之朴素贝叶斯
AstronomyFirst
博客等级 码龄4年 195粉丝 17原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值