मशीन शिक्षा - डिसिजन ट्री


डिसीजन ट्री (Decision Tree)

इस चैप्टर में, हम आपको दिखाएंगे कैसे 'डिसीजन ट्री' बनाया जाता है। डिसीजन ट्री एक प्रोसेस ग्राफ है जो आपको पहले के अनुभव के आधार पर निर्णय करने में मदद करता है。

इस उदाहरण में, एक व्यक्ति को यह निर्णय करने की कोशिश करनी होगी कि वह कॉमेडी कार्यक्रम में भाग लेना चाहे या नहीं।

सौभाग्य से, हमारे उदाहरण के व्यक्ति हर बार जब गाँव में कॉमेडी कार्यक्रम आयोजित किया जाता है, तो वह नामांकन करता है और कॉमेडी अभिनेता के बारे में कुछ जानकारी देता है, और यह भी दर्शाता है कि उसने कभी गया है या नहीं।

आयु अनुभव Rank Nationality 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' को संख्यात्मक में परिवर्तित करना होगा。

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 तरीका निम्नलिखित फॉर्मूला का उपयोग करता है:

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 को "एनो" मिलेगा और 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] इसका अर्थ है कि इन 2 नाटककारों में से 0 को "एनो" मिलेगा और 2 को "गो" मिलेगा。

फॉल्स - 2 नाटककार जारी रहे:

Experience(अनुभव)

Experience <= 9.5 इसका अर्थ है कि 9.5 साल या उससे अधिक अनुभव वाले नाटककार बाईं बारह के दिशा का अनुसरण करेंगे और बाकी दायां बारह का अनुसरण करेंगे。

gini = 0.5 इसका अर्थ है कि 50% के साम्पल एक दिशा की ओर जाएंगे。

samples = 2 इसका अर्थ है कि इस शाखा में अभी भी 2 नाटककार हैं (2 जो 35.5 साल से अधिक आयु के नाटककार हैं)。

value = [1, 1] इसका अर्थ है कि इन 2 नाटककारों में से 1 को "एनो" मिलेगा और 1 को "गो" मिलेगा。


ट्रू - 1 नाटककार यहाँ समाप्त हुआ:

gini = 0.0 सभी नमूने एक से एक परिणाम देते हैं。

samples = 1 इस शाखा में अभी एक कॉमेडी अभिनेता बचा है (1 व्यक्ति को 9.5 साल या कम अनुभव है)。

value = [0, 1] 0 को 'NO' और 1 को 'GO' के रूप में प्रदर्शित करें

False - 1 कॉमेडी अभिनेता अब तक आए हैं:

gini = 0.0 सभी नमूने एक से एक परिणाम देते हैं。

samples = 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% सुनिश्चित जवाब नहीं दे सकती।यह परिणाम की संभावना पर आधारित है, जवाब अलग-अलग हो सकता है।