Phân loại cây quyết định trong python

Cây quyết định là một trong những thuật toán học máy được giám sát thường xuyên và được sử dụng rộng rãi nhất, có thể thực hiện cả nhiệm vụ hồi quy và phân loại. Trực giác đằng sau thuật toán cây quyết định rất đơn giản nhưng cũng rất mạnh mẽ

Đối với mỗi thuộc tính trong tập dữ liệu, thuật toán cây quyết định tạo thành một nút, trong đó thuộc tính quan trọng nhất được đặt ở nút gốc. Để đánh giá, chúng tôi bắt đầu từ nút gốc và đi xuống cây bằng cách đi theo nút tương ứng đáp ứng điều kiện hoặc "quyết định" của chúng tôi. Quá trình này tiếp tục cho đến khi gặp nút lá chứa dự đoán hoặc kết quả của cây quyết định

Điều này thoạt nghe có vẻ hơi phức tạp, nhưng điều mà bạn có thể không nhận ra là bạn đã sử dụng cây quyết định để đưa ra quyết định trong suốt cuộc đời mình mà không hề hay biết. Hãy xem xét một tình huống trong đó một người hỏi bạn mượn ô tô của bạn trong một ngày và bạn phải đưa ra quyết định có cho họ mượn ô tô hay không. Có một số yếu tố giúp xác định quyết định của bạn, một số trong số đó đã được liệt kê dưới đây

  1. Người này là bạn thân hay chỉ là người quen?
  2. Là người yêu cầu chiếc xe lần đầu tiên?
  3. Lần trước họ trả xe có bị hư không?

Cây quyết định cho kịch bản nói trên trông như thế này

Ưu điểm của cây quyết định

Có một số lợi thế của việc sử dụng cây quyết định để phân tích dự đoán

  1. Cây quyết định có thể được sử dụng để dự đoán cả giá trị liên tục và giá trị rời rạc i. e. chúng hoạt động tốt cho cả nhiệm vụ hồi quy và phân loại
  2. Chúng đòi hỏi ít nỗ lực hơn để đào tạo thuật toán
  3. Chúng có thể được sử dụng để phân loại dữ liệu có thể phân tách phi tuyến tính
  4. Chúng rất nhanh và hiệu quả so với KNN và các thuật toán phân loại khác

Triển khai cây quyết định với Python Scikit Learn

Trong phần này, chúng tôi sẽ triển khai thuật toán cây quyết định bằng thư viện Scikit-Learn của Python. Trong các ví dụ sau, chúng tôi sẽ giải quyết cả vấn đề phân loại cũng như hồi quy bằng cách sử dụng cây quyết định

Ghi chú. Cả tác vụ phân loại và hồi quy đều được thực hiện trong Jupyter iPython Notebook

Trong phần này, chúng tôi sẽ dự đoán xem một tờ tiền là thật hay giả tùy thuộc vào bốn thuộc tính khác nhau của hình ảnh tờ tiền. Các thuộc tính là Phương sai của hình ảnh biến đổi wavelet, độ cong của hình ảnh, entropy và độ lệch của hình ảnh

tập dữ liệu

Bộ dữ liệu cho nhiệm vụ này có thể được tải xuống từ liên kết này

https. //lái xe. Google. com/open?id=13nw-uRXPY8XIZQxKRNZ3yYlho-CYm_Qt

Để biết thêm thông tin chi tiết về tập dữ liệu này, hãy xem kho lưu trữ UCI ML cho tập dữ liệu này

Các bước còn lại để triển khai thuật toán này trong Scikit-Learn giống hệt với bất kỳ vấn đề học máy điển hình nào, chúng tôi sẽ nhập thư viện và bộ dữ liệu, thực hiện một số phân tích dữ liệu, chia dữ liệu thành các tập huấn luyện và kiểm tra, huấn luyện thuật toán, đưa ra dự đoán,

Nhập thư viện

Đoạn script sau nhập các thư viện cần thiết

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
Nhập tập dữ liệu

Vì tệp của chúng tôi ở định dạng CSV, nên chúng tôi sẽ sử dụng phương pháp

