决策树之CART算法分类树原理及python实现

机器学习(四):CART分类树(基础篇) 机器学习(四):CART决策树(基础篇) 大家都知道,著名的决策树有三种:ID3,C4.5,CART。前面两棵树只适用于分类,前面两个数的优点我们都知道了,那么问题来了,我们为什么要学习CART树呢?CART树又叫分类,回归树,顾名思义,它既可以做分类又可以做回归。是不是感觉很神奇?我们看看他的实现原理。 CRAT树度量指标 1.回归树 纯度:回归方差 其中,I为i可以取的值,xix_ixi​表... 阅读详情

决策树

决策树模型是一种传统的算法,与人类思维十分相似

  • 基本思想:模拟人类进行级联选择或决策的过程,按照属性的某个优先级依次对数据的全部属性进行判别,从而得到输入数据对应的预测输出。
  • 树形模型是一个一个特征值进行处理,而线性模型是所有特征赋权相加得到新值。
  • 监督学习模型:通过对训练集的学习,挖掘其中的规则,预测新数据
  • 基本结构:根节点为训练全集,中间节点为属性测试,叶子节点为决策结果

决策树的特点

优点

  1. 计算简单,可解释性强。
  2. 适合处理有缺失属性的样本。
  3. 可自动忽略目标变量中没有贡献的属性。

缺点

  1. 容易造成过拟合,需要采取剪枝操作。
  2. 忽略数据之间的相关性。
  3. 信息增益偏向于变量取值更多的离散特征。

决策树构造

基本思路:
  决策树的构造本质上是一种贪心算法,每次都根据分类规则找到最优的划分特征,根据该特征将节点样本划分若干部个样本集,不断重复,构造新的节点,重复递归直至满足终止条件。

终止条件:

  • 当前节点包含样本全属于同一类别,无需划分
  • 当前节点包含样本集为空,不能划分
  • 当前属性集为空,或所有样本在所有属性上取值相同,无法划分

决策树生成算法

三种经典的决策树生成算法

  • 基于信息增益的ID3算法
    -基于信息增益率的C4.5算法
    -基于基尼指数的CART算法

请添加图片描述

CART算法

CART算法构造一棵分类回归树,既可以作分类用,也可作回归用。构造的决策树为二叉树,对于特征取值大于2的需要进行二元划分。
如婚姻状况有三种取值:{单身,已婚,离异},在进行划分时,首先将其划分为{已婚,非已婚}两类,其次再将非已婚划分为{单身,离异}两类。

构造分类决策树

请添加图片描述

python代码实现

'''
导入训练集数据,注意这里的特征值score为连续型变量
'''
def train_dataset():
    dataset = [[10, 'low'],
               [26, 'low'],
               [37, 'low'],
               [27, 'mid'],
               [48, 'mid'],
               [52, 'low'],
               [60, 'mid'],
               [72, 'mid'],
               [68, 'high'],
               [80, 'high'],
               [89, 'high'],
               [95, 'high']]
    features = ['score']
    return dataset, features


'''
计算当前集合的Gini系数
'''
def calGini(dataset):
    # 得到样本总数
    data_count = len(dataset)
    labels = {}
    for data in dataset:
        # 统计标签出现的次数
        if data[-1] not in labels:
            labels[data[-1]] = 1
        else:
            labels[data[-1]] += 1
    # 计算当前集合中各标签样本数出现的概率
    for label in labels:
        labels[label] /= data_count
        labels[label] = labels[label] * labels[label]
    # 计算按照当前方式分类的Gini系数
    Gini = 1 - sum(labels.values())
    return Gini


'''
分割样本集,按照特征值index可能的取值value,将样本集分成取值为value和取值不为value的两部分
二分法构造二叉树
'''
def split_dataset(dataset, index, value):
    sub_dataset1 = []
    sub_dataset2 = []
    for data in dataset:
        # 离散值划分:等于value / 不等于value
        # 连续值划分:<= value / > value
        if data[index] <= value:
            # 注意特征值要再用来划分(cart算法可以重复利用特征值)
            # current_list = data[: index]
            # current_list.extend(data[index + 1:])
            sub_dataset1.append(data)
        else:
            # current_list = data[: index]
            # current_list.extend(data[index + 1:])
            sub_dataset2.append(data)
    return sub_dataset1, sub_dataset2


