Máy vectơ hỗ trợ (SVM) là một lớp thuật toán học máy được giám sát mạnh mẽ và linh hoạt, đặc biệt hiệu quả cho các nhiệm vụ phân loại. Các thư viện như scikit-learn trong Python cung cấp khả năng triển khai SVM mạnh mẽ, giúp những người thực hành cũng như nhà nghiên cứu có thể truy cập được nó. Phản hồi này sẽ làm sáng tỏ cách sử dụng scikit-learn để triển khai phân loại SVM, trình bày chi tiết các chức năng chính có liên quan và cung cấp các ví dụ minh họa.
Giới thiệu về SVM
Máy vectơ hỗ trợ hoạt động bằng cách tìm siêu phẳng phân tách dữ liệu thành các lớp khác nhau tốt nhất. Trong không gian hai chiều, siêu phẳng này đơn giản là một đường thẳng, nhưng ở các chiều cao hơn, nó trở thành một mặt phẳng hoặc siêu phẳng. Siêu phẳng tối ưu là siêu phẳng tối đa hóa lề giữa hai lớp, trong đó lề được xác định là khoảng cách giữa siêu phẳng và các điểm dữ liệu gần nhất từ một trong hai lớp, được gọi là vectơ hỗ trợ.
Scikit-learn và SVM
Scikit-learn là một thư viện Python mạnh mẽ dành cho máy học, cung cấp các công cụ đơn giản và hiệu quả để khai thác dữ liệu và phân tích dữ liệu. Nó được xây dựng trên NumPy, SciPy và matplotlib. Mô-đun `svm` trong scikit-learn cung cấp việc triển khai các thuật toán SVM.
Chức năng chính
1. `svm.SVC`: Đây là lớp chính để thực hiện phân loại bằng SVM. SVC là viết tắt của Phân loại vectơ hỗ trợ.
2. `phù hợp`: Phương pháp này được sử dụng để huấn luyện mô hình trên dữ liệu đã cho.
3. `dự đoán`: Sau khi mô hình được huấn luyện, phương pháp này được sử dụng để dự đoán nhãn lớp cho dữ liệu thử nghiệm đã cho.
4. `điểm`: Phương pháp này dùng để đánh giá độ chính xác của mô hình trên dữ liệu thử nghiệm.
5. `GridSearchCV`: Điều này được sử dụng để điều chỉnh siêu tham số nhằm tìm ra các tham số tốt nhất cho mô hình SVM.
Triển khai phân loại SVM với scikit-learn
Chúng ta hãy xem xét các bước liên quan đến việc triển khai phân loại SVM bằng scikit-learn.
Bước 1: Nhập thư viện
Đầu tiên, nhập các thư viện cần thiết:
python import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC from sklearn.metrics import classification_report, confusion_matrix
Bước 2: Tải tập dữ liệu
Với mục đích trình diễn, chúng tôi sẽ sử dụng bộ dữ liệu Iris, một bộ dữ liệu nổi tiếng trong cộng đồng học máy:
python # Load the Iris dataset iris = datasets.load_iris() X = iris.data y = iris.target
Bước 3: Tách tập dữ liệu
Chia tập dữ liệu thành tập huấn luyện và tập kiểm tra:
python # Split the data into training and testing sets X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Bước 4: Chia tỷ lệ tính năng
Chia tỷ lệ tính năng rất quan trọng đối với SVM vì nó nhạy cảm với tỷ lệ của các tính năng đầu vào:
python # Standardize features by removing the mean and scaling to unit variance scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test)
Bước 5: Huấn luyện mô hình SVM
Khởi tạo trình phân loại SVM và huấn luyện nó trên dữ liệu huấn luyện:
python # Create an instance of SVC and fit the data svc = SVC(kernel='linear', C=1.0) svc.fit(X_train, y_train)
Ở đây, chúng tôi đã sử dụng kernel tuyến tính và đặt tham số chính quy `C` thành 1.0. Tham số kernel chỉ định loại siêu phẳng được sử dụng để phân tách dữ liệu. Các hạt nhân phổ biến bao gồm 'tuyến tính', 'poly' (đa thức), 'rbf' (hàm cơ sở xuyên tâm) và 'sigmoid'.
Bước 6: Đưa ra dự đoán
Sử dụng mô hình được đào tạo để đưa ra dự đoán về dữ liệu thử nghiệm:
python # Predict the class labels for the test set y_pred = svc.predict(X_test)
Bước 7: Đánh giá mô hình
Đánh giá hiệu suất của mô hình bằng cách sử dụng các số liệu như ma trận nhầm lẫn và báo cáo phân loại:
python # Evaluate the model print(confusion_matrix(y_test, y_pred)) print(classification_report(y_test, y_pred))
Ma trận nhầm lẫn cung cấp bản tóm tắt các kết quả dự đoán, trong khi báo cáo phân loại bao gồm độ chính xác, thu hồi, điểm F1 và hỗ trợ cho từng lớp.
Điều chỉnh siêu tham số với GridSearchCV
Điều chỉnh siêu tham số là điều cần thiết để tối ưu hóa hiệu suất của mô hình SVM. `GridSearchCV` của Scikit-learn có thể được sử dụng để thực hiện tìm kiếm toàn diện trên lưới tham số đã chỉ định:
python from sklearn.model_selection import GridSearchCV # Define the parameter grid param_grid = { 'C': [0.1, 1, 10, 100], 'gamma': [1, 0.1, 0.01, 0.001], 'kernel': ['rbf'] } # Create a GridSearchCV instance grid = GridSearchCV(SVC(), param_grid, refit=True, verbose=2) grid.fit(X_train, y_train) # Print the best parameters and the corresponding score print("Best parameters found: ", grid.best_params_) print("Best score: ", grid.best_score_) # Use the best estimator to make predictions grid_predictions = grid.predict(X_test) # Evaluate the model with the best parameters print(confusion_matrix(y_test, grid_predictions)) print(classification_report(y_test, grid_predictions))
Trong ví dụ này, chúng tôi đã tìm kiếm trên một lưới các giá trị cho `C` và `gamma` bằng hạt nhân RBF. Phiên bản `GridSearchCV` điều chỉnh lại mô hình với các tham số tốt nhất được tìm thấy trong quá trình tìm kiếm.
Trực quan hóa ranh giới quyết định
Để hiểu rõ hơn về cách thức hoạt động của bộ phân loại SVM, việc hình dung ranh giới quyết định thường rất hữu ích. Điều này đơn giản hơn trong không gian đặc trưng hai chiều. Dưới đây là một ví dụ sử dụng tập dữ liệu tổng hợp:
python from sklearn.datasets import make_blobs # Generate a synthetic dataset X, y = make_blobs(n_samples=100, centers=2, random_state=6) # Fit the SVM model svc = SVC(kernel='linear', C=1.0) svc.fit(X, y) # Create a mesh to plot the decision boundary h = .02 x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1 y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1 xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h)) # Predict the class for each point in the mesh Z = svc.predict(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) # Plot the decision boundary plt.contourf(xx, yy, Z, alpha=0.8) plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', marker='o') plt.xlabel('Feature 1') plt.ylabel('Feature 2') plt.title('SVM Decision Boundary') plt.show()
Đoạn mã trên tạo ra một tập dữ liệu tổng hợp có hai lớp, khớp với mô hình SVM với nhân tuyến tính và trực quan hóa ranh giới quyết định. Hàm `contourf` được sử dụng để vẽ ranh giới quyết định và biểu đồ phân tán hiển thị các điểm dữ liệu. Scikit-learn cung cấp giao diện toàn diện và thân thiện với người dùng để triển khai phân loại SVM trong Python. Các hàm chính như `svm.SVC`, `fit`, `predict` và `score` rất cần thiết để xây dựng và đánh giá các mô hình SVM. Điều chỉnh siêu tham số với `GridSearchCV` nâng cao hơn nữa hiệu suất của mô hình bằng cách tìm các tham số tối ưu. Trực quan hóa ranh giới quyết định có thể cung cấp những hiểu biết có giá trị về hành vi của bộ phân loại. Bằng cách làm theo các bước này, người ta có thể triển khai và tối ưu hóa phân loại SVM một cách hiệu quả bằng cách sử dụng scikit-learn.
Các câu hỏi và câu trả lời gần đây khác liên quan đến Học máy EITC/AI/MLP với Python:
- Tham số b trong hồi quy tuyến tính (điểm chặn y của đường phù hợp nhất) được tính như thế nào?
- Các vectơ hỗ trợ đóng vai trò gì trong việc xác định ranh giới quyết định của SVM và chúng được xác định như thế nào trong quá trình đào tạo?
- Trong bối cảnh tối ưu hóa SVM, tầm quan trọng của vectơ trọng số `w` và độ lệch `b` là gì và chúng được xác định như thế nào?
- Mục đích của phương pháp `visualize` trong triển khai SVM là gì và nó giúp hiểu được hiệu suất của mô hình như thế nào?
- Phương thức `dự đoán` trong triển khai SVM xác định việc phân loại điểm dữ liệu mới như thế nào?
- Mục tiêu chính của Máy vectơ hỗ trợ (SVM) trong bối cảnh học máy là gì?
- Giải thích tầm quan trọng của ràng buộc (y_i (mathbf{x></i cdot mathbf{w} + b) geq 1) trong tối ưu hóa SVM.
- Mục tiêu của bài toán tối ưu hóa SVM là gì và nó được biểu diễn dưới dạng toán học như thế nào?
- Việc phân loại một bộ tính năng trong SVM phụ thuộc vào dấu của hàm quyết định như thế nào (văn bản{sign}(mathbf{x} _i cdot mathbf{w} + b))?
- Vai trò của phương trình siêu phẳng (mathbf{x} cdot mathbf{w} + b = 0) trong bối cảnh Máy vectơ hỗ trợ (SVM) là gì?
Xem thêm câu hỏi và câu trả lời trong Học máy EITC/AI/MLP với Python
Thêm câu hỏi và câu trả lời:
- Cánh đồng: Trí tuệ nhân tạo
- chương trình: Học máy EITC/AI/MLP với Python (đi đến chương trình chứng nhận)
- Bài học: Hỗ trợ máy vector (đến bài học liên quan)
- Chủ đề: Hỗ trợ tối ưu hóa máy vector (đi đến chủ đề liên quan)
- ôn thi