决策树

【机器学习】决策树特征 最近公司在培训,学习之余遇到的问题写篇博客记录下 文章内容来自其他博客以及个人理解 决策树可以用于分类也可以用于回归分析 分类决策树模型是描述实例的特征并分类的一种树形结构,结构分为内部节点和也节点,内部节点表示特征,叶节点表示结果 拿相亲来说,决策树模型就是下图这个,长方形为这个人的某个特征,内部节点就是这个长方形,是其特征;叶节点是椭圆,就是其得到的结果,是备胎还是值得考虑。而特征也是... 阅读详情

1.决策树的特点

   决策树是最常用的数据挖掘算法,可以方便的处理分类问题,概念简单,容易理解,而knn算法无法给出数据的内在含义(只是相似度的计算,不直观)。决策树组织的数据形式非常容易理解,也非常直观。决策树由决策结点、分支和叶子组成。决策树中最上面的结点为根结点,每个分支是一个新的决策结点,或者是树的叶子。每个决策结点代表一个问题或决策,通常对应于待分类对象的属性。每一个叶子结点代表一种可能的分类结果。沿决策树从上到下遍历的过程中,在每个结点都会遇到一个测试,对每个结点上问题的不同的测试输出导致不同的分支,最后会到达一个叶子结点,这个过程就是利用决策树进行分类的过程,利用若干个变量来判断所属的类别。

  引自《机器学习实战》:


 

 

2.决策树

 使用香农熵计算数据的无序程度,通过选取最佳划分特征维度进行子集划分,递归记录划分的特征维度及其取值的嵌套列表

1)decisiontree.py

from numpy import *
import operator
from math import log
import pickle
'''
创建测试数据集
'''


def create_dataset():
    # 注意这里的构造函数,array一般必须是相同类型的,这里不能采用这种初始化方式
    # dataset=array([[1,1,'yes'],[1,1,'yes'],[1,0,'no'],[0,1,'no'],[0,1,'no']])
    dataset = [[1, 1, 'yes'], [1, 1, 'yes'], [1, 0, 'no'], [0, 1, 'no'], [0, 1, 'no']]
    labels = ['no surfacing', 'flippers']

    return dataset, labels

'''
读取指定目录下的文件形成数据集
隐形眼镜数据集是非常著名的数据集,它包含了很多患者眼部状况的观察条件以及医生推荐的隐形眼镜类型。
隐形眼镜类型包括硬材质(hard)、软材质(soft)以及不适合佩戴隐形眼镜(no lenses)

* 特征有四个:age(年龄)、prescript(症状)、astigmatic(是否散光)、tearRate(眼泪数量)
* 隐形眼镜类别有三类(最后一列):硬材质(hard)、软材质(soft)、不适合佩戴隐形眼镜(no lenses)

'''
def readData(filepath):

    dataset=[]
    with open(filepath,'r') as fd:

         lines=fd.readlines()

         for str in lines:
             str=str.strip()
             dataset.append(str.split('\t'))

    labels=['age','prescript','astigmatic','tearRate']
    return dataset,labels

'''
计算香农熵sum(-p log2p) p:出现的次数除以总次数
'''


def cacuShannonEnt(dataset):
    # 计算总次数
    totoalCount = len(dataset)
    # 计算标签出现的次数
    labelCount = {}
    for row in dataset:
        if row[-1] not in labelCount:
            labelCount[row[-1]] = 0
        labelCount[row[-1]] += 1

    shannoent = 0.0

    for value in labelCount.values():
        p = value / totoalCount
        p = p * log(p, 2)
        shannoent -= p

    return shannoent


'''
获取指定测量维度等于指定值的元素列表
'''


def splitDatatSet(dataset, axis, value):
    retDataSet = []

    for data in dataset:

        # 指定维度的指定值的元素
        if data[axis] == value:
            retData = data[:axis]
            retData.extend(data[axis + 1:])
            retDataSet.append(retData)
    return retDataSet


'''
选择最好的划分,注意输入数据集为列表形式,最后一列为标签值,其他列是特征维度
'''