'''
选择最佳的划分特征属性和对应属性值
'''
def choose_best_feature(dataset):
    # 特征值个数
    feature_count = len(dataset[0]) - 1
    # 定义最佳基尼系数、最优特征的索引、最优划分点
    bestGini = 1
    index_of_best_feature = -1
    best_split_point = 0.0
    
    for i in range(feature_count):
        # 当取值为离散型变量时:得到当前特征属性的所有取值(去重,每个取值只出现一次),如婚姻状况的三种取值:单身、已婚、离异
        # colValue = set(data[i] for data in dataset)
        # 当取值为连续型变量时:得到当前特征属性的所有取值,从小到大进行排序
        colValueRow = list(data[i] for data in dataset)
        colValueRow.sort()
        colValue = []
        for j in range(len(colValueRow) - 1):
            # 对排序后的取值,取相邻两个值的平均数,
            # 如对特征值序列{10,20,30},划分点为<= 15, >15, <=25, >25
            colValue.append((colValueRow[j] + colValueRow[j + 1]) / 2)

        # 构建Gini字典, key为特征属性的取值,value为对应的gini系数
        Gini = {}
        for v in colValue:
            sub_dataset1, sub_dataset2 = split_dataset(dataset, i, v)
            prob1 = len(sub_dataset1) / len(dataset)
            prob2 = len(sub_dataset2) / len(dataset)

            sub_gini1 = calGini(sub_dataset1)
            sub_gini2 = calGini(sub_dataset2)
            # 由当前切分点划分后的基尼指数
            Gini[v] = prob1 * sub_gini1 + prob2 * sub_gini2
            # 更新最优划分点和最优特征
            if Gini[v] < bestGini:
                bestGini = Gini[v]
                index_of_best_feature = i
                best_split_point = v
        print(Gini)
    return index_of_best_feature, best_split_point


'''
构造决策树
1. 递归停止的条件:
> 对于当前节点的数据集,样本个数小于阈值或者没有特征,则返回决策子树,停止递归
> 
3. 算计当前节点各个特征属性的取值的gini系数,选择最优特征和最优切分点,划分样本为两部分,生成两个子节点
4. 对子节点递归调用决策树构造函数,生成CART分类树
'''
def create_decision_tree(dataset, features, i, labelValues):
    labels = [data[-1] for data in dataset]

    # 若当前集合中所有样本标签相等,返回标签值
    if labels.count(labels[0]) == len(labels):
        labelValues.remove(labels[0])
        return labels[0]
   # 若当前集合重样本大部分被分纯(阈值),返回标签值
    for label in labels:
        if labels.count(label) >= 0.8 * len(labels):
            labelValues.remove(label)
            return label

    # 这里i代表了决策树的高度,当决策树分类到指定高度时,递归停止
    if i == 0:
        return labelValues[0]

    # 开始构建决策树
    index_of_best_feature, best_split_point = choose_best_feature(dataset)
    best_feature = features[index_of_best_feature]
    # 初始化决策树
    decision_tree = {best_feature: {}}

    # CART可以重复使用特征值,只要能利用该特征继续进行划分就可以使用
    sub_dataset1, sub_dataset2 = split_dataset(dataset, index_of_best_feature, best_split_point)
    # 递归调用,构建子树,左子树是等于切分点值的,右子树是不等于切分点的
    decision_tree[best_feature][best_split_point] = create_decision_tree(sub_dataset1, features, i - 1, labelValues)
    decision_tree[best_feature]['others'] = create_decision_tree(sub_dataset2, features, i - 1, labelValues)
    return decision_tree


