最新文章专题视频专题关键字专题TAG最新wkwk2 wk1wk3wk4wk5wk6wk7wk8bk22bk21bk23bk24bk25bk26bk27bk28bk29wk9视频文章

相关视频:4.4.9 Calculate函数的使用介绍 【 播放不了点此报错 】

calculable

强烈推荐相关阅读文章:案例教程| 从头开始新开始:用Python进行管理决策树优化算法优化算法

源于Machine Learning Mastery写作者:Jason Brownlee设备的心编译程序步骤参加:沈泽江、吴攀

管理决策树优化算法优化算法是一个强悍的预测剖析方法 ,它十分离行。由于她们的实体线模型可以让初专家学者易如反掌自然地了解手和权威性专家相同爱好,因而她们较为流行。此外,最又转化作的管理决策树优化算法可够描述作出特殊预测剖析的确切原因,这使她们在具体运用中深受青睐。

此外,管理决策树优化算法优化算法也为高些級的集明成化实体线模型(如 bagging、神经系统软件体细胞互连接网络及 gradient boosting)提供了基础。

在这儿篇案例教程中,你可能重零新开始,学习培训怎样用 Python 进行《Classification And Regression Tree algorithm》中常说的內容。

在学好此案例教李云杰后,你可能了解:

怎样测算并评价数据信息内容中地备选切分点(Candidate Split Point)当在哪儿管理决策树优化算法结构总排名分配这种切分点当在哪儿具体难点中运用这种归类和重回优化算法

一、概述

这节简易详细介绍了有关归类及重回树(Classification and Regression Trees)优化算法的一些內容,并得出了将在本案例教程中运用的钞票数据信息内容(Banknote Dataset)。

1.1 归类及重回树

归类及重回树(CART)是由 Leo Breiman 明确提出的一个技术专业术语,用以描述一种能被用以归类或者重回预测剖析实体线模型难点的重回树优化算法。

大家儿将在本案例教程中关村键探讨 CART 在归类难点上的运用。

二叉排序树(Binary Tree)是 CART 实体线模型的意味着其一。这儿常说的二叉排序树,与优化算法设计方案和优化算法里边常说的二叉排序树十分相仿,沒有什么独特的地区(每一个连触点可殊不知有 0、1 或 2 身高连触点)。

每一个连触点泡荼叶连锁店连触点上有一个键入自变量被传入,并根据一些自变量被归类(大家儿假设该自变量是数值型的)。树的叶连触点(别称为终端设备设备连触点,Terminal Node)由輸出自变量构成,它被用以进行预测剖析。

在树被建立进行以后,每一个新的数据信息内容样版都将依照每一个连触点的切分标准,顺着该树从顶部往下,直到輸出一个最终管理决策。

建立并求归类树具体上是一个切分键入屋内空间的全过程。递归算法二元化归类(Recursive Binary Splitting)是一个被用以切分房间内空间的贪婪优化算法。这具体上是某数值全过程:当五系列商品的键入值被排序以后,它将试着五系列商品的切分点,检验她们归类完了成本费涵数(Cost Function)的值。

有最好成本费涵数(一般 是最少的成本费涵数,由于大家儿通常希望该值最少)的切分点可能被选择。根据贪婪法(greedy approach)标准,全部的键入自变量和全部可能的切分点都将被检验,并会根据她们成本费涵数的主要表现获评定。(译员注:下面概述对重回难点和归类难点常见的成本费涵数。)

重回难点:对落在切分点明确地区内全部的样版取粗差平方米和(Sum Squared Error)。归类难点:一般 采用艾芘成本费涵数(Gini Cost Function),它可以说明被切分以后每一个连触点的纯纯净度(Node Purity)怎样。在其中,连触点纯纯净度就是类说明每一个连触点归类后训练数据信息内容掺杂水准的指数值。

切分将两竖进行,直到每一个连触点(归类后)都只含有最少数量的训练样版或者树的深层达来到较大值。

1.2 Banknote 数据信息内容

Banknote 数据信息内容,需叫大家儿根据对钞票照片一些特点的剖析,来预测剖析该钞票的真伪。

该数据信息内容中含有 1372 个样版,每一个样版由 5 数量值型自变量构成。它是并求归类难点。以下列举 5 个自变量的喻意及数据信息内容特点:

1. 图像经小波变换变换后的标准差(Variance)(持续值)