dataset.shape
1 của gấu trúc để đọc tệp dữ liệu CSV của chúng tôi. Thực thi đoạn script sau để làm như vậy

dataset = pd.read_csv["D:/Datasets/bill_authentication.csv"]

Trong trường hợp này, tệp "bill_authentication. csv" nằm trong thư mục "Datasets" của ổ đĩa "D". Bạn nên thay đổi đường dẫn này theo thiết lập hệ thống của riêng bạn

Phân tích dữ liệu

Thực hiện lệnh sau để xem số lượng hàng và cột trong tập dữ liệu của chúng tôi

dataset.shape

Đầu ra sẽ hiển thị "[1372,5]", có nghĩa là tập dữ liệu của chúng tôi có 1372 bản ghi và 5 thuộc tính

Thực hiện lệnh sau để kiểm tra năm bản ghi đầu tiên của tập dữ liệu

dataset.head[]

Đầu ra sẽ trông như thế này

Phương saiSkewnessCurtosisEntropyClass03. 621608. 6661-2. 8073-0. 44699014. 545908. 1674-2. 4586-1. 46210023. 86600-2. 63831. 92420. 10645033. 456609. 5228-4. 0112-3. 59440040. 32924-4. 45524. 5718-0. 988800Chuẩn bị dữ liệu

Trong phần này, chúng tôi sẽ chia dữ liệu của mình thành các thuộc tính và nhãn, sau đó sẽ chia dữ liệu kết quả thành cả tập huấn luyện và tập kiểm tra. Bằng cách này, chúng tôi có thể đào tạo thuật toán của mình trên một tập dữ liệu và sau đó kiểm tra nó trên một tập dữ liệu hoàn toàn khác mà thuật toán chưa thấy. Điều này cung cấp cho bạn cái nhìn chính xác hơn về cách thuật toán được đào tạo của bạn sẽ thực sự hoạt động

Để chia dữ liệu thành các thuộc tính và nhãn, hãy thực thi đoạn mã sau

X = dataset.drop['Class', axis=1]
y = dataset['Class']

Ở đây, biến

dataset.shape
2 chứa tất cả các cột từ tập dữ liệu, ngoại trừ cột "Lớp", là nhãn. Biến
dataset.shape
3 chứa các giá trị từ cột "Lớp". Biến
dataset.shape
2 là tập thuộc tính của chúng ta và biến
dataset.shape
3 chứa các nhãn tương ứng

Bước tiền xử lý cuối cùng là chia dữ liệu của chúng tôi thành các tập huấn luyện và kiểm tra. Thư viện

dataset.shape
6 của Scikit-Learn chứa phương pháp
dataset.shape
7 mà chúng tôi sẽ sử dụng để phân chia ngẫu nhiên dữ liệu thành các tập huấn luyện và kiểm tra. Thực hiện đoạn mã sau để làm như vậy

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split[X, y, test_size=0.20]

Trong đoạn mã trên, tham số

dataset.shape
8 chỉ định tỷ lệ của tập kiểm tra mà chúng tôi sử dụng để chia 20% dữ liệu vào tập kiểm tra và 80% cho huấn luyện

Đào tạo và đưa ra dự đoán

Khi dữ liệu đã được chia thành các tập huấn luyện và kiểm tra, bước cuối cùng là huấn luyện thuật toán cây quyết định trên dữ liệu này và đưa ra dự đoán. Scikit-Learn chứa thư viện

dataset.shape
9, chứa các lớp/phương thức dựng sẵn cho các thuật toán cây quyết định khác nhau. Vì chúng ta sẽ thực hiện một nhiệm vụ phân loại ở đây, nên chúng ta sẽ sử dụng lớp
dataset.head[]
0 cho ví dụ này. Phương thức
dataset.head[]
1 của lớp này được gọi để huấn luyện thuật toán trên dữ liệu huấn luyện, được truyền dưới dạng tham số cho phương thức
dataset.head[]
1. Thực thi đoạn script sau để huấn luyện thuật toán

from sklearn.tree import DecisionTreeClassifier
classifier = DecisionTreeClassifier[]
classifier.fit[X_train, y_train]