'''
用训练好的决策树对新样本进行分类
'''
def classify(decision_tree, features, test_example):
    # 根节点代表的属性
    root_feature = list(decision_tree.keys())[0]
    # 第一个分类属性的值
    second_dict = decision_tree[root_feature]
    classLabel = ''
    # 判断该属性值是属性中的第几个
    index_of_first_feature = features.index(root_feature)
    for key in second_dict.keys():
        if key != 'others':
            if test_example[index_of_first_feature] <= key:
                # 若当前属性值是字典,则递归查询
                if type(second_dict[key]).__name__ == 'dict':
                    classLabel = classify(second_dict[key], features, test_example)
                else:
                    classLabel = second_dict[key]
            else:
                if isinstance(second_dict['others'], str):
                    classLabel = second_dict['others']
                else:
                    classLabel = classify(second_dict['others'], features, test_example)
    return classLabel


'''
对测试集进行分类,统计各标签下的数据量
'''
def getClassifyResult(test_dataset):
    dataset, features = train_dataset()
    labelValues = ['low', 'mid', 'high']
    decision_tree = create_decision_tree(dataset, features, 2, labelValues)
    labels = {}
    for example in test_dataset:
        label = classify(decision_tree, features, example)
        if label not in labels:
            labels[label] = 0
        labels[label] += 1
    return labels


if __name__ == '__main__':

    test_example = [[63]]
    print(getClassifyResult(test_example))

测试集为score=63,得到结果为:分类为mid
请添加图片描述

决策树可视化

上面只能看到分类的一个结果,更加直观的方式为画出决策树。

import matplotlib.pyplot as plt
import CART

# 设置显示中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
decisionNode = dict(boxstyle="sawtooth", fc="0.8")
leafNode = dict(boxstyle="round4", fc="0.8")
arrow_args = dict(arrowstyle="<-")


def plotNode(nodeTxt, centerPt, parentPt, nodeType):
    # matplotlib.pyplot.annotate(text, xy, *args, **kwargs
    # text:文本注释
    # xy: 被指向的数据点(x,y)的位置坐标
    # xytext: 注释文本的坐标点
    # textcoords / xtcoords: 注释文本的坐标系属性
    createPlot.ax1.annotate(nodeTxt, xy=parentPt, xycoords='axes fraction',
                            xytext=centerPt, textcoords='axes fraction',
                            va="center", ha="center", bbox=nodeType, arrowprops=arrow_args)


def getNumLeafs(myTree):
    numLeafs = 0
    firstStr = list(myTree.keys())[0]
    secondDict = myTree[firstStr]
    for key in secondDict.keys():
        if type(secondDict[key]).__name__ == 'dict':
            numLeafs += getNumLeafs(secondDict[key])
        else:
            numLeafs += 1
    return numLeafs


def getTreeDepth(myTree):
    maxDepth = 0
    firstStr = list(myTree.keys())[0]
    secondDict = myTree[firstStr]
    for key in secondDict.keys():
        if type(secondDict[key]).__name__ == 'dict':
            thisDepth = 1 + getTreeDepth(secondDict[key])
        else:
            thisDepth = 1
        if thisDepth > maxDepth: maxDepth = thisDepth
    return maxDepth


# 在父子节点之间填充文本信息
def plotMidText(cntrPt, parentPt, txtString):
    xMid = (parentPt[0] - cntrPt[0]) / 2.0 + cntrPt[0]
    yMid = (parentPt[1] - cntrPt[1]) / 2.0 + cntrPt[1]
    createPlot.ax1.text(xMid, yMid, txtString)


def plotTree(myTree, parentPt, nodeTxt):
    numLeafs = getNumLeafs(myTree)
    depth = getTreeDepth(myTree)
    firstStr = list(myTree.keys())[0]
    cntrPt = (plotTree.xOff + (1.0 + float(numLeafs)) / 2.0 / plotTree.totalW, plotTree.yOff)
    # 标记子节点的属性值
    plotMidText(cntrPt, parentPt, nodeTxt)
    plotNode(firstStr, cntrPt, parentPt, decisionNode)
    secondDict = myTree[firstStr]
    # 计算子节点的y偏移
    plotTree.yOff = plotTree.yOff - 1.0 / plotTree.totalD
    for key in secondDict.keys():
        if type(secondDict[key]).__name__ == 'dict':
            plotTree(secondDict[key], cntrPt, str(key))
        else:
            # 计算子节点的x偏移
            plotTree.xOff = plotTree.xOff + 1.0 / plotTree.totalW
            plotNode(secondDict[key], (plotTree.xOff, plotTree.yOff), cntrPt, leafNode)
            plotMidText((plotTree.xOff, plotTree.yOff), cntrPt, str(key))
    plotTree.yOff = plotTree.yOff + 1. / plotTree.totalD


