डिसीजन ट्री एक एल्गोरिथम है जो मुख्य रूप से डेटा वर्गीकरण परिदृश्यों पर लागू होता है। यह एक वृक्ष संरचना है जहां प्रत्येक नोड सुविधाओं का प्रतिनिधित्व करता है और प्रत्येक किनारे लिए गए निर्णय का प्रतिनिधित्व करता है। रूट नोड से शुरू करके हम वर्गीकरण के लिए सुविधाओं का मूल्यांकन करते हैं और एक विशिष्ट किनारे का पालन करने का निर्णय लेते हैं। जब भी कोई नया डेटा बिंदु आता है, तो उसी पद्धति को बार-बार लागू किया जाता है और फिर अंतिम निष्कर्ष तब लिया जाता है जब सभी आवश्यक विशेषताओं का अध्ययन किया जाता है या वर्गीकरण परिदृश्य पर लागू किया जाता है। इसलिए डिसीजन ट्री एल्गोरिथम एक पर्यवेक्षित शिक्षण मॉडल है जिसका उपयोग प्रशिक्षण चरों की एक श्रृंखला के साथ एक आश्रित चर की भविष्यवाणी करने में किया जाता है।
उदाहरण
हम कागले पर उपलब्ध ड्रग टेस्ट डेटा लेंगे। पहले चरण के रूप में हम पांडा का उपयोग करके एक सीएसवी फ़ाइल से डेटा पढ़ेंगे और इसे सामग्री और संरचना देखेंगे।
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]
डेटा को प्री-प्रोसेस करना
अगले चरण में हम डेटा में मौजूद विभिन्न टेक्स्ट मानों के लिए संख्यात्मक मान प्राप्त करने के लिए उपरोक्त डेटा को प्री-प्रोसेस करते हैं। यह किसी निश्चित आयु, लिंग, बीपी आदि के लिए कुछ दवा का उपयोग करने के निर्णय के बारे में नमूना डेटा को प्रशिक्षित और परीक्षण करने के लिए उपयोगी है।
उदाहरण
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])
# Printing the first 6 records
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,)
प्रशिक्षित डेटा सेट से परिणाम प्राप्त करना
अगला, हम प्रशिक्षित डेटा सेट के परिणाम देखने के लिए निर्णय ट्री लागू कर सकते हैं। यहां हम अपने पास मौजूद इनपुट के आधार पर एक ट्री बनाते हैं और एंट्रोपी नामक एक मानदंड का उपयोग करते हैं। और अंत में हम निर्णय वृक्ष की सटीकता की गणना करते हैं।
उदाहरण
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
# Data Preprocessing
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