2. 图像经小波变换变换后的偏度(Skewness)(持续值)

3. 图像经小波变换变换后的峰度(Kurtosis)(持续值)

4. 图像的熵(Entropy)(持续值)

5. 钞票隶属种类(整数金额,离散变数值)

以下是数据信息内容前十名数量据信息内容的样版。

3.6216,8.6661,-2.8073,-0.44699,0

4.5459,8.1674,-2.4586,-1.4621,0

3.866,-2.6383,1.9242,0.10645,0

3.4566,9.5228,-4.0112,-3.5944,0

0.32924,-4.4552,4.5718,-0.9888,0

4.3684,9.6718,-3.9606,-3.1625,0

运用零标准优化算法(Zero Rule Algorithm)来预测剖析最常常出現现种类的状况(译员注:也便是寻找最常常出現现的一种样版,随后预测剖析全部的样版全是这种种类),对该问的标准精准大概是 50%。

你可以在这儿儿完全免费下载并把握很多有关这猜数接到条的內容:UCI Machine Learning Repository。

马上完全免费下载该数据信息内容,放入你现如今的工作中文件目录,并再度取名通篇件为 data_banknote_authentication.csv。

二、案例教程

本案例教程分为四绝大大部分大部分数:

1. 对艾芘指数值(Gini Index)的详细介绍

2.(怎样)建立切分点

3.(怎样)转化作树实体线模型

4.(怎样)运用实体线模型进行预测剖析

5. 对钞票数据信息内容的案例科学研究研究

这种步骤能帮你做好基础,给你能臭狗从零新开始进行 CART 优化算法,可以将它应采用你非空子集的预测剖析实体线模型难点中。

2.1 艾芘指数值

艾芘指数值能一个种评定数据信息内容切分点优劣的成本费涵数。

数据信息内容的切分点是有关键入中某一特点的切分。大部分据信息内容中某一样版而言,切分以后根据某阀值对该样版对隶属于性的值进行归类。他能根据训练集抽出来現的方式将数据信息内容分为几类别。

艾芘指复根据计记切分点建立的两个种类齐数据信息内容种类的掺杂水准,来主要表现切分点的优劣。一个完美丽的切分点相匹配的艾芘指数值为 0(译员注:即在一种中不非常容易出現另一个类的数据信息内容,每一个类全是「纯」的),而最烂的切分点的艾芘指数值则为 1.0(针对三分难点,每个类抽出来現另一个类数据信息内容的占有率都为 50%,也便是数据信息内容彻底未能被根据种类不同样区别离出来)。

下面大家儿根据一个具体的事例来说明怎样测算艾芘指数值。

大家儿有两2组据,每一组是二行。一2组据中全部列里隶属于种类 0(Class 0),最后2组据中全部的列里隶属于种类 1(Class 1)。它是一个完美丽的切分点。

最先大家儿要按住照式测算每2组据中各浪够数据信息内容的占有率:

proportion = count(class_value) / count(rows)

那麼,对丝脉而言,相对性的占有率为:

group_1_class_0 = 2 / 2 = 1group_1_class_1 = 0 / 2 = 0group_2_class_0 = 0 / 2 = 0group_2_class_1 = 2 / 2 = 1

艾芘指数值依照以下测算方法 :

gini_index = sum(proportion * (1.0 - proportion))

将丝脉中全部组、全部利数据信息内容的占有率送至所述公式计算:

gini_index = (group_1_class_0 * (1.0 - group_1_class_0)) +(group_1_class_1 * (1.0 - group_1_class_1)) +(group_2_class_0 * (1.0 - group_2_class_0)) +(group_2_class_1 * (1.0 - group_2_class_1))

解方程组,得:

gini_index = 0 + 0 + 0 + 0 = 0

以下是一个称为 gini_index() 的涵数,它可以测算给直线据的艾芘指数值(组、种类都以文件目录(list)的方法得出)。在其中一些优化算法鲁棒性检验,可以防止对空组除于 0 的状况。

# Calculate the Gini index for a split datasetdef gini_index(groups, class_values):gini = 0.0for class_value in class_values:for group in groups:size = len(group)if size == 0:continueproportion = [row[-1] for row in group].count(class_value) / float(size)gini += (proportion * (1.0 - proportion))return gini

大家儿可以根据上例来检验该涵数的运行状况,还可以检验最烂切分点的状况。详细的编号以下:

