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
- Người này là bạn thân hay chỉ là người quen?
- Là người yêu cầu chiếc xe lần đầu tiên?
- 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
- 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
- Chúng đòi hỏi ít nỗ lực hơn để đào tạo thuật toán
- 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
- 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ệuBộ 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ệuVì tệp của chúng tôi ở định dạng CSV nên chúng tôi sẽ sử dụng phương thức
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ậydataset = 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
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ệuTrong 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 tôi và biến dataset.shape
3 chứa các nhãn tương ứngBướ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ậydataset.shape
2Trong đ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 thành tập kiểm tra và 80% cho huấn luyệnĐào tạo và đưa ra dự đoánKhi 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 tích hợp 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ándataset.shape
8Bâ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 thức
dataset.head[]
3 của lớp dataset.head[]
0 được sử dụng. Hãy xem đoạn mã sau để sử dụngdataset = pd.read_csv["D:/Datasets/bill_authentication.csv"]
1Đánh giá thuật toánTạ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 số liệu này cho chúng tôidataset = pd.read_csv["D:/Datasets/bill_authentication.csv"]
5Đ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ó
dataset = pd.read_csv["D:/Datasets/bill_authentication.csv"]
6Từ 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ệuTậ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ệnimport pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
Nhập tập dữ liệudataset = pd.read_csv["D:/Datasets/bill_authentication.csv"]
1Phân tích dữ liệuChú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àodataset.head[]
Đầu ra trông như thế này
Xăng dầu_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ệuCũ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 ứngThự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ánNhư đã đề 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 đóĐể 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[]
1dataset = 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[]
3dataset = pd.read_csv["D:/Datasets/bill_authentication.csv"]
7Bâ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. 0Hã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[]
5dataset = pd.read_csv["D:/Datasets/bill_authentication.csv"]
9Đầu ra sẽ trông giống như thế này
dataset.shape
0Lỗ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? . "Dự đoán giá nhà thực tế - Học máy bằng Python"
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à
Sự 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