Cây quyết định là một thuật toán chủ yếu được áp dụng cho các kịch bản phân loại dữ liệu. Nó là một cấu trúc cây trong đó mỗi nút đại diện cho các tính năng và mỗi cạnh đại diện cho quyết định được thực hiện. Bắt đầu từ nút gốc, chúng tôi tiếp tục đánh giá các tính năng để phân loại và đưa ra quyết định theo một cạnh cụ thể. Bất cứ khi nào một điểm dữ liệu mới xuất hiện, cùng một phương pháp này được áp dụng lặp đi lặp lại và sau đó đưa ra kết luận cuối cùng khi tất cả các đặc điểm cần thiết được nghiên cứu hoặc áp dụng cho kịch bản phân loại. Vì vậy, thuật toán cây quyết định là một mô hình học có giám sát được sử dụng để dự đoán một biến phụ thuộc với một loạt các biến huấn luyện.
Ví dụ
Chúng tôi sẽ lấy dữ liệu kiểm tra ma túy có sẵn tại kaggle. Bước đầu tiên, chúng tôi sẽ đọc dữ liệu từ tệp csv bằng cách sử dụng gấu trúc và xem nội dung và cấu trúc của tệp.
import pandas as pd datainput = pd.read_csv("drug.csv", delimiter=",") #https://www.kaggle.com/gangliu/drugsets print(datainput)
Chạy đoạn mã trên cho chúng ta kết quả sau:
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]
Xử lý trước dữ liệu
Trong bước tiếp theo, chúng tôi xử lý trước dữ liệu trên để lấy các giá trị số cho các giá trị văn bản khác nhau mà chúng tôi có trong dữ liệu. Điều đó rất hữu ích để đào tạo và kiểm tra dữ liệu mẫu về quyết định sử dụng một số loại thuốc cho một giá trị nhất định về tuổi, giới tính, BP, v.v.
Ví dụ
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])
Chạy đoạn mã trên cho chúng ta kết quả sau -
[[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] ]
Chuyển đổi biến phụ thuộc
Tiếp theo, chúng tôi cũng chuyển đổi biến phụ thuộc thành các giá trị số để nó có thể được sử dụng trong đào tạo cũng như tập dữ liệu đánh giá.
Ví dụ
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])
Đầu ra
Chạy đoạn mã trên cho chúng ta kết quả sau:
0 drugY 1 drugC 2 drugC 3 drugX 4 drugY 5 drugX Name: Drug, dtype: object
Đào tạo tập dữ liệu
Tiếp theo, chúng tôi sử dụng 30 phần trăm dữ liệu được cung cấp làm tập dữ liệu đào tạo. Điều này sẽ được sử dụng làm cơ sở để tạo phân loại cho 70 phần trăm còn lại mà chúng tôi sẽ gọi là dữ liệu thử nghiệm.
Ví dụ
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)
Đầu ra
Chạy đoạn mã trên cho chúng ta kết quả sau:
(140, 5) (60, 5) (140,) (60,)
Nhận kết quả từ Tập dữ liệu được đào tạo
Tiếp theo, chúng ta có thể áp dụng cây quyết định để xem kết quả cho tập dữ liệu đã đào tạo. Ở đây chúng tôi tạo một cây dựa trên đầu vào mà chúng tôi có và sử dụng một tiêu chí gọi là entropy. Và cuối cùng, chúng tôi tính toán độ chính xác của cây quyết định.
Ví dụ
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))
Đầu ra
Chạy đoạn mã trên cho chúng ta kết quả sau:
['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