# Calculate the Gini index for a split datasetdef gini_index(groups, class_values):gini = 0.0for class_value in class_values:for group in groups:size = len(group)if size == 0:continueproportion = [row[-1] for row in group].count(class_value) / float(size)gini += (proportion * (1.0 - proportion))return gini# test Gini valuesprint(gini_index([[[1, 1], [1, 0]], [[1, 1], [1, 0]]], [0, 1]))print(gini_index([[[1, 0], [1, 0]], [[1, 1], [1, 1]]], [0, 1]))

运行该编号,可能复印两个艾芘指数值,在其中首位位相匹配的是最烂的状况为 1.0,下一个相匹配的是最好是的状况为 0.0。

1.00.0

2.2 建立切分点

一个切分点由数据信息内容中的一个特点和一个阀值构成。

大家儿可以将其小结成双给出的特点明确一个切分数据信息内容的阀值。它就是类至公有制效的归类数据信息内容的方法 。

建立切分点包含3个步骤,在其中最先已在预估艾芘指数值的有部分探讨过。剩下两有部分各自为:

1. 切分数据信息内容。

2. 评价全部(上仁扬的)切分点。

大家儿具体看看下每一个步骤。

2.2.1 切分数据信息内容

切分数据信息内容意味着着大家儿给直线据某特点(或其坐落到特点文件目录中的下列)及相对性阀值的状况下,将数据信息内容分为两个有部分。

如果数据信息内容被分为两有部分,大家儿就可以运用艾芘指数值来评定该切分的成本费涵数。

切分数据信息内容务必对每1数量据信息内容进行迭代更新,根据每1数量集聚点相隶属于性的值与阀值的规格型号规格状况将该数集聚点放入相对性的有部分(相匹配树结构中的左叉与右叉)。

以下是一个做为 test_split() 的涵数,它能进行所述作用:

# Split a dataset based on an attribute and an attribute valuedef test_split(index, value, dataset):left, right = list(), list()for row in dataset:if row[index] < value:left.append(row)else:right.append(row)return left, right

编号還是是非十分简易的。

注意,在编号中,特点值超过或相当于阀值的数集聚点被归类来到右组里。

2.2.2 评价全部切分点

在艾芘涵数 gini_index() 和归类涵数 test_split() 的帮助下,大家儿可以新开始进行评定切分点的步骤。

对给出的数据信息内容,对每一个特点,大家儿务必检查全部的可能的阀值使之做为备选切分点。随后,大家儿将根据这种切分点的成本费(cost)对其进行评定,最终筛选最初色的切分点。

当最好切分点被寻找以后,大家儿就可用它做为大家儿管理决策树优化算法中的一个连触点。

而这也便是太平调了的穷举型贪婪优化算法。

在该例中,大家儿将运用一个词典来代决定策树优化算法中的一个连触点,它可以依照自变量名存储数据信息内容。当选择了最好切分点并运用它做为树的新连触点时,大家儿存到对隶属于性的标识符、对需切分值及根据切分值切分后的两有部考試成绩据信息内容。

切分后地每个2组据全是一个更小运营规模运营人地关系数据信息内容(可以再度进行切分具体操运姿势),它具体上便是初始记录集聚地数据信息内容依照切分点被分作到左叉或右叉的数据信息内容。你可以想像大家儿可以更进一步一歩将每个2组据分完割,持续循环系统软件直到创设出全部管理决策树优化算法。

以下是一个做为 get_split() 的涵数,它能进行所述的步骤。你能发现,它分析xml了每一个特点(除了种类值)以及特点相匹配的每10的阶乘,在每个次迭代更新中它全是切分数据信息内容并评定该切分点。

当全部的检查过成后,最初色的切分过关斩将被记录并返回。

# Select the best split point for a datasetdef get_split(dataset):class_values = list(set(row[-1] for row in dataset))b_index, b_value, b_score, b_groups = 999, 999, 999, Nonefor index in range(len(dataset[0])-1):for row in dataset:groups = test_split(index, row[index], dataset)gini = gini_index(groups, class_values)if gini < b_score:b_index, b_value, b_score, b_groups = index, row[index], gini, groupsreturn {'index':b_index, 'value':b_value, 'groups':b_groups}

大家儿能在一个中小型生成的数据信息内容上去检验这种涵数以及全部数据信息内容切分的全过程。

