机器学习 - 决策树


డిసైడ్ ట్రీ (Decision Tree)

ఈ చాప్టర్‌లో, మేము “డిసైడ్ ట్రీ” నిర్మించడానికి ఎలా చూపిస్తాము. డిసైడ్ ట్రీ అనేది మీరు గత అనుభవాన్ని బట్టి నిర్ణయాలు తీసుకోవడానికి సహాయపడే ఒక ప్రక్రియా చిత్రం.

ఈ ఉదాహరణలో, ఒక వ్యక్తి కామేడీ ప్రోగ్రామ్‌లో పాల్గొనాలా లేదా లేదు నిర్ణయించడానికి ప్రయత్నిస్తాడు.

మా ఉదాహరణలో వ్యక్తి ప్రతిసారి పట్టణంలో కామేడీ ప్రోగ్రామ్ నిర్వహించినప్పుడు నమోదు చేస్తాడు, కామేడీ నటుల గురించి కొన్ని సమాచారాలను నమోదు చేస్తాడు మరియు అతను/ఆమె వెళ్లినా లేదా లేదు నమోదు చేస్తాడు.

వయస్సు ఎక్స్పెరియెన్స్ Rank Nationality Nationality
Go 36 45 9 USA
10 42 6 5 USA
12 6 23 35 USA
14 6 6 5 USA
4 43 21 5 UK
8 66 24 9 USA
44 18 3 35 UK
13 66 45 9 UK
14 52 3 35 UK
13 24 45 35 UK
N 18 24 5 USA
NO 18 3 9 UK
7 45 45 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
print(df)

运行实例

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

డిసీషన్ ట్రీని తయారు చేయడానికి, అన్ని డాటా నంబర్లే ఉండాలి.

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

运行实例

ఫలితాల వివరణ

నిర్ణయ వృక్షం మీ ముంది నిర్ణయాలను ఉపయోగించి మీరు కామేడీ నటులను చూడాలా అనే అవగాహనను గణిస్తుంది.

నిర్ణయ వృక్షం వివిధ పక్షాలను చదవండి:


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 మంది "NO" పొందారు, 7 మంది "GO" పొందారు.

Gini

ప్రమాణాలను చేరుస్తున్న పద్ధతులు అనేకం ఉన్నాయి, మన ఈ పాఠ్యక్రమంలో GINI పద్ధతిని ఉపయోగిస్తున్నాము.

గినీ పద్ధతి ఈ ఫార్ములా ఉపయోగిస్తుంది:

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

ఈ లో కి, x అనేది అనుమానంగా ఉన్న సంఖ్య ("GO"), n అనేది ప్రమాణాల సంఖ్య, y అనేది అనుమానంగా ఉన్న సంఖ్య ("NO"), ఈ ఫార్ములా ఉపయోగించి గణించబడుతుంది:

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


తదుపరి దశలో రెండు పెట్టెలు ఉన్నాయి, ఒక పెట్టెలో స్థాయి 6.5 లేదా తక్కువ కామేడీ నటులు ఉన్నారు, మరొక పెట్టెలో ఇతర ప్రమాణాలు ఉన్నాయి.

True - ఇక్కడ ఈ కామేడీ నటులు 5 మంది ముగుస్తారు:

gini = 0.0 అన్ని ప్రమాణాలు ఒకే ఫలితాన్ని పొందాయి.

samples = 5 ఈ శాఖలో ఇంకా 5 మంది కామేడీ నటులు ఉన్నారు (5 మంది స్థాయి 6.5 లేదా తక్కువ కామేడీ నటులు).

value = [5, 0] value = [5, 0]

ఇది 5 చేత "నాకు రాయండి" పొందింది మరియు 0 చేత "కదిలించండి" పొందింది.

ఫాల్స్ - 8 నటులు కొనసాగుతున్నారు:

Nationality (నాగరికత) Nationality <= 0.5 కలిగిన నటులు ఎడమ ముఖంలోని ఆకారాన్ని అనుసరించాలి (ఇది యుకె నుండి వచ్చిన అన్నివారిని సూచిస్తుంది), మిగిలినవారు కుడి ముఖంలోని ఆకారాన్ని అనుసరించాలి.

gini = 0.219 సుమారు 22% నమూనాలు ఒక దిశగా కదిలేందుకు ఉంటాయి.

samples = 8 ఈ శాఖలో ఇంకా 8 నటులు ఉన్నారు (8 నటులు గ్రేడ్ 6.5 కంటే ఎక్కువ).

value = [1, 7] ఈ 8 నటులలో 1 చేత "నాకు రాయండి" పొందింది మరియు 7 చేత "కదిలించండి" పొందింది.


ట్రూ - 4 నటులు కొనసాగుతున్నారు:

Age (వయస్సు)

Age <= 35.5 35.5 సంవత్సరాలకంటే తక్కువ వయస్సు కలిగిన నటులు ఎడమ ముఖంలోని ఆకారాన్ని అనుసరించాలి మరియు మిగిలినవారు కుడి ముఖంలోని ఆకారాన్ని అనుసరించాలి.

gini = 0.375 సుమారు 37.5% నమూనాలు ఒక దిశగా కదిలేందుకు ఉంటాయి.

samples = 4 ఈ శాఖలో ఇంకా 4 నటులు ఉన్నారు (యుకె నుండి వచ్చిన 4 నటులు).

value = [1, 3] ఈ 4 నటులలో 1 చేత "నాకు రాయండి" పొందింది మరియు 3 చేత "కదిలించండి" పొందింది.

ఫాల్స్ - 4 నటులు ఇక్కడ ముగిసింది:

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

samples = 4 ఈ శాఖలో ఇంకా 4 నటులు ఉన్నారు (యుకె నుండి వచ్చిన 4 నటులు).

value = [0, 4] ఈ 4 నటులలో 0 చేత "నాకు రాయండి" పొందింది మరియు 4 చేత "కదిలించండి" పొందింది.


ట్రూ - 2 నటులు ఇక్కడ ముగిసింది:

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

samples = 2 ఈ శాఖలో ఇంకా 2 నటులు ఉన్నారు (2 నటులు 35.5 సంవత్సరాలకంటే తక్కువ వయస్సు కలిగిన నటులు).

value = [0, 2] ఈ రెండు నటులలో 0 చేత "నాకు రాయండి" పొందింది మరియు 2 చేత "కదిలించండి" పొందింది.

ఫాల్స్ - 2 నటులు కొనసాగుతున్నారు:

Experience (అనుభవం)

Experience <= 9.5 9.5 సంవత్సరాల అనుభవం కలిగిన నటులు ఎడమ ముఖంలోని ఆకారాన్ని అనుసరించాలి మరియు మిగిలినవారు కుడి ముఖంలోని ఆకారాన్ని అనుసరించాలి.

gini = 0.5 50% నమూనాలు ఒక దిశగా కదిలేందుకు ఉంటాయి.

samples = 2 ఈ శాఖలో ఇంకా 2 నటులు ఉన్నారు (2 నటులు వయస్సు 35.5 సంవత్సరాలకంటే ఎక్కువ).

value = [1, 1] ఈ రెండు నటులలో 1 చేత "నాకు రాయండి" పొందింది మరియు 1 చేత "కదిలించండి" పొందింది.


ట్రూ - 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"。

预测值

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

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

实例

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

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

运行实例

实例

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

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

运行实例

不同的结果

如果运行足够多次,即使您输入的数据相同,决策树也会为您提供不同的结果。

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