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

在此专栏的上一篇文章的基础上,进行交叉实验获取最佳的K值
上一篇文章:KNN算法案例-鸢尾花分类
数据拆分的过程:
数据拆分的过程

交叉验证(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)

验证方式的具体如下:
验证方式对应表
选择最佳的超参数

# 使用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)

坚持学习,整理复盘

相关推荐

  1. jvm 参数

    2023-12-07 22:58:01       30 阅读
  2. 【JVM】虚拟机 常用的参数

    2023-12-07 22:58:01       20 阅读
  3. JVM 21 的指南:如何进行JVM,JVM参数

    2023-12-07 22:58:01       42 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-07 22:58:01       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-07 22:58:01       20 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-07 22:58:01       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-07 22:58:01       20 阅读

热门阅读

  1. Leetcode 538 把二叉搜索树转换为累加树

    2023-12-07 22:58:01       41 阅读
  2. Vs创建空白Qt项目

    2023-12-07 22:58:01       27 阅读
  3. 《C++新经典设计模式》之附录A 类和对象

    2023-12-07 22:58:01       27 阅读
  4. Spring JdbcTemplate

    2023-12-07 22:58:01       28 阅读
  5. 30+程序员应该如何养生+养身体

    2023-12-07 22:58:01       38 阅读
  6. 【Erlang进阶学习】3、列表推导

    2023-12-07 22:58:01       40 阅读
  7. AIGC: 关于ChatGPT中的API调用模型

    2023-12-07 22:58:01       30 阅读
  8. arm linux 平台 打开摄像头矫正

    2023-12-07 22:58:01       37 阅读
  9. openGL 三:矩阵和向量

    2023-12-07 22:58:01       33 阅读