python中tree 100 6_Python 机器学习 决策树(Decision Tree)

1、决策树(Decision Tree)

在本章中,我们将向您展示如何制作“决策树”。决策树是流程图,可以帮助您根据以前的经验来做出决策。

在该示例中,一个人将尝试决定是否应参加喜剧节目。

幸运的是,我们的榜样人物每次在镇上举办喜剧节目时都进行注册,并注册一些关于喜剧演员的信息,并且还注册了他/她是否去过。AgeExperienceRankNationalityGo

36109UKNO

42124USANO

2346NNO

5244USANO

43218USAYES

44145UKNO

6637NYES

35149UKYES

52137NYES

3559NYES

2435USANO

1837UKYES

4599UKYES

现在,基于此数据集,Python可以创建决策树,该决策树可用于确定是否有任何新的演出值得参加。

2、决策树如何工作?

首先,导入所需的模块,并使用pandas读取数据集:

例如:

读取并打印数据集:import pandas

from sklearn import tree

import pydotplus

from sklearn.tree import DecisionTreeClassifier

import matplotlib.pyplot as plt

import matplotlib.image as pltimg

df = pandas.read_csv("shows.csv")

print(df)

要制作决策树,所有数据都必须为数字。

我们必须将非数字列“Nationality”和“Go”转换为数值。

Pandas有一个map()方法,该方法带有一个字典,其中包含有关如何转换值的信息。

{'UK': 0, 'USA': 1, 'N': 2}

表示将值“UK”转换为0,将“USA”转换为1,将“N”转换为2。

例如:

将字符串值更改为数值:d = {'UK': 0, 'USA': 1, 'N': 2}

df['Nationality'] = df['Nationality'].map(d)

d = {'YES': 1, 'NO': 0}

df['Go'] = df['Go'].map(d)

print(df)

然后,我们必须将功能列与目标列分开。

功能列是我们尝试从中预测的列,目标列是具有我们尝试预测的值的列。

例如:

X是功能列,y是目标列:

features = ['Age', 'Experience', 'Rank', 'Nationality']

X = df[features]

y = df['Go']

print(X)

print(y)

现在,我们可以创建实际的决策树,使其适合我们的详细信息,然后将.png文件保存在计算机上:

例如:

创建决策树,将其另存为图像,然后显示该图像:dtree = DecisionTreeClassifier()

dtree = dtree.fit(X, y)

data = tree.export_graphviz(dtree, out_file=None, feature_names=features)

graph = pydotplus.graph_from_dot_data(data)

graph.write_png('mydecisiontree.png')

img=pltimg.imread('mydecisiontree.png')

imgplot = plt.imshow(img)

plt.show()

3、结果解释

决策树使用之前的决策来计算是否愿意去看喜剧演员的几率。

让我们阅读决策树的不同方面:

Rank

Rank <= 6.5表示所有排名在6.5以下的喜剧演员都会跟随True箭(左),其余的会跟随Fasle箭(右)。

gini = 0.497表示分割的质量,总是介于0.0和0.5之间的一个数字,其中0.0表示所有样本得到相同的结果,0.5表示分割正好在中间完成。

samples = 13意味着在这一点上还有13个喜剧演员在决定,这是他们所有人,因为这是第一步。

value = [6,7]表示这13个喜剧演员中,6个会得到"NO",7个会得到"GO"。

Gini

有许多方法来分割样本,我们在本教程中使用GINI方法。

Gini方法使用以下公式:

Gini = 1 - (x/n)2 - (y/n)2

其中,x是肯定答案的数量(“ GO”),n是样本数量,y是否定答案的数量(“NO”),这使我们进行了计算:

1 - (7 / 13)2 - (6 / 13)2 = 0.497

下一步包含两个方框,一个方框用于“Rank”为6.5或更低的喜剧演员,另一个方框用于其余演员。

True- 5个喜剧演员在这里结束:

gini = 0.0 表示所有样本得到相同的结果。

samples = 5 表示这个分支中还剩下5名喜剧演员(5名喜剧演员,评分6.5或以下)。

value = [5, 0] 意味着5会得到"NO"和0会得到"GO"。

False-8位喜剧演员继续:

Nationality

Nationality&lt; = 0.5表示国籍值小于0.5的喜剧演员会跟随左边的箭头(表示所有来自英国的人),其余的会跟随右边的箭头。

gini = 0.219 意味着大约22%的样本会朝一个方向移动。

samples = 8 表示这个分支中还剩下8位喜剧演员(排名高于6.5的喜剧演员有8位)。

value = [1, 7] 这意味着在这8个喜剧演员中,1个会得到"NO" ,7个会得到"GO"。

True-4名喜剧演员继续:

Age

Age <= 35.5这意味着年龄在35.5岁及以下的喜剧演员将遵循箭头指向左边,其余的将遵循箭头指向右边。

gini = 0.375意味着大约有37.5 %的样本会朝一个方向运动。

samples = 4 这意味着在这个分支中还剩下4个喜剧演员(4个来自英国的喜剧演员)。

value = [1, 3] 这意味着在这4个喜剧演员中,1个会得到"NO",3个会得到"GO"。

False-4名喜剧演员到此结束:

gini = 0.0 表示所有样本得到相同的结果。

samples = 4 这意味着在这个分支中还剩下4位喜剧演员(4位不是来自英国的喜剧演员)。

value = [0, 4] 表示这4个喜剧演员中,0个会得到"NO",4个会得到"GO"。

True-2名喜剧演员到此为止:

gini = 0.0 表示所有样本得到相同的结果。

samples = 2 表示这个分支中还剩下2位喜剧演员(2位年龄在35.5岁或以下的喜剧演员)。

value = [0, 2] 表示这两个喜剧演员中,0会得到"NO" 2会得到"GO"。

False-2名喜剧演员继续:

Experience

Experience <= 9.5这意味着9.5年或更少经验的喜剧演员会跟随箭头向左,其余的会跟随箭头向右。

gini = 0.5 意味着50%的样本会朝一个方向。

samples = 2 表示这个分支中还剩下2名喜剧演员(2名超过35.5岁的喜剧演员)。

value = [1, 1] 这意味着在这两个喜剧演员中,一个会得到"NO" ,一个会得到"GO"。

True-1名喜剧演员到此为止:

gini = 0.0 表示所有样本得到相同的结果。

samples = 1 表示该科只剩下1名喜剧演员(1名经验少于或等于9.5年的喜剧演员)。

value = [0, 1]表示0会得到"NO" 1会得到"GO"。

False-1名喜剧演员到此为止:

gini = 0.0 表示所有样本得到相同的结果。

samples = 1表示该分支只剩下1位喜剧演员(1位经验超过9.5年的喜剧演员)。

value = [1, 0] 意味着1会得到"NO" 0会得到"GO"。

4、预测值

我们可以使用决策树来预测新值。

示例:我是否应该去看一个由40岁的美国喜剧演员主演的节目,该喜剧演员有10年的工作经验,喜剧排名为7?

例如:

使用predict()方法预测新值:print(dtree.predict([[40, 10, 7, 1]]))

例如:

如果喜剧等级为6,答案是什么?print(dtree.predict([[40, 10, 6, 1]]))

不同的结果

即使运行了足够的数据,即使运行了足够多次,也会看到决策树为你提供了不同的结果,这是因为决策树无法为我们提供100%的肯定答案。 它基于结果的可能性,答案将有所不同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值