Python 回忆录
2021/2/7
交叉验证
是为了让模型更加稳定可信
交叉验证会把训练集继续分为训练集和验证集。确定好把数据分成几等分就是 几折交叉验证K-fold cross-validation
比如说四折交叉验证,其实就是把数据集分为4份 其中验证集是其中的一份,然后验证4次。这样4个训练集通过模型后会有4个准确率,并求出平均值。
网格搜索
像算法模型中有很多的参数需要手动设定(如k近邻算法中的k 值)这种就是超参数。但是每次设定一个值后,再运行一次模型看结果,每次设定值就需要重新操作一遍 的方法很复杂。所以会对模型,提前预设几种超参数组合,然后每组超参数会采用交叉验证来进行评估,最后选择出最优的参数组合。
像k近邻算法中 k值预设3,5,7三个值。再运用10折交叉验证,得到3种不同的平均准确率,进行比较就能知道3个k值中哪个k值是最好的。如果模型中有两个超参数,比如a[2,3,5], b[6,5] 那么就运用网格搜索两两组合 进行验证 [2,6],[2,5],[3,6],[3,5],[5,6][5,5] 6种组合代入模型 进行验证。
网格搜索交叉验证API
sklearn,model_selection.GridSearchCV(estimator,param_grid=None,cv=None)
对估计器的指定参数进行详尽搜索
- estimator:估计器对象
- param_grid:估计器参数(dict){“n_neighbors”:[1,3,5]}字典类型
- cv:指定几折交叉验证
- fit:输入训练数据
- score:准确率
- 结果分析
- best_score_:在交叉验证中验证的最好结果
- best_estimator_:最好的参数模型
- cv_results_:每次交叉验证后的测试集准确率结果和训练集准确率结果
先用k近邻法 确定最好的k值。注意如果初始的knn设定k值了,运用网格搜索交叉验证时就先不要设定k值了
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler
import pandas as pd
# 注意返回值, 训练集 train x_train, y_train 测试集 test x_test, y_test
x_train,