(分类)KNN算法- 参数调优

在此专栏的上一篇文章的基础上,进行交叉实验获取最佳的K值
上一篇文章:KNN算法案例-鸢尾花分类
数据拆分的过程:
(分类)KNN算法- 参数调优_第1张图片

交叉验证(Cross Validation) 是一种在机器学习中广泛使用的模型评估参数调优方法。在训练模型时,我们通常将数据集测试集,其中训练集用于训练模型,测试集用于评估模型的性能,但是这种方法可能会受到数据集划分方式的影响,导致苹果结果的不稳定交叉实验通过对数据集进行多次划分和评估,可以更可靠的评估模型的性能。

交叉验证的常见方法是k折交叉验证(k-Fold Cross Validation)
步骤如下:
1、将数据集随机分成k个互不重叠的自己每个子集称为一个‘折’。
2、对于每个折,执行以下操作:
a.将当前折作为验证集,其余的折作为训练集
b.使用训练集训练模型
c.使用验证集评估模型性能(如计算分类准确率,均方误差等指标)
3.计算K次迭代中模型性能指标的平均值作为模型最终的苹果结果。

交叉验证的优点如下:

1.降低模型评估结果的方差:通过多次评估模型,交叉验证可以提供更稳定、更可靠的性能评估。
2.更充分的利用数据:交叉验证可以确保每个样本都被用于训练和验证,使得模型学习和评估更为全面

在算法调优中,交叉验证可以帮助我们找到最佳的超参数(如KNN中的K值)。我们可以尝试不同的的超参数组合。这种方法可以有效地防止过拟合,提高模型在新数据上的泛化性能。
前期导入包和加载数据以及切分数据

import numpy as np
from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import train_test_split
X, y = datasets.load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2,
                                                    random_state=42)

对超参数进行交叉验证筛选

scores = []
params_k = np.arange(1, 31)
for k in params_k:
    knn = KNeighborsClassifier(n_neighbors=k)
    score = cross_val_score(
    knn,  # 选择模型
     X_train,  # 数据
     y_train,   # 目标值
     cv=2,   # 将数据切分为多少份
      scoring='accuracy' # 验证方式
      ).mean()
    scores.append(score)
print(scores)

验证方式的具体如下:
(分类)KNN算法- 参数调优_第2张图片
选择最佳的超参数

# 使用numpy argmax() 找出最佳的超参数 
k_best = np.argmax(scores) + 1
print("得分最高的超参数K值为:", k_best)

使用最佳的超参数进行模型的训练

estimator = KNeighborsClassifier(n_neighbors=k_best)
estimator.fit(X_train, y_train)
y_ = estimator.predict(X_test)
print('真实的',y_test)
print('预测值',y_)

对模型进行评分

estimator.score(X_test,y_test)

坚持学习,整理复盘

你可能感兴趣的:(机器学习,算法,分类,数据挖掘)