交差验证与网格搜索代码实例,这里仍然是鸢尾花案例,分类问题。
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
# 1、加载数据,使用sklearn预置鸢尾花数据,原数据是json格式
data = load_iris()
# 2、划分数据集,特征值data.data,目标值data.target,test_size测试集大小, random_state随机数种子
x_train, x_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2, random_state=22)
# 3、特征预处理,标准化,分别对训练集、测试集特征值用不同方法进行处理
pre = StandardScaler()
x_train = pre.fit_transform(x_train)
x_test = pre.transform(x_test)
# 4、交差验证、网格搜索。
# 先创建一个模型model,这时n_neighbors可以随便定义
# 再创建一个n_neighbors参数字典paras_grid,要注意的是这个字典里的K值由人工指定
# 创建交差验证/网格搜索对象,这里cv=4是指划分4个数据集并训练4次、评估4次
# 训练模型
# model = KNeighborsClassifier(n_neighbors=1)
# paras_grid = {'n_neighbors': [4, 5, 7, 9]}
# estimator = GridSearchCV(estimator=model, param_grid=paras_grid, cv=4)
# estimator.fit(x_train,y_train)
# 5、输出训练结果。
# best_score_最高得分,best_estimator_最好的模型,也就是n_neighbors最合适的值,cv_results_所有训练结果
# print(estimator.best_score_)
# print(estimator.best_estimator_)
# print(estimator.cv_results_)
# 6、模型评估。根据交差验证、网格搜索的结果,对选出的最好模型进行评分(n_neighbors=7这个K值为最合适的)。
# 这里先是进行了一次预测,试一下模型的训练结果,x特征值要与训练集一致都要进行标准化处理
model = KNeighborsClassifier(n_neighbors=7)
model.fit(x_train, y_train)
x = [[5.1, 3.5, 1.4, 0.2]]
x = pre.transform(x)
y = model.predict(x)
print(y)
# 使用测试集对模型评分
y_predict = model.predict(x_test)
print(accuracy_score(y_test,y_predict))