Bây giờ trình phân loại của chúng ta đã được đào tạo, hãy đưa ra dự đoán về dữ liệu thử nghiệm. Để đưa ra dự đoán, phương pháp

dataset.head[]
3 của lớp
dataset.head[]
0 được sử dụng. Hãy xem đoạn mã sau để sử dụng

y_pred = classifier.predict[X_test]
Đánh giá thuật toán

Tại thời điểm này, chúng tôi đã đào tạo thuật toán của mình và đưa ra một số dự đoán. Bây giờ chúng ta sẽ xem thuật toán của chúng ta chính xác đến mức nào. Đối với các nhiệm vụ phân loại, một số chỉ số thường được sử dụng là ma trận nhầm lẫn, độ chính xác, thu hồi và điểm F1. Thật may mắn cho chúng tôi Scikit=-Thư viện

dataset.head[]
5 của Learn chứa các phương pháp
dataset.head[]
6 và
dataset.head[]
7 có thể được sử dụng để tính toán các chỉ số này cho chúng tôi

from sklearn.metrics import classification_report, confusion_matrix
print[confusion_matrix[y_test, y_pred]]
print[classification_report[y_test, y_pred]]

Điều này sẽ tạo ra đánh giá sau

Hãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó

[[142    2]
    2  129]]
              precision   recall   f1-score   support

           0       0.99     0.99       0.99       144
           1       0.98     0.98       0.98       131

 avg / total       0.99     0.99       0.99       275

Từ ma trận nhầm lẫn, bạn có thể thấy rằng trong số 275 trường hợp thử nghiệm, thuật toán của chúng tôi chỉ phân loại sai 4. Đây là 98. độ chính xác 5%. Không tệ lắm

2. Cây quyết định hồi quy

Quá trình giải bài toán hồi quy với cây quyết định sử dụng Scikit Learn rất giống với quá trình phân loại. Tuy nhiên để hồi quy chúng ta sử dụng lớp DecisionTreeRegressor của thư viện cây. Ngoài ra, các số liệu đánh giá cho hồi quy khác với các số liệu phân loại. Phần còn lại của quá trình là gần như giống nhau

tập dữ liệu

Tập dữ liệu chúng tôi sẽ sử dụng cho phần này giống như tập dữ liệu chúng tôi đã sử dụng trong bài viết Hồi quy tuyến tính. Chúng tôi sẽ sử dụng bộ dữ liệu này để thử và dự đoán mức tiêu thụ khí đốt [tính bằng triệu gallon] ở 48 tiểu bang của Hoa Kỳ dựa trên thuế khí đốt [tính bằng xu], thu nhập bình quân đầu người [đô la], đường cao tốc trải nhựa [tính bằng dặm] và tỷ lệ dân số có

Bộ dữ liệu có sẵn tại liên kết này

https. //lái xe. Google. com/open?id=1mVmGNx6cbfvRHC_DvF12ZL3wGLSHD9f_

Các chi tiết của tập dữ liệu có thể được tìm thấy từ nguồn ban đầu

Hai cột đầu tiên trong tập dữ liệu trên không cung cấp bất kỳ thông tin hữu ích nào, do đó chúng đã bị xóa khỏi tệp dữ liệu

Bây giờ, hãy áp dụng thuật toán cây quyết định của chúng tôi trên dữ liệu này để thử và dự đoán mức tiêu thụ gas từ dữ liệu này

Nhập thư viện
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
Nhập tập dữ liệu
dataset = pd.read_csv["D:/Datasets/bill_authentication.csv"]
1Phân tích dữ liệu

Chúng tôi sẽ lại sử dụng chức năng

dataset.head[]
8 của khung dữ liệu để xem dữ liệu của chúng tôi thực sự trông như thế nào

dataset.head[]

Đầu ra trông như thế này

Petrol_taxAverage_incomePaved_HighwaysPopulation_Driver_license[%]Petrol_Consumption09. 0357119760. 52554119. 0409212500. 57252429. 0386515860. 58056137. 5487023510. 52941448. 043994310. 544410

Để xem chi tiết thống kê của tập dữ liệu, hãy thực hiện lệnh sau

