Python/python ml decision tree

来自菜鸟教程
跳转至:导航、​搜索

<languages />

机器学习-决策树

文件:Img ml decision tree.png

决策树

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

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

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

Age 经验 Rank 国籍 Go
36 10 9 UK NO
42 12 4 USA NO
23 4 6 N NO
52 4 4 USA NO
43 21 8 USA YES
44 14 5 UK NO
66 3 7 N YES
35 14 9 UK YES
52 13 7 N YES
35 5 9 N YES
24 3 5 USA NO
18 3 7 UK YES
45 9 9 UK YES

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

它是如何工作的?

首先,导入所需的模块,并使用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”转换为数值。

熊猫有一个 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)

运行示例»


然后,我们必须将 feature 来自的列 target 柱。

功能列是我们尝试预测的列 from ,而目标列是包含我们尝试预测的值的列。

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()

运行示例»


结果说明

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

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

文件:Img decisiontree1.png

Rank

Rank <= 6.5 表示排名在6.5以下的喜剧演员将遵循 True 箭头(向左),其余的将跟随 False 箭头(向右)。

gini = 0.497 指的是分割的质量,并且始终是介于0.0和0.5之间的数字,其中0.0表示所有样本均获得相同的结果,而0.5表示分割完全在中间进行。

samples = 13 表示此时决策中还剩下13位喜剧演员,因为第一步是所有喜剧演员。

value = [6, 7] 表示在这13位喜剧演员中,有6位将获得“否”,而7位将获得“ GO”。

Gini

拆分样本的方法有很多,我们在本教程中使用GINI方法。

基尼方法使用以下公式:

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

哪里 x 是肯定答案的数量(“ GO”), n 是样本数,并且 y 是否定答案的数量(“否”),这使我们可以进行以下计算:

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


文件:Img decisiontree2.png

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

正确-5名喜剧演员在这里结束:

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

samples = 5 表示此分支中还剩下5位喜剧演员(5位等级为6.5或更低的喜剧演员)。

value = [5, 0] 表示5表示“否”,0表示“ GO”。

错误-8位喜剧演员继续:

国籍

Nationality <= 0.5 表示国籍值小于0.5的喜剧演员将遵循左侧的箭头(表示来自英国的所有人),其余的将遵循右侧的箭头。

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

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

value = [1, 7] 表示在这8位喜剧演员中,有1位表示“否”,而7位则表示“ GO”。




文件:Img decisiontree3 2.png

正确-4名喜剧演员继续:

Age

Age <= 35.5 表示年龄在35.5岁或以下的喜剧演员将遵循左箭头,其余的将遵循右箭头。

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

samples = 4 表示该分支中还剩下4位喜剧演员(来自英国的4位喜剧演员)。

value = [1, 3] 表示在这4位喜剧演员中,有1位表示“否”,而3位表示“ GO”。

错误-4名喜剧演员到此为止:

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

samples = 4 表示该分支中还剩下4位喜剧演员(4位来自英国的喜剧演员)。

value = [0, 4] 表示在这4位喜剧演员中,0将获得“否”,而4将获得“ GO”。




文件:Img decisiontree4 2.png

正确-2名喜剧演员在这里结束:

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

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

value = [0, 2] 表示在这2位喜剧演员中,0将获得“否”,而2将获得“ GO”。

错误-2名喜剧演员继续:

经验

Experience <= 9.5 表示具有9.5年或以上经验的喜剧演员将遵循左侧的箭头,其余的将遵循右侧的箭头。

gini = 0.5 表示50%的样本将朝一个方向移动。

samples = 2 表示此分支中还剩下2位喜剧演员(2位年龄超过35.5岁的喜剧演员)。

value = [1, 1] 表示在这2位喜剧演员中,1位将获得“否”,而1位将获得“ GO”。




文件:Img decisiontree5.png

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

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

samples = 1 表示此分支中还剩下1名喜剧演员(1名具有9.5年或以下经验的喜剧演员)。

value = [0, 1] 表示0表示“否”,1表示“ GO”。

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

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

samples = 1 表示此分支中还剩下1位喜剧演员(其中1位具有超过9.5年的工作经验的喜剧演员)。

value = [1, 0] 表示1表示“否”,0表示“ GO”。

预测值

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

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

使用predict()方法来预测新值:

  print(dtree.predict([[40, 10, 7, 1]]))

运行示例»


如果喜剧等级为6,答案是什么?

  print(dtree.predict([[40, 10, 6, 1]]))

运行示例»


不同的结果

您将看到,即使您运行了足够多次,决策树也会为您提供不同的结果,即使您向它提供相同的数据也是如此。

那是因为决策树无法给我们100%的肯定答案。它基于结果的可能性,答案将有所不同。