So sánh một số bộ phân loại trong scikit-learning trên bộ dữ liệu tổng hợp. Mục đích của ví dụ này là để minh họa bản chất của ranh giới quyết định của các bộ phân loại khác nhau. Điều này nên được thực hiện với một hạt muối, vì trực giác được truyền tải bởi những ví dụ này không nhất thiết phải chuyển sang bộ dữ liệu thực
Đặc biệt trong không gian nhiều chiều, dữ liệu có thể dễ dàng được phân tách tuyến tính hơn và sự đơn giản của các bộ phân loại như Bayes ngây thơ và SVM tuyến tính có thể dẫn đến khả năng khái quát hóa tốt hơn so với các bộ phân loại khác đạt được
Các ô hiển thị các điểm đào tạo có màu đồng nhất và các điểm kiểm tra bán trong suốt. Phía dưới bên phải hiển thị độ chính xác phân loại trên bộ kiểm tra
Trong bài đăng này, chúng tôi sẽ triển khai một số thuật toán học máy trong Python bằng Scikit-learning, công cụ học máy phổ biến nhất dành cho Python. Sử dụng tập dữ liệu đơn giản cho nhiệm vụ huấn luyện bộ phân loại để phân biệt giữa các loại trái cây khác nhau
Mục đích của bài đăng này là xác định thuật toán học máy phù hợp nhất cho vấn đề hiện tại; . Bắt đầu nào
Dữ liệuBộ dữ liệu trái cây được tạo bởi Dr. Iain Murray từ Đại học Edinburgh. Anh ấy đã mua vài chục quả cam, chanh và táo thuộc nhiều loại khác nhau và ghi lại số đo của chúng vào một bảng. Và sau đó các giáo sư tại Đại học Michigan đã định dạng lại dữ liệu trái cây một chút và có thể tải xuống từ đây
Hãy xem một vài hàng đầu tiên của dữ liệu
%matplotlib inline
import pandas as pd
import matplotlib.pyplot as pltfruits = pd.read_table['fruit_data_with_colors.txt']
fruits.head[]
Hình 1
Mỗi hàng của tập dữ liệu đại diện cho một miếng trái cây như được biểu thị bằng một số tính năng có trong các cột của bảng
Chúng tôi có 59 miếng trái cây và 7 tính năng trong bộ dữ liệu
print[fruits.shape]
[59, 7]
Chúng tôi có bốn loại trái cây trong tập dữ liệu
print[fruits['fruit_name'].unique[]]
['táo' 'quýt' 'cam' 'chanh']
Dữ liệu khá cân bằng ngoại trừ tiếng quan thoại. Chúng ta sẽ phải đi với nó
print[fruits.groupby['fruit_name'].size[]]
Hình 2
import seaborn as sns
sns.countplot[fruits['fruit_name'],label="Count"]
plt.show[]
Hình 3Trực quan hóa
- Biểu đồ hộp cho mỗi biến số sẽ cho chúng ta ý tưởng rõ ràng hơn về phân phối của các biến đầu vào
fruits.drop['fruit_label', axis=1].plot[kind='box', subplots=True, layout=[2,2], sharex=False, sharey=False, figsize=[9,9],
title='Box Plot for each input variable']
plt.savefig['fruits_box']
plt.show[]
hinh 4
- Có vẻ như điểm màu có phân phối gần Gaussian
import pylab as pl
fruits.drop['fruit_label' ,axis=1].hist[bins=30, figsize=[9,9]]
pl.suptitle["Histogram for each numeric input variable"]
plt.savefig['fruits_hist']
plt.show[]
Hình 5
- Một số cặp thuộc tính có tương quan [khối lượng và chiều rộng]. Điều này cho thấy một mối tương quan cao và một mối quan hệ có thể dự đoán được
from pandas.tools.plotting import scatter_matrix
from matplotlib import cmfeature_names = ['mass', 'width', 'height', 'color_score']
X = fruits[feature_names]
y = fruits['fruit_label']cmap = cm.get_cmap['gnuplot']
scatter = pd.scatter_matrix[X, c = y, marker = 'o', s=40, hist_kwds={'bins':15}, figsize=[9,9], cmap = cmap]
plt.suptitle['Scatter-matrix for each input variable']
plt.savefig['fruits_scatter_matrix']
Hình 6Tóm tắt thống kê
Hình 7
Chúng ta có thể thấy rằng các giá trị số không có cùng tỷ lệ. Chúng tôi sẽ cần áp dụng tỷ lệ cho tập kiểm tra mà chúng tôi đã tính toán cho tập huấn luyện
Tạo Tập huấn luyện và Kiểm tra và Áp dụng Chia tỷ lệfrom sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split[X, y, random_state=0]from sklearn.preprocessing import MinMaxScalerXây dựng Mô hình
scaler = MinMaxScaler[]
X_train = scaler.fit_transform[X_train]
X_test = scaler.transform[X_test]
Hồi quy logistic
from sklearn.linear_model import LogisticRegressionlogreg = LogisticRegression[]
logreg.fit[X_train, y_train]print['Accuracy of Logistic regression classifier on training set: {:.2f}'
.format[logreg.score[X_train, y_train]]]
print['Accuracy of Logistic regression classifier on test set: {:.2f}'
.format[logreg.score[X_test, y_test]]]
Độ chính xác của bộ phân loại hồi quy Logistic trên tập huấn luyện. 0. 70
Độ chính xác của bộ phân loại hồi quy Logistic trên tập kiểm tra. 0. 40
cây quyết định
print[fruits.shape]
0Độ chính xác của bộ phân loại Cây quyết định trên tập huấn luyện. 1. 00
Độ chính xác của bộ phân loại Cây quyết định trên tập kiểm tra. 0. 73
K-Hàng xóm gần nhất
print[fruits.shape]
1Độ chính xác của bộ phân loại K-NN trên tập huấn luyện. 0. 95
Độ chính xác của bộ phân loại K-NN trên tập kiểm tra. 1. 00
Phân tích phân biệt tuyến tính
print[fruits.shape]
2Độ chính xác của bộ phân loại LDA trên tập huấn luyện. 0. 86
Độ chính xác của bộ phân loại LDA trên tập kiểm tra. 0. 67
Gaussian Naive Bayes
print[fruits.shape]
3Độ chính xác của trình phân loại GNB trên tập huấn luyện. 0. 86
Độ chính xác của bộ phân loại GNB trên tập kiểm tra. 0. 67
Máy véc tơ hỗ trợ
print[fruits.shape]
4Độ chính xác của trình phân loại SVM trên tập huấn luyện. 0. 61
Độ chính xác của bộ phân loại SVM trên bộ kiểm tra. 0. 33
Thuật toán KNN là mô hình chính xác nhất mà chúng tôi đã thử. Ma trận nhầm lẫn cung cấp một dấu hiệu không có lỗi trên tập kiểm tra. Tuy nhiên, bộ kiểm tra rất nhỏ
print[fruits.shape]
5Hình 7Viết ranh giới quyết định của bộ phân loại k-NN
print[fruits.shape]
6Hình 8
print[fruits.shape]
7Hình 9
Đối với tập dữ liệu cụ thể này, chúng tôi đạt được độ chính xác cao nhất khi k=5
Bản tóm tắtTrong bài đăng này, chúng tôi tập trung vào độ chính xác dự đoán. Mục tiêu của chúng tôi là tìm hiểu một mô hình có hiệu suất tổng quát hóa tốt. Một mô hình như vậy tối đa hóa độ chính xác dự đoán. Chúng tôi đã xác định thuật toán học máy phù hợp nhất cho vấn đề hiện tại [tôi. e. phân loại trái cây];
Mã nguồn đã tạo ra bài đăng này có thể được tìm thấy ở đây. Tôi rất vui khi nhận được phản hồi hoặc câu hỏi về bất kỳ vấn đề nào ở trên