def chooseBestFeatureToSpilt(dataset):
    # 计算特征维度的个数
    featureCount = len(dataset[0]) - 1
    #计算基础香农熵
    baseShannoEnt=cacuShannonEnt(dataset)
    bestShannoEnt=0.0
    beatI=0
    # 循环每个特征维度
    for i in range(featureCount):
        #获取指定i列维度所有值列表
        featureValueList=[ row1[i]  for row1 in dataset]
        #去重
        featureValueSet=set(featureValueList)
        #对于本次划分计算所有可能值综合香农熵

        #按照i维度,然后该维度的不同取值,可以得到不同的集合划分,对这些集合计算香农熵并乘以其所占的权重比,最后求和
        #这样得出的就是本次划分的信息增益,然后选择信息增益最好的就是最好的划分。featureShannoEnt越小越好,infoShannoEnt越大越好。
        #数据越规整,香农熵越小, 反之,香农熵越大
        featureShannoEnt=0.0
        for featureValue in featureValueSet:
            #得到划分集合
            splitDataSet=splitDatatSet(dataset,i,featureValue)
            #在本次集合划分结果基础上计算香农熵
            featureShannoEnt+=(cacuShannonEnt(splitDataSet)*(len(splitDataSet)/float(len(dataset))))

        infoShannoEnt=baseShannoEnt-featureShannoEnt

        if infoShannoEnt>bestShannoEnt:
            bestShannoEnt=infoShannoEnt
            beatI=i
    return beatI


'''
选取出现次数最多的分类标签
'''

def majorityCnt(classList):

    classDict={}

    #统计出现的次数
    for vote in classList:

        if vote in classDict:

            classDict[vote]+=1
        else:
            classDict[vote]=1


    print(classDict.items())
    #按照出现的次数逆序排序
    sortClassDict=sorted(classDict.items(),key=operator.itemgetter(1),reverse=True)

    print('sortClassDict ',sortClassDict)

    return sortClassDict[0][0]

'''
构造决策树

构造方法:
    使用香农熵计算数据的无序程度,根据香农熵可以计算出最优的划分特征,
    根据最优划分特征及其不重复的值,可以获取到原数据集的多个子集,
    判断子集是否达到临界条件,1.集合中的元素都是同一种分类的的,比如[1,yes][2,yes],已经产生了分类
    2,当前集合已经没有分类的维度,且不是同一种分类,比如[yes][yes][no],这种返回出现成次数最多的,
    重复此过程,可以递归创建决策树,沿途记录最优判断特征维度及其值
输入:
    1)数据集,满足多个特征维度+一个分类
    2)对应特征维度的标签值
输出:
    最优特征维度及其值的嵌套字典,字典记录了一条搜索路径,叶子结点记录了这条搜索路径的最终结构,

    key:为特征维度,value:搜索结果或者子搜索路径
注意:
   1)啥时候需要新生成数据结构,啥时候需要传递数据结构的引用
   2)递归的边界条件
'''
def createTree(dataset,labels):

    #递归临界条件,树的孩子结点
    #取最后一列分类
    classList=[row[-1] for row in dataset]
    #比较第一个元素类型的个数和总个数是否相等,相等说明是同一种类型
    if classList.count(classList[0]) == len(classList) :
        #返回当前分类
        return classList[0]

    #判断是否已经没有分类维度了,只包含分类那一列了,返回出现次数最多的分类
    if len(dataset[0]) == 1:
        return majorityCnt(classList)

    #获取当前数据集合和标签列表的最优特征维度
    bestFeatureId=chooseBestFeatureToSpilt(dataset)

    #最优特征维度对应的标签值
    bestFeatureLabel=labels[bestFeatureId]

    #获取最优特征维度的不重复的特征值

    featureValuesList=[row[bestFeatureId] for row in dataset]

    featureValues=set(featureValuesList)

    #删除已经使用的特征值对应的标签值,获取子集,重置递归数据
    del(labels[bestFeatureId])
    #遍历特征值,获取特征维度和维度值的对应子集,递归创建决策树子节点

    #使用嵌套字典记录指定最优特征维度标签和最优特征维度值,对应的决策分类值

    tree1={bestFeatureLabel:{}}

    for featureValue in featureValues:

        #这里复制了类标签,因为要递归处理多个值,需要保持不同递归函数之间仅通过参数和返回值沟通,
        # 输出参数,对于不同递归函数,有些需要不变,这里通过复制,保持初始数据不受其他递归函数的影响
        subLables=labels[:]

        #注意,这里会新生成一个集合,原来集合不变
        subDataSet=splitDatatSet(dataset,axis=bestFeatureId,value=featureValue)

        tree1[bestFeatureLabel][featureValue]=createTree(subDataSet,subLables)

    return tree1