def createPlot(inTree):
    # 创建新图形
    fig = plt.figure(1, facecolor='white')
    # 清空绘图区
    fig.clf()
    axprops = dict(xticks=[], yticks=[])
    # 定义绘图区
    createPlot.ax1 = plt.subplot(111, frameon=False, **axprops)
    plotTree.totalW = float(getNumLeafs(inTree))
    plotTree.totalD = float(getTreeDepth(inTree))
    plotTree.xOff = -0.5 / plotTree.totalW
    plotTree.yOff = 1.0
    # 绘制树
    plotTree(inTree, (0.5, 1.0), '')
    plt.show()

得到绘图的结果为:
在这里插入图片描述
上图的划分结果为:
score <= 26.5 : low
26.5 < score <= 64: mid
score > 64: high
从而印证了上述代码分类结果的正确性。

sklearn构造决策树

除手动构建决策树外,sklearn提供了构造决策树的函数,能够快速构造出CART决策树。

def train(x, y):
    # 训练集和测试集划分
    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)
    # 建立决策树模型
    model = tree.DecisionTreeClassifier(
        criterion='gini',  # 采用gini还是entropy进行特征选择
        max_depth=2,  # 树的最大深度
        min_samples_split=2,  # 内部节点分裂所需要的最小样本数量
        min_samples_leaf=1,  # 叶子节点所需要的最小样本数量
        max_features=None  # 寻找最优分割点时的最大特征数
    )
    # 对模型进行训练
    model.fit(x_train, y_train)
    # 预测,比较结果
    print("预测结果准确性:")
    print(model.score(x_test, y_test))
    return model

'''
以dot形式导出决策树
可采用以下命令生成图形渲染: 
dot -Tpng tree.dot -o tree.png
或者直接调用drawTree函数,得到Sourve.gv.pdf
'''
def drawTree(model, features, labels):
    with open("tree.dot", 'w') as f:
        f = tree.export_graphviz(model,
                                 out_file=f,
                                 feature_names=features,
                                 class_names=labels)
    with(open("tree.dot")) as f:
        dot_graph = f.read()
    graph = graphviz.Source(dot_graph)
    graph.view()

画出的决策树如下图(PS:这里画的树数据集改变了,所以与上面分类结果不同)
请添加图片描述

参数解读:

  1. 内部分支上第一行为分类点
  2. gini / entropy为该节点的对应gini系数/信息熵
  3. samples为该分类下样本的容量
  4. value表示该分类下各个label中包含的样本数量
    example: value=[1,3,0]表示该分类中包含1个标签为low,3个标签为mid的样本
  5. class主要显示出容量多的样本

参考内容:
【1】https://zhuanlan.zhihu.com/p/32164933
【2】https://blog.youkuaiyun.com/qq_45717425/article/details/120992980
【3】Peter Harrington.Machine Learning in Action(《机器学习实战》)[M].北京:人民邮电出版社,2013

CART决策树算法的Python实现(注释详细) 一、CART决策树算法简介 CART(Classification And Regression Trees 分类回归树)算法是一种树构建算法,既可以用于分类任务,又可以用于回归。相比于 ID3 和 C4.5 只能用于离散型数据且只能用于分类任务,CART 算法的适用面要广得多,既可用于离散型数据,又可以处理连续型数据,并且分类和回归任务都能处理。 本文仅讨论基本的CART分类决策树构建,不讨论回归树和剪枝等问题。 首先,我们要明确以下几点: 1. CART算法是二分类常用的方法,由CART算法生成的决策树 阅读详情

相关推荐

6. 决策树算法原理以及cart代码实现

这篇博客介绍了CART决策树的原理以及如何使用Python编写代码来构建一个CART决策树模型,以诊断乳腺癌为例。文章首先介绍了决策树的基本概念和构建流程,然后详细讲解了CART决策树的原理,包括基尼系数、切分点选择、剪枝等内容。接着,文章以乳腺癌数据为例,自己编写了一个CART决策树分类器,并在该数据集上训练和测试,并使用后剪枝的方法提高模型的泛化能力。完整的实验代码在我的github上👉QYHcrossover/ML-numpy: 机器学习算法numpy实现 (github.com)欢迎star⭐。

