机器学习 - 决策树

డిసైడ్ ట్రీ (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% 的肯定答案。它基于结果的可能性,答案会有所不同。