Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Triển khai cây quyết định (Decision Tree) bằng Python


Cây quyết định: thuật toán phân loại có giám sát. Mỗi nút là đặc trưng, cạnh là quyết định. Dự đoán biến phụ thuộc từ các biến huấn luyện.

Ví dụ

Dữ liệu drug test từ Kaggle. Đọc CSV bằng pandas.

import pandas as pd 
datainput = pd.read_csv("drug.csv", delimiter=",") 
print(datainput)

Kết quả: 200 hàng, 6 cột (Age, Sex, BP, Cholesterol, Na_to_K, Drug).

Tiền xử lý dữ liệu

Chuyển giá trị categorical sang số bằng LabelEncoder.

import numpy as np 
import pandas as pd 
from sklearn import preprocessing 
datainput = pd.read_csv("drug.csv", delimiter=",") 
X = datainput[['Age','Sex','BP','Cholesterol','Na_to_K']].values 
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]) 
print(X[0:6])

Kết quả: 6 hàng đầu đã chuyển số.

Chuyển biến phụ thuộc

Drug chuyển sang nhãn số.

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])

Kết quả: drugY, drugC, drugC, drugX, drugY, drugX.

Chia tập train/test

30% test, 70% train.

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) 
print(X_train.shape, X_test.shape, y_train.shape, y_test.shape)

Kết quả: (140,5) (60,5) (140,) (60,).

Huấn luyện và đánh giá

DecisionTreeClassifier(criterion="entropy", max_depth=4). Tính accuracy.

from sklearn.tree import DecisionTreeClassifier 
from sklearn import metrics 
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))

Kết quả: độ chính xác 0.9833.