'''

使用决策树进行分类,不要求输入的标签一定与决策树构建的最优特征维度保持一致,但取值需要与原始创建的输入保持一致,不要求顺序

输入:

  tree:决策树
  labels:标签
  indx:测量数据
'''
def classify(tree,labels,indx):
    #取第一个属性值
    firstKey=list(tree.keys())[0]
    #取第二个字典,这里可能是单个值
    secondDict=tree[firstKey]
    #遍历第二个字典

    for key,value in secondDict.items():
        #获取决策树的特征维度对应的标签下标,进而找到测量数据这个维度的输入值
        #根据值递归走不同的树的分支
        if indx[labels.index(firstKey)]==key :
            if type(value).__name__=='dict' :
                classResult=classify(value,labels,indx)
            else:
                classResult=value
    return classResult


def saveTree(tree,filepath):

    with open(filepath,'wb') as fd:

       pickle.dump(tree,fd)


def loadTree(filepath):

    with open(filepath,'rb') as fd:

          return pickle.load(fd)



#dataset, lables = create_dataset()

#print(dataset, lables)

#shannoent = cacuShannonEnt(dataset)

#print(shannoent)

# dataset[0][-1]='no'

# shannoent=cacuShannonEnt(dataset)

# print(shannoent)

#print(splitDatatSet(dataset, 0, 1))

#dataset = [[1, 1, 'yes'], [1, 1, 'maybe'], [1, 0, 'maybe1'], [0, 1, 'maybe2'], [0, 1, 'no']]
#全是yes 0,4个yes 1个no 0.7219280948873623, 3个yes 2个no  0.9709505944546686 ,1个yes 1个maybe 3个no 1.3709505944546687
#2个yes 1个maybe 3个no 1.5219280948873621 全部都不一样!!!2.321928094887362
#数据越规整(该维度作为标准,区分不同分类的效果更好),香农熵越小, 反之,香农熵越大
#print(cacuShannonEnt(dataset))

#tree=createTree(dataset,lables)
#print(tree)


绘制决策树

2)treeplotter.py

import matplotlib.pyplot as plt
import decisiontree as dtree
'''
 绘制决策树
'''

#定义格式
#节点格式
decisionNode=dict(boxstyle='sawtooth',fc='0.8')
#叶节点格式
leafNode=dict(boxstyle='round4',fc='0.8')
#箭头格式
arrow_args=dict(arrowstyle='<-')

def createPlot(inTree):
    fig = plt.figure('决策树')
    fig.clf()

    axprops = dict(xticks=[], yticks=[])# 定义横纵坐标轴,无内容
    #createPlot.ax1 = plt.subplot(111, frameon=False, **axprops) # 绘制图像,无边框,无坐标轴
    createPlot.ax1 = plt.subplot(111, frameon=False)
    plotTree.totalW = float(getNumLeafs(inTree))   #全局变量宽度 = 叶子数
    plotTree.totalD = float(getTreeDepth(inTree))  #全局变量高度 = 深度
    #图形的大小是0-1 ,0-1
    plotTree.xOff = -0.5/plotTree.totalW;  #例如绘制3个叶子结点,坐标应为1/3,2/3,3/3
    #但这样会使整个图形偏右因此初始的,将x值向左移一点。
    plotTree.yOff = 1.0;
    plotTree(inTree, (0.5,1.0), '')

    plt.show()



def plotTree(myTree, parentPt, nodeTxt):
    numLeafs = getNumLeafs(myTree)  #当前树的叶子数
    depth = getTreeDepth(myTree) #没有用到这个变量
    firstStr = list(myTree.keys())[0]
    #cntrPt文本中心点   parentPt 指向文本中心的点
    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]
    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:   #打印叶子结点
            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.0/plotTree.totalD

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, va="center", ha="center", rotation=30)



'''
实际绘制函数
nodeTxt:节点文本
centerPl:节点文本位置
parentPl:线的开始位置
nodetype:节点类型
'''
def  plotNode(nodeTxt,centerPl,parentPl,nodeType):
    createPlot.ax1.annotate(nodeTxt,xy=parentPl,xycoords='axes fraction',xytext=centerPl,
                 textcoords='axes fraction',va='center',ha='center',bbox=nodeType,arrowprops=arrow_args)


'''
获取叶子节点的个数
'''

def getNumLeafs(tree):

    #如果是遍历到叶子节点
    if type(tree).__name__!='dict' :

        return 1

    leafNodeCount=0

    for value in tree.values():

        leafNodeCount+=getNumLeafs(value)

    return leafNodeCount

