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.