Cây quyết định để phân loại hình ảnh 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 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ậ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. 988800
Chuẩ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 tôi 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

dataset.shape
2

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 thành 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 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án

dataset.shape
8

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 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ụng

dataset = pd.read_csv("D:/Datasets/bill_authentication.csv")
1
Đá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 số liệu này cho chúng tôi

dataset = 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")
6

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")
1
Phâ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

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. 000000
Chuẩ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 đó

Để 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? . "Dự đoán giá nhà thực tế - Học máy bằng Python"

Cây quyết định để phân loại hình ảnh 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

Cây quyết định có thể được sử dụng để phân loại hình ảnh không?

Một cách để thực hiện phân loại hình ảnh là sử dụng thuật toán dựa trên cây quyết định . Các thuật toán dựa trên cây quyết định là một phần quan trọng của phương pháp phân loại. Ưu điểm chính của chúng là không có giả định về phân phối dữ liệu và chúng thường tính toán rất nhanh [11].

Random Forest có tốt cho việc phân loại hình ảnh không?

Bộ phân loại rừng ngẫu nhiên cho thấy hiệu suất tốt nhất với độ chính xác 47% tiếp theo là KNN với độ chính xác 34%, NB với độ chính xác 30% và Cây quyết định với độ chính xác 27%. Do đó, Rừng ngẫu nhiên thể hiện hiệu suất tốt nhất và Cây quyết định kém nhất.

Thuật toán học máy nào là tốt nhất để phân loại hình ảnh?

Hai thuật toán phổ biến được sử dụng để phân loại hình ảnh không giám sát là ' K-mean ' và 'ISODATA. ' K-means là một thuật toán phân loại không giám sát, nhóm các đối tượng thành k nhóm dựa trên đặc điểm của chúng.

Cây quyết định trong xử lý ảnh là gì?

Cây quyết định. Cây quyết định là thuật toán học có giám sát không tham số, được sử dụng cho cả nhiệm vụ phân loại và hồi quy . Nó có cấu trúc cây, phân cấp, bao gồm nút gốc, các nhánh, nút bên trong và nút lá.