'''
获取树的深度
'''
def getTreeDepth2(tree):
    # 如果是遍历到叶子节点,只有一个节点,算1
    if type(tree).__name__ != 'dict':
        return 1

    maxTreeDepth = 0

    #递归获取所有子节点的深度,取最大的那个
    for value in tree.values():
        childTreeDepth=getTreeDepth(value)
        if childTreeDepth > maxTreeDepth :
            maxTreeDepth=childTreeDepth

    keysList=[key for key in tree.keys()]


    #这里需要区分下{'flippers': {0: 'no', 1: 'yes'}} 和{0: 'no', 1: 'yes'},虽然都是字典类型,前面这种就能算一个节点
    #所以可以在得到所有子节点的最大深度+1
    if type(list(tree.keys())[0]).__name__=='str':
       return maxTreeDepth+1
    else:
       return maxTreeDepth


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


#createPlot()

dataset,labels = dtree.create_dataset()

print(dataset,labels)

#注意这里会改变输入数据的值,因为传入的是引用,del(labels[bestFeatureId]),这里应该传入list(x)
tree=dtree.createTree(dataset,list(labels))

print(tree)


#print(getNumLeafs(tree))


#print(getTreeDepth(tree))


print('不能露出水面且脚上有蹼,是否为鱼?')

classResult=dtree.classify(tree,labels,[1,1])

print(classResult)


print('可以露出水面且脚上有蹼,是否为鱼?')

classResult=dtree.classify(tree,labels,[0,1])

print(classResult)

#绘制决策树
#createPlot(tree)
#winows文件路径需要用'//',不能用'\'
path='D://software//python//output//tree.txt'

dtree.saveTree(tree,path)

print(dtree.loadTree(path))

3.绘制效果




决策树分类判断:




4.决策树的应用:预测眼镜的类型


import decisiontree as dtree
import treePlotter as tplt


path='\machinelearninginaction\Ch03\lenses.txt'

dataset,labels=dtree.readData(path)

print(dataset,labels)

#注意这里会改变输入数据的值,因为传入的是引用,del(labels[bestFeatureId]),这里应该传入list(x)
tree=dtree.createTree(dataset,list(labels))

print(tree)

#绘制决策树
tplt.createPlot(tree)




5.决策树的特点

  如果匹配项太多,会引起“过度匹配”问题。这时候我们可以采用“裁剪”的方法,去掉一些不必要的叶子节点。如果叶子只能增加少许信息,则可以去掉该叶子节点或者跟其他叶子节点合并。这里使用的ID3算法无法处理数值型数据,尽管可以把数值型数据转化成标称类数据,但可能会产生太多划分,ID3算法会无法处理。ID3算法是一种贪心算法,用来构造决策树。ID3算法起源于概念学习系统(CLS),以信息熵的下降速度为选取测试属性的标准,即在每个节点选取还尚未被用来划分的具有最高信息增益的属性作为划分标准,然后继续这个过程,直到生成的决策树能完美分类训练样例。也可以采用CART算法构造决策树。








决策树模型及案例(Python) 目录 1 决策树模型简介 2 Gini系数(CART决策树) 3信息熵、信息增益 4决策树模型代码实现 4.1分类决策树模型(DecisionTreeClassifier) 4.2回归决策树模型(DecisionTreeRegressor) 5案例:员工离职预测模型 5.1模型搭建 5.1.1数据读取与预处理 5.1.2提取特征变量和目标变量 5.1.3划分训练集与测试集 5.1.4模型搭建及训练 5.1.5代码汇总 5.2模型预测及评估 5.2.1直... 阅读详情

相关推荐

R语言——决策树模型

        决策树(Tree Nodels)是一种创建树状模型的方法,它使用‘基尼不纯度’(Gini Impurity)或信息增益(Information Gain)等标准对节点进行递归分割,以创建树状模型。决策树看起来像是以树状形式排列的一系列的if-else语句,易于理解,执行速度快。并且,它能够很好地表现多个特征之间的相互作用,适用于多种数据类型。(树状模型中,随机森林性能表现卓越) ...

RH_Wang的博客 3万+

机器学习——决策树

1 基本流程 决策树(decision tree)是一类常见的机器学习方法. 一般的,一棵决策树包含一个根结点、若干个内部结点和若干个叶结点;叶结点对应于决策树结果,其他每个结点则对应于一个属性测试;每个结点包含的样本集合根据属性测试的结果被划分到子结点中;根结点包含样本全集。从根结点到每个叶结点的路径对应了一个判定测试序列。 决策树的学习目的是为了产生一棵泛化能力强,即处理未见示例能力强的决策树...

