best_param_
个GridSearchCV
个documentation:
best_params_
:dict在保留数据上获得最佳结果的参数设置。
从那以后,我假设了#34;最好的结果"意味着最佳分数(最高准确度/最低误差)和最低方差我的k倍。
但是,我们在cv_results_
中看到的情况并非如此:
此处best_param_
返回k=5
而不是k=9
mean_test_score
,其中方差最佳。
我知道我可以使用best_param
的输出实现我自己的评分函数或我自己的cv_results_
函数。但是,首先不考虑方差的原因是什么?
我在这种情况下运行,将KNN应用于iris数据集,其中70%的列车拆分和3次交叉验证。
编辑:示例代码:
import numpy as np
import pandas as pd
from sklearn import neighbors
from sklearn import model_selection
from sklearn import datasets
X = datasets.load_iris().data
y = datasets.load_iris().target
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, train_size=0.7, test_size=0.3, random_state=62)
knn_model = neighbors.KNeighborsClassifier()
param_grid = [{"n_neighbors" : np.arange(1, 31, 2)}]
grid_search = model_selection.GridSearchCV(knn_model, param_grid, cv=3, return_train_score=False)
grid_search.fit(X_train, y_train.ravel())
results = pd.DataFrame(grid_search.cv_results_)
k_opt = grid_search.best_params_.get("n_neighbors")
print("Value returned by best_param_:",k_opt)
results.head(6)
它会产生与上图不同的表,但情况相同:对于k = 5 mean_test_score
和std_test_score
是最佳的。但是best_param_
返回k = 1。
答案 0 :(得分:2)
# Find the best parameters by comparing on the mean validation score:
# note that `sorted` is deterministic in the way it breaks ties
best = sorted(grid_scores, key=lambda x: x.mean_validation_score,
reverse=True)[0]
它按mean_val得分进行排序。 sorted()保留了tie的现有顺序,因此在这种情况下,k = 1是最好的。
我同意你的想法,并认为可以提交PR以获得更好的打破逻辑。
答案 1 :(得分:-1)
在Grid Search中,cv_results_提供std_test_score,它是得分的标准偏差。由此,您可以通过平方来计算方差误差