dataset = pd.read_csv["D:/Datasets/bill_authentication.csv"]
3Petrol_taxAverage_incomePaved_HighwaysPopulation_Driver_license[%]Petrol_Consumptioncount48. 00000048. 00000048. 00000048. 00000048. 000000mean7. 6683334241. 8333335565. 4166670. 570333576. 770833std0. 950770573. 6237683491. 5071660. 055470111. 885816min5. 0000003063. 000000431. 0000000. 451000344. 00000025%7. 0000003739. 0000003110. 2500000. 529750509. 50000050%7. 5000004298. 0000004735. 5000000. 564500568. 50000075%8. 1250004578. 7500007156. 0000000. 595250632. 750000max10. 000005342. 00000017782. 0000000. 724000986. 000000Chuẩn bị dữ liệu

Cũng giống như nhiệm vụ phân loại, trong phần này, chúng ta sẽ chia dữ liệu của mình thành các thuộc tính và nhãn, sau đó thành các tập huấn luyện và tập kiểm tra

Thực hiện các lệnh sau để chia dữ liệu thành nhãn và thuộc tính

dataset = pd.read_csv["D:/Datasets/bill_authentication.csv"]
4

Ở đây, biến

dataset.shape
2 chứa tất cả các cột từ tập dữ liệu, ngoại trừ cột 'Petrol_Consumption', là nhãn. Biến
dataset.shape
3 chứa các giá trị từ cột 'Petrol_Consumption', có nghĩa là biến
dataset.shape
2 chứa tập thuộc tính và biến
dataset.shape
3 chứa các nhãn tương ứng

Thực thi đoạn mã sau để chia dữ liệu của chúng tôi thành các tập huấn luyện và kiểm tra

dataset = pd.read_csv["D:/Datasets/bill_authentication.csv"]
5Đào tạo và đưa ra dự đoán

Như đã đề cập trước đó, đối với tác vụ hồi quy, chúng tôi sẽ sử dụng một lớp sklearn khác với lớp chúng tôi đã làm cho tác vụ phân loại. Lớp chúng ta sẽ sử dụng ở đây là lớp

X = dataset.drop['Class', axis=1]
y = dataset['Class']
3, trái ngược với lớp
dataset.head[]
0 trước đây

Để huấn luyện cây, chúng ta sẽ khởi tạo lớp

X = dataset.drop['Class', axis=1]
y = dataset['Class']
3 và gọi phương thức
dataset.head[]
1

dataset = pd.read_csv["D:/Datasets/bill_authentication.csv"]
6

Để đưa ra dự đoán trên tập kiểm tra, sử dụng phương pháp

dataset.head[]
3

dataset = pd.read_csv["D:/Datasets/bill_authentication.csv"]
7

Bây giờ, hãy so sánh một số giá trị dự đoán của chúng tôi với các giá trị thực tế và xem chúng tôi đã chính xác đến mức nào

dataset = pd.read_csv["D:/Datasets/bill_authentication.csv"]
8

Đầu ra trông như thế này

ActualPredicted41699631. 02561524. 012525510. 036640704. 038648524. 09498510. 024460510. 013508603. 035644631. 0

Hãy nhớ rằng trong trường hợp của bạn, các bản ghi được so sánh có thể khác nhau, tùy thuộc vào việc phân tách đào tạo và kiểm tra. Vì phương pháp

dataset.shape
7 phân chia dữ liệu một cách ngẫu nhiên nên chúng tôi có thể sẽ không có cùng tập huấn luyện và tập kiểm tra

Đánh giá thuật toán

Để đánh giá hiệu suất của thuật toán hồi quy, các số liệu thường được sử dụng là lỗi tuyệt đối trung bình, lỗi bình phương trung bình và lỗi bình phương trung bình gốc. Thư viện Scikit-Learn chứa các hàm có thể giúp tính toán các giá trị này cho chúng tôi. Để làm như vậy, hãy sử dụng mã này từ gói

dataset.head[]
5

dataset = pd.read_csv["D:/Datasets/bill_authentication.csv"]
9

Đầu ra sẽ trông giống như thế này

dataset.shape
0