X1 X2 Y2.771244718 1.784783929 01.728571309 1.169761413 03.678319846 2.81281357 03.961043357 2.61995032 02.999208922 2.209014212 07.497545867 3.162953546 19.00220326 3.339047188 17.444542326 0.476683375 110.12493903 3.234550982 16.642287351 3.319983761 1

此外,大家儿可以运用不同样色调标识不同样的类,将该数据信息内容制图出来。由图获知,大家儿可以从 X1 轴(即图上的 X 轴)上挑出来10的阶乘来切分该数据信息内容。

案例全部的编号融合以下:

# Split a dataset based on an attribute and an attribute valuedef test_split(index, value, dataset):left, right = list(), list()for row in dataset:if row[index] < value:left.append(row)else:right.append(row)return left, right# Calculate the Gini index for a split datasetdef gini_index(groups, class_values):gini = 0.0for class_value in class_values:for group in groups:size = len(group)if size == 0:continueproportion = [row[-1] for row in group].count(class_value) / float(size)gini += (proportion * (1.0 - proportion))return gini# Select the best split point for a datasetdef get_split(dataset):class_values = list(set(row[-1] for row in dataset))b_index, b_value, b_score, b_groups = 999, 999, 999, Nonefor index in range(len(dataset[0])-1):for row in dataset:groups = test_split(index, row[index], dataset)gini = gini_index(groups, class_values)print('X%d < %.3f Gini=%.3f' % ((index+1), row[index], gini))if gini < b_score:b_index, b_value, b_score, b_groups = index, row[index], gini, groupsreturn {'index':b_index, 'value':b_value, 'groups':b_groups}dataset = [[2.771244718,1.784783929,0],[1.728571309,1.169761413,0],[3.678319846,2.81281357,0],[3.961043357,2.61995032,0],[2.999208922,2.209014212,0],[7.497545867,3.162953546,1],[9.00220326,3.339047188,1],[7.444542326,0.476683375,1],[10.12493903,3.234550982,1],[6.642287351,3.319983761,1]]split = get_split(dataset)print('Split: [X%d < %.3f]' % ((split['index']+1), split['value']))

提高后的 get_split() 涵数可以輸出每一个切分点以及相匹配的艾芘指数值。

运行以上的编号后,它将 print 全部的艾芘指数值以及选定的最好切分点。在这儿案例中,它选定了 X1<6.642 做为最终完便士割点(它相匹配的艾芘指数值为 0)。

X1 < 2.771 Gini=0.494X1 < 1.729 Gini=0.500X1 < 3.678 Gini=0.408X1 < 3.961 Gini=0.278X1 < 2.999 Gini=0.469X1 < 7.498 Gini=0.408X1 < 9.002 Gini=0.469X1 < 7.445 Gini=0.278X1 < 10.125 Gini=0.494X1 < 6.642 Gini=0.000X2 < 1.785 Gini=1.000X2 < 1.170 Gini=0.494X2 < 2.813 Gini=0.640X2 < 2.620 Gini=0.819X2 < 2.209 Gini=0.934X2 < 3.163 Gini=0.278X2 < 3.339 Gini=0.494X2 < 0.477 Gini=0.500X2 < 3.235 Gini=0.408X2 < 3.320 Gini=0.469Split: [X1 < 6.642]

即然大家儿如今早已可以寻找数据信息内容中最初色的切分点,儋州市伙儿如今就探讨一下大家儿能怎样运用它来建立一个管理决策树优化算法。

2.3 转化作树实体线模型

建立树的根连触点(root node)是较为方便快捷的,可以开启 get_split() 涵数并传入全部数据信息内容即做到到此目的。但向树中增提堆量的连触点则较为趣味性。

建立树结构关键分为3个步骤:

1. 建立终端设备设备连触点

2. 递归算法地切分

3. 创设整棵树

2.3.1 建立终端设备设备连触点

大家儿务必管理决策什么时候停止树的「提高」。

大家儿可以用两个标准进行操纵:树的深层和每一个连触点切分后的数集聚点数量。

最花草树木深层:这意味着了树中从根连触点算起连触点数量地限定。如果树中的连触点树达来到这以确界,则优化算法可能停止切分数据信息内容、增拆换的连触点。更神的树会更加繁杂,也更有可能过线形拟合训练集。

