डिसीजन ट्री एक एल्गोरिदम है जिसे मुख्य रूप से डेटा वर्गीकरण परिदृश्यों पर लागू किया जाता है। यह एक ट्री संरचना है जहां प्रत्येक नोड विशेषताओं का प्रतिनिधित्व करता है और प्रत्येक एज लिए गए निर्णय का प्रतिनिधित्व करता है। रूट नोड से शुरू करके हम वर्गीकरण के लिए विशेषताओं का मूल्यांकन करते रहते हैं और एक विशिष्ट एज का अनुसरण करने का निर्णय लेते हैं। जब भी एक नया डेटा पॉइंट आता है, तो यह वही विधि बार-बार लागू की जाती है और फिर अंतिम निष्कर्ष तब लिया जाता है जब वर्गीकरण परिदृश्य के लिए आवश्यक सभी विशेषताओं का अध्ययन या आवेदन किया जाता है। इसलिए डिसीजन ट्री एल्गोरिदम एक सुपरवाइज्ड लर्निंग मॉडल है जिसका उपयोग प्रशिक्षण चर की एक श्रृंखला के साथ एक निर्भर चर की भविष्यवाणी करने के लिए किया जाता है।
उदाहरण
हम kaggle पर उपलब्ध ड्रग टेस्ट डेटा लेंगे। पहले चरण के रूप में हम पैंडास का उपयोग करके सीएसवी फाइल से डेटा पढ़ेंगे और इसकी सामग्री और संरचना देखेंगे।
import pandas as pd
datainput = pd.read_csv("drug.csv", delimiter=",")
#https://www.kaggle.com/gangliu/drugsets
print(datainput)
उपरोक्त कोड चलाने से हमें निम्नलिखित परिणाम मिलता है:
Age Sex BP Cholesterol Na_to_K Drug 0 23 F HIGH HIGH 25.355 drugY 1 47 M LOW HIGH 13.093 drugC 2 47 M LOW HIGH 10.114 drugC 3 28 F NORMAL HIGH 7.798 drugX 4 61 F LOW HIGH 18.043 drugY .. ... .. ... ... ... ... 195 56 F LOW HIGH 11.567 drugC 196 16 M LOW HIGH 12.006 drugC 197 52 M NORMAL HIGH 9.894 drugX [200 rows x 6 columns]
डेटा प्री-प्रोसेसिंग
अगले चरण में हम ऊपर दिए गए डेटा को प्री-प्रोसेस करते हैं ताकि डेटा में मौजूद विभिन्न टेक्स्ट मानों के लिए संख्यात्मक मान प्राप्त हो सकें। यह प्रशिक्षण और परीक्षण के लिए नमूना डेटा को उम्र, लिंग, BP आदि के दिए गए मूल्य के लिए किस दवा का उपयोग करना है, के बारे में वर्गीकृत करने के लिए उपयोगी है।
उदाहरण
import numpy as np
import pandas as pd
from sklearn.metrics import confusion_matrix
datainput = pd.read_csv("drug.csv", delimiter=",")
X = datainput[['Age', 'Sex', 'BP', 'Cholesterol', 'Na_to_K']].values
from sklearn import preprocessing
label_gender = preprocessing.LabelEncoder()
label_gender.fit(['F','M'])
X[:,1] = label_gender.transform(X[:,1])
label_BP = preprocessing.LabelEncoder()
label_BP.fit(['LOW', 'NORMAL', 'HIGH'])
X[:,2] = label_BP.transform(X[:,2])
label_Chol = preprocessing.LabelEncoder()
label_Chol.fit(['NORMAL', 'HIGH'])
X[:,3] = label_Chol.transform(X[:,3])
# पहले 6 रिकॉर्ड प्रिंट करना
print(X[0:6])
उपरोक्त कोड चलाने से हमें निम्नलिखित परिणाम मिलता है -
[[23 0 0 0 25.355] [47 1 1 0 13.093] [47 1 1 0 10.113999999999999] [28 0 2 0 7.797999999999999] [61 0 1 0 18.043] [22 0 2 0 8.607000000000001]]
निर्भर चर को बदलना
अगला हम निर्भर चर को भी संख्यात्मक मानों में बदलते हैं ताकि इसे प्रशिक्षण और मूल्यांकन डेटा सेट में भी इस्तेमाल किया जा सके।
उदाहरण
import pandas as pd
datainput = pd.read_csv("drug.csv", delimiter=",")
X = datainput[['Age', 'Sex', 'BP', 'Cholesterol', 'Na_to_K']].values
y = datainput["Drug"]
print(y[0:6])
आउटपुट
उपरोक्त कोड चलाने से हमें निम्नलिखित परिणाम मिलता है:
0 drugY 1 drugC 2 drugC 3 drugX 4 drugY 5 drugX Name: Drug, dtype: object
डेटासेट को प्रशिक्षित करना
अगला हम आपूर्ति किए गए डेटा के 30 प्रतिशत का उपयोग प्रशिक्षण डेटा सेट के रूप में करते हैं। इसका उपयोग शेष 70 प्रतिशत के लिए वर्गीकरण बनाने के आधार के रूप में किया जाएगा जिसे हम टेस्ट डेटा कहेंगे।
उदाहरण
import pandas as pd
from sklearn.model_selection import train_test_split
datainput = pd.read_csv("drug.csv", delimiter=",")
X = datainput[['Age', 'Sex', 'BP', 'Cholesterol', 'Na_to_K']].values
y = datainput["Drug"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=3)
print(X_train.shape)
print(X_test.shape)
print(y_train.shape)
print(y_test.shape)
आउटपुट
उपरोक्त कोड चलाने से हमें निम्नलिखित परिणाम मिलता है:
(140, 5) (60, 5) (140,) (60,)
प्रशिक्षित डेटा सेट से परिणाम प्राप्त करना
अगला हम प्रशिक्षित डेटा सेट के लिए परिणाम देखने के लिए डिसीजन ट्री लागू कर सकते हैं। यहां हम अपने पास मौजूद इनपुट के आधार पर एक ट्री बनाते हैं और entropy नामक एक मानदंड का उपयोग करते हैं। और अंत में हम डिसीजन ट्री की सटीकता की गणना करते हैं।
उदाहरण
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn import metrics
datainput = pd.read_csv("drug.csv", delimiter=",")
X = datainput[['Age', 'Sex', 'BP', 'Cholesterol', 'Na_to_K']].values
# डेटा प्रीप्रोसेसिंग
from sklearn import preprocessing
label_gender = preprocessing.LabelEncoder()
label_gender.fit(['F', 'M'])
X[:, 1] = label_gender.transform(X[:, 1])
label_BP = preprocessing.LabelEncoder()
label_BP.fit(['LOW', 'NORMAL', 'HIGH'])
X[:, 2] = label_BP.transform(X[:, 2])
label_Chol = preprocessing.LabelEncoder()
label_Chol.fit(['NORMAL', 'HIGH'])
X[:, 3] = label_Chol.transform(X[:, 3])
y = datainput["Drug"]
# train_test_split
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=3)
drugTree = DecisionTreeClassifier(criterion="entropy", max_depth=4)
drugTree.fit(X_train, y_train)
predicted = drugTree.predict(X_test)
print(predicted)
print("\nDecisionTrees's Accuracy: ", metrics.accuracy_score(y_test, predicted))
आउटपुट
उपरोक्त कोड चलाने से हमें निम्नलिखित परिणाम मिलता है:
['drugY' 'drugX' 'drugX' 'drugX' 'drugX' 'drugC' 'drugY' 'drugA' 'drugB' 'drugA' 'drugY' 'drugA' 'drugY' 'drugY' 'drugX' 'drugY' 'drugX' 'drugX' 'drugB' 'drugX' 'drugX' 'drugY' 'drugY' 'drugY' 'drugX' 'drugB' 'drugY' 'drugY' 'drugA' 'drugX' 'drugB' 'drugC' 'drugC' 'drugX' 'drugX' 'drugC' 'drugY' 'drugX' 'drugX' 'drugX' 'drugA' 'drugY' 'drugC' 'drugY' 'drugA' 'drugY' 'drugY' 'drugY' 'drugY' 'drugY' 'drugB' 'drugX' 'drugY' 'drugX' 'drugY' 'drugY' 'drugA' 'drugX' 'drugY' 'drugX'] DecisionTrees's Accuracy: 0.9833333333333333