โครงสร้างการตัดสินใจเป็นอัลกอริธึมซึ่งส่วนใหญ่ใช้กับสถานการณ์การจัดหมวดหมู่ข้อมูล เป็นโครงสร้างแบบต้นไม้ที่แต่ละโหนดแสดงถึงคุณลักษณะและแต่ละขอบแสดงถึงการตัดสินใจ เริ่มจากโหนดรูท เราไปประเมินคุณสมบัติสำหรับการจัดประเภทและตัดสินใจทำตามขอบที่เฉพาะเจาะจง เมื่อใดก็ตามที่มีจุดข้อมูลใหม่เข้ามา วิธีการเดียวกันนี้จะถูกนำไปใช้ซ้ำแล้วซ้ำเล่า จากนั้นจึงสรุปผลสุดท้ายเมื่อคุณลักษณะที่จำเป็นทั้งหมดได้รับการศึกษาหรือนำไปใช้กับสถานการณ์การจำแนกประเภท ดังนั้นอัลกอริธึมแผนผังการตัดสินใจจึงเป็นโมเดลการเรียนรู้ภายใต้การดูแลซึ่งใช้ในการทำนายตัวแปรตามด้วยชุดของตัวแปรการฝึก
ตัวอย่าง
เราจะนำข้อมูลการทดสอบยาที่มีอยู่ที่ kaggle ในขั้นแรก เราจะอ่านข้อมูลจากไฟล์ csv โดยใช้แพนด้า และดูเนื้อหาและโครงสร้าง
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