最少连触点记录数:它是某连触点切分数据信息内容后分个有部考試成绩据信息内容数量的很小值。如果做到或小于该很小值,则优化算法可能停止切分数据信息内容、增拆换的连触点。将数据信息内容分为仅有很非常少数集聚点的两个有部分的切分连触点被觉得太具目的性,并很有可能过线形拟合训练集。

这两个方法 根据顾客给出的主要参数,参加进树实体线模型的搭建全过程中。

此外之外,此外也有一个状况。优化算法有可能选择一个切分点,切分数据信息内容后全部的数据信息内容都被切分到同样一个组(也便是左叉、右叉仅有一个支系住边了解据信息内容,另1各个支系沒有)。在这儿样的状况下,由于在树的另1各个分岔沒了解据信息内容,大家儿不可以再度大家儿的切分与加上连触点的工作中。

根据所述內容,大家儿早现有一个些停止树「提高」的辨别管理体系。当树在某一连触点停止提高的状况下,该连触点被称呼之终端设备设备连触点,并被用以进行最终预测剖析。

预测剖析的全过程是根据选择组判定剖析值进行的。当分析xml树进记到最终连触点切分后的数据信息内容组里,优化算法可能选择这终状况中最普遍出現的值做为估计值。

以下是一个做为 to_terminal() 的涵数,对每1组收据它都能选择一个判定剖析值。他可以返回五系列商品数集聚选定最普遍出現的值。

# Create a terminal node valuedef to_terminal(group):outcomes = [row[-1] for row in group]return max(set(outcomes), key=outcomes.count)

2.3.2 递归算法切分

在把握了怎样及什么时候建立终端设备设备连触点后,大家儿如今可以新开兴建立树实体线模型了。

建立树地实体线模型,需叫大家儿对给出的数据信息内容持续开启以上界定的 get_split() 涵数,持续建立树中的连触点。

在已竹贵些下加上的新连触点称为子连触点。对树中的随意连触点而言,它可能沒无子连触点(则该连触点为终端设备设备连触点)、1身高连触点(则该连触点可以立即进行预测剖析)或三身高连触点。在程序步骤中,在表明某连触点的词典中,大家儿将一棵花草树木的两子连触点取名叫 left 和 right。

如果一个连触点被建立,大家儿就可以递归算法地对在该连触点被切分获得的三身高等数学据信息内容上切启同样的涵数,来切分子数据信息内容乡亭立新的连触点。

以下是一个进行该递归算法全过程的涵数。它的弄进驻要参数包含:某一连触点(node)、最花草树木深层(max_depth)、最少连触点记录数(min_size)及现如今树深层(depth)。

显而易见,一运行该涵数时,根连触过关斩将被传入,现如今深数为 1。涵数的作按分为以下两步:

1. 最先,该连触点切分的两有部考試成绩据信息内容将被获取下来便于运用,此外数据信息内容将被在连接选定删除(伴随着切职责分工作中的逐渐进电动式机行,之前的连触点无需再运用相对性的数据信息内容)。

2. 随后,大家儿可能检查该连触点的左叉及右叉的数据信息内容是不是为空。假如是,则其可能建立一个终端设备设备连触点。

3. 此外,大家儿会检查是不是抵达了较大深层。假如是,则其可能建立一个终端设备设备连触点。

4. 随后,大家儿将对左子连触点更进一步一歩具体操运姿势。若该2组据数量小于阀值,则会建立一个终端设备设备连触点并停止更进一步一歩具体操运姿势。不然它可能以一种深层优先选择的方法建立并加上连触点,直到该分岔做究竟端。

5. 对右子连触点相同进行所述具体操运姿势,持续提高连触点直到做到终端设备设备连触点。

2.3.3 创设整棵树

大家儿将全部的內容融合到一块。

建立一棵花草树木包含建立根连触点及递归算法地开启 split() 涵数来持续切分数据信息内容以搭建整棵树。

以下是进行所述作用的 bulid_tree() 涵数的简单化版本号。

# Build a decision tree

defbuild_tree(train,max_depth,min_size):

root=get_split(dataset)

split(root,max_depth,min_size,1)

returnroot

大家儿可以在以所述的合折数据信息内容上检验全部全过程。以下是详细的案例。

在这儿在其中还包含了一个 print_tree() 涵数,它可以递归算法地某列一个地复印出来管理决策树优化算法的连触点。经历它复印的并不是一个显著的树结构,但它能要大家儿有关树结构的大概印像,可以帮助管理决策。

