Bắt đầu với Scikit-learning để phân loại trong Machine Learning

Bắt đầu với Scikit-learning để phân loại trong Machine Learning

Nút nguồn: 1780638
Bắt đầu với Scikit-learning để phân loại trong Machine Learning
Hình ảnh của Editor
 

Scikit-learning là một trong những thư viện máy học được sử dụng phổ biến nhất được xây dựng trong python. Sự phổ biến của nó có thể là do cấu trúc mã dễ dàng và nhất quán, thân thiện với các nhà phát triển mới bắt đầu. Ngoài ra, có sẵn mức độ hỗ trợ cao cùng với tính linh hoạt để tích hợp các chức năng của bên thứ ba giúp thư viện trở nên mạnh mẽ và phù hợp cho sản xuất. Thư viện chứa nhiều mô hình học máy để phân loại, hồi quy và phân cụm. Trong hướng dẫn này, chúng ta sẽ khám phá vấn đề phân loại đa lớp thông qua các thuật toán khác nhau. Hãy đi sâu vào nó và xây dựng các mô hình scikit-learning của chúng ta.

pip install scikit-learn

Chúng tôi sẽ sử dụng bộ dữ liệu “Wine” có sẵn trong mô-đun bộ dữ liệu của scikit-learning. Bộ dữ liệu này bao gồm tổng cộng 178 mẫu và 3 lớp. Tập dữ liệu đã được xử lý trước và được chuyển đổi thành các vectơ đặc trưng, ​​do đó, chúng tôi có thể trực tiếp sử dụng nó để huấn luyện các mô hình của mình.

from sklearn.datasets import load_wine X, y = load_wine(return_X_y=True)

Chúng tôi sẽ giữ 67% dữ liệu để đào tạo và 33% còn lại để thử nghiệm.

from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.33, random_state=42
)

 

Bây giờ, chúng tôi sẽ thử nghiệm với 5 mô hình khác nhau có độ phức tạp khác nhau và đánh giá kết quả của chúng trên tập dữ liệu của chúng tôi.

model_lr = LogisticRegression()
model_lr.fit(X_train, y_train)
y_pred_lr = model_lr.predict(X_test) print("Accuracy Score: ", accuracy_score(y_pred_lr, y_test))
print(classification_report(y_pred_lr, y_test))

 

Đầu ra

Accuracy Score: 0.9830508474576272 precision recall f1-score support 0 1.00 0.95 0.98 21 1 0.96 1.00 0.98 23 2 1.00 1.00 1.00 15 accuracy 0.98 59 macro avg 0.99 0.98 0.98 59
weighted avg 0.98 0.98 0.98 59
model_knn = KNeighborsClassifier(n_neighbors=1)
model_knn.fit(X_train, y_train)
y_pred_knn = model_knn.predict(X_test) print("Accuracy Score:", accuracy_score(y_pred_knn, y_test))
print(classification_report(y_pred_knn, y_test))

 

Đầu ra 

Accuracy Score: 0.7796610169491526 precision recall f1-score support 0 0.90 0.78 0.84 23 1 0.75 0.82 0.78 22 2 0.67 0.71 0.69 14 accuracy 0.78 59 macro avg 0.77 0.77 0.77 59
weighted avg 0.79 0.78 0.78 59

 

Khi thay đổi tham số 'n_neighbors=2', chúng tôi nhận thấy giá trị của độ chính xác giảm. Do đó, nó cho thấy rằng dữ liệu đủ đơn giản và đạt được hiệu quả học tập tốt hơn với một người hàng xóm duy nhất để xem xét. 

Đầu ra 

Accuracy Score: 0.6949152542372882 precision recall f1-score support 0 0.90 0.72 0.80 25 1 0.75 0.69 0.72 26 2 0.33 0.62 0.43 8 accuracy 0.69 59 macro avg 0.66 0.68 0.65 59
weighted avg 0.76 0.69 0.72 59
from sklearn.naive_bayes import GaussianNB model_nb = GaussianNB()
model_nb.fit(X_train, y_train)
y_pred_nb = model_nb.predict(X_test) print("Accuracy Score:", accuracy_score(y_pred_nb, y_test))
print(classification_report(y_pred_nb, y_test))

 

Đầu ra

Accuracy Score: 1.0 precision recall f1-score support 0 1.00 1.00 1.00 20 1 1.00 1.00 1.00 24 2 1.00 1.00 1.00 15 accuracy 1.00 59 macro avg 1.00 1.00 1.00 59
weighted avg 1.00 1.00 1.00 59
from sklearn.tree import DecisionTreeClassifier model_dtclassifier = DecisionTreeClassifier()
model_dtclassifier.fit(X_train, y_train)
y_pred_dtclassifier = model_dtclassifier.predict(X_test) print("Accuracy Score:", accuracy_score(y_pred_dtclassifier, y_test))
print(classification_report(y_pred_dtclassifier, y_test))

 

