交叉验证:

拿到训练数据,分为训练集和验证集。

将数据分成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_)

网格搜索有个问题就是如果给了参数过多,他就会把这些参数全部拿去训练使用,但是他不会将不好的参数舍弃。所以如果参数过多,结果有可能反而不好。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