# Split a dataset based on an attribute and an attribute value

deftest_split(index,value,dataset):

left,right=list(),list()

forrowindataset:

ifrow[index]<value:

left.append(row)

else:

right.append(row)

returnleft,right

# Calculate the Gini index for a split dataset

defgini_index(groups,class_values):

gini=0.0

forclass_valueinclass_values:

forgroupingroups:

size=len(group)

ifsize==0:

continue

proportion=[row[-1]forrowingroup].count(class_value)/float(size)

gini+=(proportion *(1.0-proportion))

returngini

# Select the best split point for a dataset

defget_split(dataset):

class_values=list(set(row[-1]forrowindataset))

b_index,b_value,b_score,b_groups=999,999,999,None

forindexinrange(len(dataset[0])-1):

forrowindataset:

groups=test_split(index,row[index],dataset)

gini=gini_index(groups,class_values)

ifgini<b_score:

b_index,b_value,b_score,b_groups=index,row[index],gini,groups

return{'index':b_index,'value':b_value,'groups':b_groups}

# Create a terminal node value

defto_terminal(group):

outcomes=[row[-1]forrowingroup]

returnmax(set(outcomes),key=outcomes.count)

# Create child splits for a node or make terminal

defsplit(node,max_depth,min_size,depth):

left,right=node['groups']

del(node['groups'])

# check for a no split

ifnotleftornotright:

node['left']=node['right']=to_terminal(left+right)

return

# check for max depth

ifdepth>=max_depth:

node['left'],node['right']=to_terminal(left),to_terminal(right)

return

# process left child

iflen(left)<=min_size:

node['left']=to_terminal(left)

else:

node['left']=get_split(left)

split(node['left'],max_depth,min_size,depth+1)

# process right child

iflen(right)<=min_size:

node['right']=to_terminal(right)

else:

node['right']=get_split(right)

split(node['right'],max_depth,min_size,depth+1)

# Build a decision tree

defbuild_tree(train,max_depth,min_size):

root=get_split(dataset)

split(root,max_depth,min_size,1)

returnroot

# Print a decision tree

defprint_tree(node,depth=0):

ifisinstance(node,dict):

print('%s[X%d < %.3f]'%((depth*' ',(node['index']+1),node['value'])))

print_tree(node['left'],depth+1)

print_tree(node['right'],depth+1)

else:

print('%s[%s]'%((depth*' ',node)))

dataset=[[2.771244718,1.784783929,0],

[1.728571309,1.169761413,0],

[3.678319846,2.81281357,0],

[3.961043357,2.61995032,0],

[2.999208922,2.209014212,0],

[7.497545867,3.162953546,1],

[9.00220326,3.339047188,1],

[7.444542326,0.476683375,1],

[10.12493903,3.234550982,1],

[6.642287351,3.319983761,1]]

tree=build_tree(dataset,1,1)

print_tree(tree)

在运行全过程中,大家儿可改动树的较大深层,并在复印的树伴山查其危害。

当较大深数为 1 时(即开启 build_tree() 涵数时下一个主要参数),大家儿可以发现该树运用了大家儿之前发现的完便士割点(做为树的唯1切分点)。该树仅有一个连触点,也被称呼之管理决策树优化算法桩。

[X1 < 6.642]

[0]

[1]

当较大深层加进 2 时,大家儿迫使输优化算法无需切分的状况下强制切分。結果是,X1 特点在上下叉上被运用了两次来切分这种本早已完便士割的数据信息内容。

[X1 < 6.642]

[X1 < 2.771]

[0]

[0]

[X1 < 7.498]

[1]

[1]

最终,大家儿可以试一下较大深数为 3 的状况:

[X1 < 6.642]

[X1 < 2.771]

[0]

[X1 < 2.771]

[0]

[0]

[X1 < 7.498]

[X1 < 7.445]

[1]

[1]

[X1 < 7.498]

[1]

[1]

这种检验说明,大家儿可以提高编号来防止不必要的切分。请参考拓宽章综艺节文件目录的相关內容。

如今大家儿早已可以(详细地)建立一棵管理决策树优化算法了,那麼大家儿探讨一下怎样用它来在新数据信息内容中作出预测剖析吧。

2.4 运用实体线模型进行预测剖析