Lỗi tuyệt đối trung bình cho thuật toán của chúng tôi là 54. 7, ít hơn 10 phần trăm giá trị trung bình của tất cả các giá trị trong cột 'Petrol_Consumption'. Điều này có nghĩa là thuật toán của chúng tôi đã dự đoán tốt

Tiến xa hơn - Cầm tay chỉ việc End-to-End Project

Bản chất tò mò của bạn khiến bạn muốn tiến xa hơn? .

Trong dự án có hướng dẫn này - bạn sẽ học cách xây dựng các mô hình học máy truyền thống mạnh mẽ cũng như các mô hình học sâu, sử dụng Học tập đồng bộ và đào tạo những người học meta để dự đoán giá nhà từ một loạt các mô hình Scikit-Learn và Keras

Sử dụng Keras, API học sâu được xây dựng dựa trên Tensorflow, chúng tôi sẽ thử nghiệm các kiến ​​trúc, xây dựng một tập hợp các mô hình xếp chồng lên nhau và huấn luyện mạng thần kinh siêu học viên [mô hình cấp 1] để tìm ra giá của một ngôi nhà

Học sâu thật tuyệt vời - nhưng trước khi dùng đến nó, bạn cũng nên cố gắng giải quyết vấn đề bằng các kỹ thuật đơn giản hơn, chẳng hạn như với các thuật toán học nông. Hiệu suất cơ bản của chúng tôi sẽ dựa trên thuật toán Hồi quy rừng ngẫu nhiên. Ngoài ra - chúng ta sẽ khám phá việc tạo các nhóm mô hình thông qua Scikit-Learn thông qua các kỹ thuật như đóng gói và bỏ phiếu

Đây là một dự án từ đầu đến cuối và giống như tất cả các dự án Học máy, chúng tôi sẽ bắt đầu với - với Phân tích dữ liệu khám phá, tiếp theo là Tiền xử lý dữ liệu và cuối cùng là Xây dựng các mô hình học nông và học sâu để phù hợp với dữ liệu mà chúng tôi đã khám phá và

Phần kết luận

Trong bài viết này, chúng tôi đã chỉ ra cách bạn có thể sử dụng thư viện Scikit-Learn phổ biến của Python để sử dụng cây quyết định cho cả tác vụ phân loại và hồi quy. Mặc dù bản thân nó là một thuật toán khá đơn giản, nhưng việc triển khai cây quyết định với Scikit-Learn thậm chí còn dễ dàng hơn

Làm cách nào để cài đặt trình phân loại cây quyết định trong Python?

Tìm thuộc tính tốt nhất và đặt nó vào nút gốc của cây. Bây giờ, hãy chia tập huấn luyện của tập dữ liệu thành các tập con. Trong khi tạo tập hợp con, hãy đảm bảo rằng mỗi tập hợp con của tập dữ liệu huấn luyện phải có cùng giá trị cho một thuộc tính. Tìm các nút lá trong tất cả các nhánh bằng cách lặp lại 1 và 2 trên mỗi tập hợp con

Trình phân loại trong cây quyết định là gì?

Bộ phân loại cây quyết định [Pang-Ning et al. , 2006] tạo mô hình phân loại bằng cách xây dựng cây quyết định . Mỗi nút trong cây chỉ định một phép thử trên một thuộc tính, mỗi nhánh đi xuống từ nút đó tương ứng với một trong các giá trị có thể có của thuộc tính đó.

Phương pháp Python nào được sử dụng để xây dựng cây quyết định?

Để tạo cây quyết định, tất cả dữ liệu phải ở dạng số. Chúng tôi phải chuyển đổi các cột không phải là số 'Quốc tịch' và 'Đi' thành các giá trị số. Pandas có phương thức map[] lấy từ điển có thông tin về cách chuyển đổi giá trị

Sự khác biệt giữa XGBoost và cây quyết định là gì?

Rừng ngẫu nhiên và XGBoost là các thuật toán cây quyết định trong đó dữ liệu huấn luyện được lấy theo một cách khác. XGBoost huấn luyện cụ thể dữ liệu tăng độ dốc và cây quyết định tăng độ dốc . Các phương pháp đào tạo được sử dụng bởi cả hai thuật toán là khác nhau.

Chủ Đề