Đầu ra

Accuracy Score: 0.9661016949152542 precision recall f1-score support 0 0.95 0.95 0.95 20 1 1.00 0.96 0.98 25 2 0.93 1.00 0.97 14 accuracy 0.97 59 macro avg 0.96 0.97 0.97 59
weighted avg 0.97 0.97 0.97 59
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import RandomizedSearchCV def get_best_parameters(): params = { "n_estimators": [10, 50, 100], "max_features": ["auto", "sqrt", "log2"], "max_depth": [5, 10, 20, 50], "min_samples_split": [2, 4, 6], "min_samples_leaf": [2, 4, 6], "bootstrap": [True, False], } model_rfclassifier = RandomForestClassifier(random_state=42) rf_randomsearch = RandomizedSearchCV( estimator=model_rfclassifier, param_distributions=params, n_iter=5, cv=3, verbose=2, random_state=42, ) rf_randomsearch.fit(X_train, y_train) best_parameters = rf_randomsearch.best_params_ print("Best Parameters:", best_parameters) return best_parameters parameters_rfclassifier = get_best_parameters() model_rfclassifier = RandomForestClassifier( **parameters_rfclassifier, random_state=42
) model_rfclassifier.fit(X_train, y_train) y_pred_rfclassifier = model_rfclassifier.predict(X_test) print("Accuracy Score:", accuracy_score(y_pred_rfclassifier, y_test))
print(classification_report(y_pred_rfclassifier, y_test))

 

Đầu ra


Best Parameters: {'n_estimators': 100, 'min_samples_split': 6, 'min_samples_leaf': 4, 'max_features': 'log2', 'max_depth': 5, 'bootstrap': True}
Accuracy Score: 0.9830508474576272 precision recall f1-score support 0 1.00 0.95 0.98 21 1 0.96 1.00 0.98 23 2 1.00 1.00 1.00 15 accuracy 0.98 59 macro avg 0.99 0.98 0.98 59
weighted avg 0.98 0.98 0.98 59

 

Trong thuật toán này, chúng tôi đã thực hiện một số điều chỉnh siêu tham số để đạt được độ chính xác cao nhất. Chúng tôi đã xác định một lưới tham số bao gồm nhiều giá trị để chọn cho từng tham số. Hơn nữa, chúng tôi đã sử dụng thuật toán CV tìm kiếm ngẫu nhiên để tìm kiếm không gian tham số tốt nhất cho mô hình. Cuối cùng, chúng tôi cung cấp các tham số thu được cho bộ phân loại và huấn luyện mô hình. 

mô hình tính chính xác Các quan sát
Hồi quy logistic 98.30% Đạt được độ chính xác cao. Mô hình có khả năng khái quát hóa tốt trên tập dữ liệu thử nghiệm.
K-Những người hàng xóm gần nhất 77.96% Thuật toán không thể học tốt biểu diễn dữ liệu.
Vịnh Naive 100% Mô hình ít phức tạp hơn do đó nó phù hợp với dữ liệu để đạt được độ chính xác tuyệt đối.
Bộ phân loại cây quyết định 96.61% Đạt độ chính xác khá.
Bộ phân loại rừng ngẫu nhiên 98.30% Là một cách tiếp cận dựa trên tập hợp, nó hoạt động tốt hơn Cây quyết định. Thực hiện điều chỉnh siêu tham số làm cho nó đạt được độ chính xác tương tự như hồi quy logistic.

Trong hướng dẫn này, chúng ta đã học cách bắt đầu xây dựng và đào tạo các mô hình machine learning trong scikit-learn. Chúng tôi đã triển khai và đánh giá một số thuật toán để có ý tưởng cơ bản về hiệu suất của chúng. Người ta luôn có thể áp dụng các chiến lược nâng cao về kỹ thuật tính năng, điều chỉnh siêu tham số hoặc đào tạo để cải thiện hiệu suất. Để đọc thêm về các chức năng mà scikit-learn cung cấp, hãy xem tài liệu chính thức - Giới thiệu về máy học với scikit-learning, Học máy trong Python với scikit-learning.

 
 
Yesha Shastri là một nhà phát triển và nhà văn đam mê AI đang theo đuổi bằng Thạc sĩ về Máy học của Đại học Montréal. Yesha quan tâm đến việc khám phá các kỹ thuật AI có trách nhiệm để giải quyết các thách thức mang lại lợi ích cho xã hội và chia sẻ kiến ​​thức của mình với cộng đồng.
 

Dấu thời gian:

Thêm từ Xe đẩy