xiao_lxl的专栏 3496

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

机器学习专题系列

wangyutao12345的博客 5187

读周志华《机器学习》第四章--决策树

目录一、决策树1.1原理 1.2决策树的特点 1.3决策树的三种基本类型 二、ID3(信息增益)算法 2.1信息熵 2.2条件熵 2.3信息增益详解3. ID3算法缺点 三、C4.5算法(分类树)1.信息增益率 2.剪枝 2.1 预剪枝2.2后剪枝 3.缺点四、CART算法 (分类树)4.1.连续特征处理 4.2.离散特征处理4.3.基尼指数(分类树)决策树:从训练数据中学习得出一个树状结构的模型。就相当于这种树状模型。 ......

qq_40694323的博客 1974

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

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

qq_34357269的博客 8772

决策树模型——鸢尾花分类

构建一个决策树分类模型,实现对鸢尾花的分类 1.lris数据集介绍: 鸢尾花数据集是机器学习领域中非常经典的一个分类数据集。数据集全名为:Iris Data Set,总共包含150行数据。 每一行由4个特征值及一个目标值(类别变量)组成。 其中4个特征值分别是:萼片长度、萼片宽度、花瓣长度、花瓣宽度 目标值为3种不同类别的鸢尾花:山鸢尾、变色鸢尾、维吉尼亚鸢尾 2.读取数据 Iris...

pillow的博客 2万+

决策树-特征属性选择划分