weixin_43796012的博客 934

决策树之CART分类树

CART分类树的算法理解和代码实现,真亲自手算带你理解算法。

weixin_56559434的博客 5621

机器学习经典算法详解及Python实现--CART分类决策树、回归树和模型树

Classification And Regression Tree(CART)是一种很重要的机器学习算法,既可以用于创建分类树(Classification Tree),也可以用于创建回归树(Regression Tree),本文介绍了CART用于离散标签分类决策和连续特征回归时的原理。决策树创建过程分析了信息混乱度度量Gini指数、连续和离散特征的特殊处理、连续和离散特征共存时函数的特殊处理和后剪枝;用于回归时则介绍了回归树和模型树的原理、适用场景和创建过程。个人认为,回归树和模型树可以被看做“群落分类

Adan 2万+

CART算法之分类树

本文介绍CART分类算法的原理。

blinkyou001的博客 1766

STM32 移植LwIP 实现网线插拔自动恢复

STM32 移植LwIP 之后,能正常联网通讯,但是发现2个问题, 1、上电初始化前,未插入网线,之后就无法获取到IP地址(DHCP) 2、正常通讯过程中,拔掉网线,然后插回去,不知道如何复位 先看一下LWIP初始化代码 /** * LwIP initialization function */ int MX_LWIP_Init() { /* Initilialize the LwIP stack with RTOS */ tcpip_init( NULL, NULL );

tiantangmoke的博客 8074

Infiniband互连网络概述

一、Infiniband是什么? InfiniBand(简称IB)是一种工业标准规范,它定义了一种输入/输出架构,用于计算节点、通信基础设施设备、存储和嵌入式系统的互连。操作系统可以是Linux、Windows或ESXI。 IB网络一共是五层,从第一天起,IB就被设计为提供一个端到端的解决方案,改善和加速从物理层到上层的所有协议层。 IB协议于2000年由IBTA(InfiniBand Trade Association)提出,其规定了一...

weixin_41687819的博客 5229

Python之scikit-learn01--决策树

1.CART决策树 在Python之机器学习01--决策树中介绍了通过ID3算法生成决策树,它使用熵来度量样本集的不确定性。本文将介绍另一种决策树,CART决策树,并使用scikit-learn来 实现算法。分类与回归树(Classfification And Regression Tree,CART)模型也是一种决策树模型,它既可用于分类,也可用于回归。分类与回归树模型采用不同的最优化策略,

li578023的博客 632

VisualSFM+MeshLab 三维重建全过程记录

VisualSFM+MeshLab 三维重建全过程记录,从下载到运行出结果,以及其中一些可能出现的小问题。通过这两个软件熟悉一下多目立体视觉重建的流程。

何似莫相逢 3万+

决策树算法梳理

1.信息论基础(熵,联合熵,条件熵,信息增益,基尼不纯度) 熵:表示随机变量不确定性的度量,熵越大,随机变量的不确定性就越大 设X是一个取有限个值得离散随机变量其随机分布为 则随机变量的熵定义为 联合熵:联合熵就是度量一个联合分布的随机系统的不确定度 分布为 p(x,y) 的一对随机变量 (X,Y),其联合熵定义为 条件熵:表示在已知随机变量X的条件下随机变量Y的不确定性,随机变量X给定的条...

jll2014210714的博客 327

bartender 10.1破解版|bartender条码打印10.1

点击下载出处:BarTender10.1破解版 bartender10.1破解版是一款专业的条码打印软件,在行业内广受好评,通过使用bartender我们可以将标签设计这个复杂的过程变得更简便,在设计中快速调整,即刻打印,非常迅速,BarTender10.1破解版不仅支持的标签类型包括EPC Class 1 、Gen2 、ISO 18000-6b 、ISO 15693 、Tag-It 、I-CO...

weixin_44924147的博客 6万+

Unity2D像素刀光实现:粒子方向控制与像素级渲染规范

像素风游戏中的刀光特效并非普通粒子动画,而是需严格遵循像素艺术原理的视觉暂留模拟。其核心在于将‘瞬时切割感’转化为程序可执行的渲染逻辑:通过禁用纹理滤波保障1:1像素锐度,绑定刀锋向量控制粒子运动方向,限定≤0.15秒生命周期匹配人眼暂留阈值,并采用Stretched Billboard实现动态拉伸拖影。该方案兼顾美术语义(如直劈、横扫、突刺)与工程约束(Sorting Layer分层、对象池复用、单粒子GPU优化),广泛适用于Unity2D平台的动作反馈系统,尤其适配《空洞骑士》《死亡细胞》类高节奏像素R

weixin_32390647的博客 283

Dev C++开发环境搭建教程-f51e239b40

【手撕算法】决策树完全解读:从信息熵到剪枝策略

qq_63911508的博客 1112

DSP篇--C6678功能调试系列之EDMA3调试

EDMA主要用于数据的搬运,发送、接收,其搬运数据的形式有;AB模式,ABC模式以及ping-pong模式。 EDMA3分初始化、参数配置、以及中断配置。其中中断配置则需要注意的内容主要有:挂载的TC通道,对应的触发事件,以及中断的使能。

nanke_yh的博客 1720

决策树算法原理及实现

决策树算法原理及实现 转载自:https://www.cnblogs.com/sxron/p/5471078.html (一)认识决策树 1、决策树分类原理   决策树是通过一系列规则对数据进行分类的过程。它提供一种在什么条件下会得到什么值的类似规则的方法。决策树分为分类树和回归树两种,分类树对离散变量做决策树,回归树对连续变量做决策树。   近来的调查表明决策树也是最经常使用的数据挖...

kerwinner的博客 2630

【推荐100个unity插件之27】推荐5种办法实现unity人物布料系统 衣服裙子飘动 头发飘动 胸部抖动 骨骼模拟 配件摆动 尾巴摆动 —— 主要是Magica Cloth 2插件

要实现Unity中的人物布料系统并使其具备动态效果,可以探索多种技术方法。这些方法不仅可以使衣服、裙子、头发等元素自然飘动,还可以实现胸部抖动、骨骼模拟、配件摆动和尾巴摆动等细致效果。本文将深入探讨五种实现这些动态效果的技术方案,从基础的物理模拟到高级的动画控制,帮助你打造逼真的人物表现。本文主要探究Magica Cloth 2的使用,因为我想探究最好的实现方法,而不是探究最多的实现方法。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 6302

“守望先锋”网络同步分析

守望先锋”(Overwatch)是一款由暴雪娱乐开发的团队基础第一人称射击游戏(FPS),于2016年正式发布。游戏以其独特的角色设计、丰富的游戏模式和高度的团队合作性而受到广泛欢迎。类型:第一人称射击(FPS)/多人在线战斗竞技场(MOBA元素)平台玩家人数:每场比赛由两个六人队伍组成,共12名玩家。客户端/服务器模型:在这种模型中,客户端负责处理用户输入和表现逻辑,而服务器则负责游戏的核心逻辑和状态管理。客户端与服务器之间通过网络进行通信,确保游戏状态的一致性。强同步机制。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 427

决策树算法实现

ID3,c4.5只用于做分类,得到的结果是连续值; cart既可以做分类,也可以做回归,得到的结果是连续值。 CART 分类树 在 Python 的 sklearn 中默认采用的是 CART 分类树。 下面,我们来用 CART 分类树,给 iris 数据集构造一棵分类决策树。在 Python 的 sklearn 中,如果我们想要创建 CART 分类树,可以直接使用 DecisionTreeCla...

qiu_zhi_liao的博客 374

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

机器学习算法-决策树

机器学习经典算法详解及Python实现–决策树(Decision Tree) 决策树是通过一系列规则对数据进行分类的过程。它提供一种在什么条件下会得到什么值的类似规则的方法。决策树分为分类树和回归树两种,分类树对离散变量做决策树,回归树对连续变量做决策树。 近来的调查表明决策树也是最经常使用的数据挖掘算法,它的概念非常简单。决策树算法之所以如此流行,一个很重要的原因就是使用者基本上

huhuint的专栏 5188

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

决策树模型

1、信息论基础 https://blog.youkuaiyun.com/MY578719543/article/details/88123667 2、决策树的不同分类算法(ID3算法、C4.5、CART分类树)的原理及应用场景 https://blog.youkuaiyun.com/MY578719543/article/details/88123667 3、回归树原理 3、决策树防止过拟合手段 ...

qq_29652017的博客 106

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

CART分类树算法与随机森林

CART分类树算法与随机森林对于一个复杂的分类问题,训练一个复杂的分类模型通常比较耗时,同时为了能够提高对分类问题的预测准确性,通常可以选择训练多个分类模型,并将各自的预测结果结合起来,得到最终的预测。集成学习(Ensemble Learning)便是这样一种学习方法,集成学习是指将多种学习算法,通过适当的形式组合起来完成同一个任务。在集成学习中,主要分为Bagging算法和boosting算法。随

ggwcr的博客 1万+

初级算法梳理 -【任务3 决策树算法梳理】

任务内容 1.信息论基础(熵 联合熵 条件熵 信息增益 基尼不纯度) 2.决策树的不同分类算法(ID3算法、C4.5、CART分类树)的原理及应用场景 3.回归树原理 4.决策树防止过拟合手段 5.模型评估 6.sklearn参数详解Python绘制决策树 具体解释 信息论基础(熵 联合熵 条件熵 信息增益 基尼不纯度) 熵表示的是随机变量不确定性的度量。熵越大,随机变量的不确定性也就...

dideng8675的博客 180

决策树算法梳理以及python实现

1.信息论基础 1.1 熵 熵:用通俗点的话来说就是一个衡量混乱程度的单位。例如一个杯子A里只倒了啤酒,而另 一个杯子B里倒了啤酒,白酒, 红酒,那么我们说杯子A的熵值比杯子B的熵值小 \ 专业解释:假设随机变量X的可能取值有x1,x2,...,xnx1​,x2​,...,xn​,对于每一个 可能的取值xi​,其概率为P(X=xi)=pi,i=1,2...,n。随机变量的熵为 底数选取不影响 ...

小十亘的博客 620

决策树算法原理及调参

1、决策树介绍 决策树是通过一系列规则对数据进行分类的过程。它提供一种在什么条件下会得到什么值的类似规则的方法。决策树分为分类树和回归树两种,分类树对离散变量做决策树,回归树对连续变量做决策树。 CART和C4.5支持数据特征为连续分布时的处理,主要通过使用二元切分来处理连续型变量,即求一个特定的值-分裂值:特征值大于分裂值就走左子树,或者就走右子树。这个分裂值的选取的原则是使得划分后的子树中...

thxiong1234的博客 9205

机器学习之决策树

1. 信息论基础 熵 信息量大小的度量,即表示随机变量不确定性的度量。 ​ H(p)=H(X)=−∑i=1npilog⁡piH(p)=H(X)=-\sum_{i=1}^{n}p_i\log p_iH(p)=H(X)=−∑i=1n​pi​logpi​ 联合熵 联合熵就是度量一个联合分布的随...

小黄鸡成长之路 433

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

决策树是通过一系列规则对数据进行分类的过程。它提供一种在什么条件下会得到什么值的类似规则的方法。决策树分为分类树和回归树两种,分类树对离散变量做决策树,回归树对连续变量做决策树。 近来的调查表明决策树也是最经常使用的数据挖掘算法,它的概念非常简单。决策树算法之所以如此流行,一个很重要的原因就是使用者基本上不用了解机器学习算法,也不用深究它是如何工作的。直观看上去,决策树分类器就像判断模块和终

u011089523的博客 8543

机器学习系列 07:决策树 02 - CART 算法

本内容将介绍决策树中的 CART 算法以及 Python 代码实现。其可用于分类和回归,具体实现包含分类树、回归树和模型树。

步入人工智能 815
上一篇: RPL协议仿真理解
下一篇: 《算力网络中高效算力资源度量方法》论文解读与实验复现
code120302
博客等级 码龄7年 195粉丝 38原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值