模型选择与调优(交叉验证&网格搜索)
交叉验证:拿到训练数据,分为训练集和验证集。将数据分成5分,其中一份作为验证集,经过5次测试,每次更换不同的验证集,得到5组模型的结果,最终取平均值,又称5折交叉验证。交叉验证的目的是让结果更具可信度。网格搜索:通常情况下,很多超参数是需要我们手动指定的,但是说动过程繁杂,所以需要需要对模型预设几种超参数组合,每组超参数都采用交叉验证进行评估。最后选出最优的参数组合建立模型。通常情况加网格搜索和交
·
交叉验证:
拿到训练数据,分为训练集和验证集。
将数据分成5分,其中一份作为验证集,经过5次测试,每次更换不同的验证集,得到5组模型的结果,最终取平均值,又称5折交叉验证。
交叉验证的目的是让结果更具可信度,是让模型更稳定的一种方法。
网格搜索:
通常情况下,很多超参数是需要我们手动指定的,但是说动过程繁杂,所以需要需要对模型预设几种超参数组合,每组超参数都采用交叉验证进行评估。最后选出最优的参数组合建立模型。
通常情况加网格搜索和交叉验证一同使用。
API
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import GridSearchCV
param = {"n_neighbors": [3, 5, 10]}
# 进行网格搜索,cx=2:做2折交叉验证
gc = GridSearchCV(knn, param_grid=param, cv=2)
# 另一种方法只做交叉验证
cross_val_score(knn, boston.data, boston.target, cv=10)
gc.fit(X_train,y_train)
gc.predict(X_test)
print("测试集上的准确率:", gc.score(X_test, y_test))
print("在交叉验证中最好的结果:", gc.best_score_)
print("选择的最好的模型是:", gc.best_estimator_)
print("每个超参数交叉验证的结果:", gc.cv_results_)
网格搜索有个问题就是如果给了参数过多,他就会把这些参数全部拿去训练使用,但是他不会将不好的参数舍弃。所以如果参数过多,结果有可能反而不好。
更多推荐
已为社区贡献3条内容
所有评论(0)