决策树(Decision tree)是一个树结构(可以是二叉树或非二叉树)。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个输出类别。使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。 目的是保证节点的纯度越来越高,划分样本的能力越强 信息熵越小,纯度越高 信息增益越大,纯度越高 基尼系数越小,纯度越高 信息熵(Entro...

数据掘金 1万+

Python决策树模型的基本原理和参数调优【附代码】

下图所示为一个典型的决策树模型:员工离职预测模型的简单演示。该决策树首先判断员工满意度是否小于5,答案为“是”则认为该员工会离职,答案为“否”则接着判断其收入是否小于10,000元,答案为“是”则认为该员工会离职,答案为“否”则认为该员工不会离职。这里。

weixin_60476982的博客 4925

统计学习方法学习笔记-决策树(一)之如何进行特征选择

决策树模型概述 决策树(decision tree)是一个树结构(可以是二叉树或非二叉树)。 其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。 使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。 决策树可以表示如下 当我们构建好一个决策树后,我们就可以根据特征的取值来判断一个待分类项的类别 举个例子 现在有一个西瓜 它的纹理很清晰,根蒂稍蜷,色泽乌黑

qq_44822951的博客 5335

决策树模型(R语言)

R语言中最常用于实现决策树的有两个包,分别是rpart包和party包,其区别如下: rpart包的处理方式:首先对所有自变量和所有分割点进行评估,最佳的选择是使分割后组内的数据更为“一致”(pure)。这里的“一致”是指组内数据的因变量取值变异较小。rpart包对这种“一致”性的默认度量是Gini值。确定停止划分的参数有很多(参见rpart.control),确定这些参数是非常重要而微妙的,因...

X_dmword的博客 7041

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

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

chunyang的博客 3613

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

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

lys_828的博客 4万+

决策树模型(Decision Tree)

P1P_1P1​:表一种类别的数据占总数居的比例。P01−P1P0​1−P1​:表示除了P1P_1P1​类别以外的其他数据占总数据的比例。

SoyMilk的博客 3495

用通俗易懂的方式讲解:决策树模型及案例(Python 代码)

基本原理是通过对一系列问题进行if/else的推导,最终实现相关决策。决策树模型的一个实例:决策树的概念并不复杂,主要是通过连续的逻辑判断得出最后的结论,其关键在于如何建立这样一棵“树”。

Python数据挖掘 2万+

如何设计一个低代码平台

近些年来,低代码发展火热,各种低代码平台如雨后春笋纷纷崛起,这些平台各定位不同,优劣不同,用户的选择空间很大。那么,如果用户想从零开始设计一个低代码平台,该如何做呢?

Jarod_Chou的博客 8260

VMware ESXi +DELL虚拟化存储磁盘容量处于紧急状态问题的处理

1、环境介绍 exsi server两台(DELL R730 ): 192.168.3.206 VMware EXSi6.5 192.168.3.207 VMware EXSi6.5 磁盘存储柜一台(DELL SC2000): 192.168.3.208 2、故障处理 由于前期规划的卷空间过大,虚拟机文件逐年增大以后,造成卷的磁盘占用过与整个磁盘空间的容量,虚拟化平台可用容量爆掉,DELL SC2000自动切换到紧急状态,禁止所有磁盘I/O,exsi主机上的虚拟机无法开机 首先,安装

wolf1105的博客 3533

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

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

qq_41698317的博客 3529

vmware vsphere 证书过期告警处理方法

vSphere Clinet 管理页面出现“证书告警” ,检查证书未发现现有证书有过期现象

m0_51902127的博客 3639

决策树模型

今天我们来复习决策树模型,并用项目教大家快速了解决策树模型,我会将大家编写代码中常见的错误点在代码注释中指出,希望不会浪费大家的时间,高效学习以上就是今天要讲的内容,本文仅仅简单介绍了决策树模型的推导与实现,还有一些其他的优化决策树模型的方法但本文主旨是便于大家复习模型,就不再赘述以上所有代码在Github仓库。

2403_85773052的博客 1298

【Unity】Pico VR 开发实战:从环境搭建到交互实现

本文是一份详细的Unity Pico VR开发实战指南,涵盖从环境搭建到核心交互实现的全流程。详细讲解了如何集成Pico Unity Integration SDK与XR Interaction Toolkit,配置开发环境,并重点解析了手柄输入处理、射线交互以及VR UI操作三大核心模块的代码实现与优化技巧,帮助开发者快速上手Pico VR应用开发。

rice5的博客 1176

100天精通Python(爬虫篇)——第122天:基于selenium接管已启动的浏览器(反反爬策略)

100天精通Python(爬虫篇)——第122天:基于selenium接管已启动的浏览器(反反爬策略)

努力让自己发光,对的人才能迎着光而来 13万+

Decision Tree Model|决策树模型

本文介绍了决策树模型的基本概念和应用实例。决策树通过一系列条件判断对数据进行分类或回归预测,以猫分类为例,展示了决策树从根节点到叶节点的分类过程。文章还比较了四种基于相同特征集但结构不同的决策树,分析其差异原因(数据划分、特征重要性、随机性等),并指出评估决策树优劣的标准包括准确率、泛化能力和解释性。最后建议实践中可采用集成学习方法提升模型性能。更多计算机知识欢迎访问作者博客网站rn.berlinlian.cn。

m0_74462934的博客 1935

2025年最新雷电模拟器9.22安装Magisk面具和LSPosed框架完整图文教程 文章末尾附所需软件下载

操作环境:雷电模拟器9.0.22 虚拟系统版本android 91、设置-其他设置-Root权限-开启2、设置-性能设置-System.vmdk可写入3、安装Magisk-18a0b94a-delta(25205).apk,运行并给予root权限4、选择右上角安装弹出“允许“magisk Delta”访问您设备上的照片、媒体内容和文件吗?“选择允许,然后结束magisk进程。5、从新运行magisk选择右上角安装-选择修补boot镜像中的vbmeta和安装到Recovery。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 7105

【海量数据挖掘/数据分析】之 决策树模型(决策树模型、决策树构成、决策树常用算法、决策树性能要求、信息增益、信息增益计算公式、决策树信息增益计算实例)

【海量数据挖掘/数据分析】之 决策树模型(决策树模型、决策树构成、决策树常用算法、决策树性能要求、信息增益、信息增益计算公式、决策树信息增益计算实例) 一、决策树模型 1、常用算法 2、属性划分策略 3、其他算法 三、决策树算法性能要求 四、 决策树模型创建 ( 递归创建决策树 ) 1 、 决策树模型创建 2 、 决策树创建算法 ( 递归 ) 3 、 递归操作 4 、 递归停止的条件 五、 决策树 树根属性 选择 六、信息增益 说明 1、 熵 和 信息 的数据组成 2 、 信息增

仙魁XAN 1万+

UE实现贴地线(SurfaceLine)效果

UnrealEngine实现贴地线效果

专注GIS开发 4572

Qt —— 在Win11下“Qt for Android“开发环境,通过USB在真机(华为Meta60 PRO)上调试运行,并打包APK并在真实手机运行

Qt —— 在Win11下“Qt for Android“开发环境,打包APK并在真实手机运行

315
上一篇: knn算法(2)
下一篇: 基于概率论进行分类
东方欲晓888
博客等级 码龄11年 2粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值