运用管理决策树优化算法实体线模型进行管理决策,需叫大家儿根据得出的数据信息内容分析xml整棵管理决策树优化算法。

与前边同样,大家儿仍务必运用一个递归算法涵数来进行该全过程。在其中,根据某切分点对得出数据信息内容的危害,同样的预测剖析标准被应采用左子连触点或右子连触点上。

大家儿务必检查对某子连触点而言,它是不是一个可以被做为预测剖析結果返回的终端设备设备连触点,又或者他是不是含有下一个层的切分连触点务必被考虑到。

以下是进行所述全过程的名叫 predict() 涵数,你可以看到它是如哪儿理给出连触点的标识符与数值的。

随后,大家儿运用生成的数据信息内容来检验该涵数。以下是一个运用仅有一个连触点的硬编号树(即管理决策树优化算法桩)的案例。此案例中有数据信息内容中的每1数量据信息内容进行了预测剖析。

运行该事例,它将依照预估复印出来每1数量据信息内容的预测剖析結果。

Expected=0, Got=0Expected=0, Got=0Expected=0, Got=0Expected=0, Got=0Expected=0, Got=0Expected=1, Got=1Expected=1, Got=1Expected=1, Got=1Expected=1, Got=1Expected=1, Got=1

如今,大家儿不仅把握了怎样建立一棵管理决策树优化算法,此外还了解怎样用它进行预测剖析。那麼,大家儿就再算试在具体数据信息内容上去运用该优化算法吧。

2.5 对钞票数据信息内容的案例科学研究研究

该节描述了在钞票数据信息内容应当用了 CART 优化算法的步骤。

最先是导入数据信息内容,并变换加载的数据信息内容到数值方法,促使大家儿能充足它来计记切分点。对在这件事情,大家儿运用了輔助涵数 load_csv() 加载数据信息内容及 str_column_to_float() 以变换标识符串数2组据到浮等级猜数据。

大家儿可能运用 5 折交叉式验反证法(5-fold cross validation)来评定该优化算法的主要表现。这也就意味着着,对一个记录,可能出现 1273/5=274.4 即 270 数量集聚点。大家儿可能运用輔助涵数 evaluate_algorithm() 来评定优化算法在交叉式认证集上的主要表现,用 accuracy_metric() 来测算预测剖析的精准度。

进行的编号以下:

所述运用的主要参数包含:max_depth 为 5,min_size 为 10。经历一个半些进行后,大家儿明确了所述 CART 优化算法的运用的主要参数,但我觉得输送带应当用的主要参数便是最初色的。

运行此案例,它可能 print 出每有部考試成绩据信息内容的均值归类精准度及对全部一个部考試成绩据信息内容的均值主要表现。

从数据信息内容中你可以发现,CART 优化算法选择的归类设定,达来到大概 83% 的均值归类精准度。其主要表现还好于只大概 50% 精准率的零标准优化算法(Zero Rule algorithm)。

Scores: [83.57664233576642, 84.30656934306569, 85.76642335766424, 81.38686131386861, 81.75182481751825]Mean Accuracy: 83.358%

三、拓宽

这节列举了有关该节的拓宽新项目,你可以依由此进行探索。

1. 优化算法调参(Algorithm Tuning):在钞票数据信息内容应当用的 CART 优化算法未被调参。你可以试着不同样的主要参数数值以获得更强的更出色的結果。

2. 交叉式熵(Cross Entropy):另1各个用以评定切分点的成本费涵数有交叉式熵涵数(大部分损害)。你能臭狗试着运用该成本费涵数做为取代。

3. 修枝(Tree Pruning):另1各个减少在训练全过程赢过线形拟合水准的关键方法 是修枝。你可以科学研究研究并试着完排成些修枝的方法 。

4. 归类数据信息内容(Categorical Dataset):在所述事例中,其树实体线模型被设计方案用以处理数值型或者井然有序数据信息内容。你可以试着改动树实体线模型(关键改动切分的特点,用算式并非排序的方法),使之可以处理分种类的数据信息内容。

5. 重回难点(Regression):可以根据运用不同样的成本费涵数及不同样的建立终端设备设备连触点的方法 ,来让该实体线模型可以处理一个重回难点。

6. 很大部分据信息内容:你可以试着将该优化算法好以 UCI Machine Learning Repository 上别的的数据信息内容。

热门推荐