Tôi đang sử dụng Python sklearn (phiên bản 0,17) để chọn mô hình lý tưởng trên tập dữ liệu. Để thực hiện việc này, tôi đã thực hiện theo các bước sau:python sklearn: sự khác nhau giữa precision_score và điểm số học tập là gì?
- Chia bộ dữ liệu bằng cách sử dụng
cross_validation.train_test_split
vớitest_size = 0.2
. - Sử dụng
GridSearchCV
để chọn bộ phân loại k-lân cận gần nhất lý tưởng trên tập huấn luyện. - Chuyển bộ phân loại được trả lại bởi
GridSearchCV
đếnplot_learning_curve
.plot_learning_curve
đã đưa ra âm mưu được hiển thị bên dưới. - Chạy trình phân loại được trả về bởi
GridSearchCV
trên tập kiểm tra thu được.
Từ cốt truyện, chúng ta có thể thấy rằng điểm số cho giá thầu CPC kích thước đào tạo là khoảng 0,43. Điểm số này là điểm số được trả về bởi hàm sklearn.learning_curve.learning_curve
.
Nhưng khi tôi chạy phân loại tốt nhất trên tập kiểm tra tôi nhận được một số điểm chính xác của 0,61, như được trả về bởi sklearn.metrics.accuracy_score
(dự đoán một cách chính xác nhãn/số nhãn)
Liên kết đến hình ảnh:
này là mã tôi đang sử dụng. Tôi đã không bao gồm chức năng plot_learning_curve
vì nó sẽ chiếm nhiều không gian. Tôi đã lấy số plot_learning_curve
từ here
import pandas as pd
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
from matplotlib import pyplot as plt
import sys
from sklearn import cross_validation
from sklearn.learning_curve import learning_curve
from sklearn.grid_search import GridSearchCV
from sklearn.cross_validation import train_test_split
filename = sys.argv[1]
data = np.loadtxt(fname = filename, delimiter = ',')
X = data[:, 0:-1]
y = data[:, -1] # last column is the label column
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=2)
params = {'n_neighbors': [2, 3, 5, 7, 10, 20, 30, 40, 50],
'weights': ['uniform', 'distance']}
clf = GridSearchCV(KNeighborsClassifier(), param_grid=params)
clf.fit(X_train, y_train)
y_true, y_pred = y_test, clf.predict(X_test)
acc = accuracy_score(y_pred, y_test)
print 'accuracy on test set =', acc
print clf.best_params_
for params, mean_score, scores in clf.grid_scores_:
print "%0.3f (+/-%0.03f) for %r" % (
mean_score, scores.std()/2, params)
y_true, y_pred = y_test, clf.predict(X_test)
#pred = clf.predict(np.array(features_test))
acc = accuracy_score(y_pred, y_test)
print classification_report(y_true, y_pred)
print 'accuracy last =', acc
print
plot_learning_curve(clf, "KNeighborsClassifier",
X, y,
train_sizes=np.linspace(.05, 1.0, 5))
Điều này có bình thường không? Tôi có thể hiểu rằng có thể có sự khác biệt về điểm số nhưng đây là sự khác biệt 0,18, khi chuyển đổi thành tỷ lệ phần trăm là 43% so với 61%. Việc phân loại_report cũng cho một trung bình 0,61 nhớ lại.
Tôi có làm gì sai không? Có sự khác biệt trong cách tính toán số điểm learning_curve
không? Tôi cũng đã cố gắng chuyển chức năng scoring='accuracy'
tới learning_curve
để xem liệu nó có phù hợp với điểm chính xác hay không, nhưng nó không tạo ra bất kỳ sự khác biệt nào.
Bất kỳ lời khuyên nào cũng hữu ích.
Tôi đang sử dụng chất lượng rượu vang (trắng) data set from UCI và cũng đã xóa tiêu đề trước khi chạy mã.
Mã của bạn cho plot_learning_curve() ở đâu? Dường như đây là nơi không nhất quán. Điểm chính xác xác nhận chéo từ GridSearchCV là gần đúng với độ chính xác được tính toán trên tập kiểm tra. – SPKoder
@SPKoder Tôi đoán anh ấy đã sử dụng chức năng từ trang web của sklearn: http://scikit-learn.org/stable/auto_examples/model_selection/plot_learning_curve.html#example-model-selection-plot-learning-curve-py. Btw, tôi đã làm nhiều bài kiểm tra và tôi khá chắc chắn rằng tôi đã tìm thấy một lời giải thích, bạn có thể kiểm tra nó ra và kiểm tra lại giả thuyết của tôi –