我们先来看看KNN的例子,使用交叉验证来评估。

from sklearn.model_selection import cross_validate
from sklearn.datasets import  load_iris
from sklearn.neighbors import KNeighborsClassifier  # 一个简单的模型,只有K一个参数,类似K-meansiris = load_iris()
clf = KNeighborsClassifier(5)
scoring = {'acc': 'accuracy','prec_macro': 'precision_macro','rec_micro': 'recall_macro'}
scores = cross_validate(clf, iris.data, iris.target, scoring=scoring,cv=5, return_train_score=True, return_estimator=True)
print(scores.keys())
print(scores['test_acc'])

上面的例子大概知道了怎么使用。以及交叉验证的一些信息。

KNN有一个非常重要的参数就是n_neighbors,这个超参数很大程度上决定模型的准确性。
那么我们利用有限的数据集,来调出最有说服力,最合适的这个参数呢,当然可以使用交叉验证的指标来衡量其好坏。

尝试不同的n_neighbors参数,每一个都去做一次交叉验证,取结果最好的那个超参数模型即可。
代码如下:

from sklearn import datasets  # 自带数据集
from sklearn.model_selection import train_test_split, cross_val_score  # 划分数据 交叉验证
from sklearn.neighbors import KNeighborsClassifier  # 一个简单的模型,只有K一个参数,类似K-means
import matplotlib.pyplot as pltiris = datasets.load_iris()  # 加载sklearn自带的数据集
X = iris.data  # 这是数据
y = iris.target  # 这是每个数据所对应的标签
train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=1 / 3,random_state=3)  # 这里划分数据以1/3的来划分 训练集训练结果 测试集测试结果
k_range = range(1, 31)
cv_scores = []  # 用来放每个模型的结果值for n in k_range:knn = KNeighborsClassifier(n)  # knn模型,这里一个超参数可以做预测,当多个超参数时需要使用另一种方法GridSearchCVscores = cross_val_score(knn, train_X, train_y, cv=10,scoring='accuracy')  # cv:选择每次测试折数  accuracy:评价指标是准确度,可以省略使用默认值,具体使用参考下面。cv_scores.append(scores.mean())  # 记录每个参数对应的交叉验证平均值。plt.plot(k_range, cv_scores)
plt.xlabel('K')
plt.ylabel('Accuracy')  # 通过图像选择最好的参数
plt.show()# 经过交叉验证的评估结果可以发现,参数n_neighbors=3是最佳的参数。
best_knn = KNeighborsClassifier(n_neighbors=3)  # 选择最优的K=3传入模型
best_knn.fit(train_X, train_y)  # 训练模型
print(best_knn.score(test_X, test_y))  # 看看评分

《scikit-learn》使用交叉验证优化KNN参数相关推荐

  1. 机器学习基础|K折交叉验证与超参数搜索

    文章目录 交叉验证 交叉验证的概念 K的取值 为什么要用K折交叉验证 Sklearn交叉验证API 超参数搜索 超参数的概念 超参数搜索的概念 超参数搜索的原理 Sklearn超参数搜索API 实例 ...

  2. 交叉验证和超参数调整:如何优化您的机器学习模型

    In the first two parts of this article I obtained and preprocessed Fitbit sleep data, split the data ...

  3. 分类器交叉验证java_使用交叉验证的KNN分类器

    首先,您需要准确定义您的任务 . F.ex给出R ^(MxN)中的图像I,我们希望将I分类为包含面部的图像或没有面部的图像 . 我经常使用像素分类器,其任务类似于:对于图像,我决定每个像素是面像素还是 ...

  4. 模型参数优化(四):交叉验证、网格搜索

    1.交叉验证 1.1 基本概念 交叉验证的基本思想是将数据集分割成N份,依次使用其中1份作为测试集,其他N1份整合到一起作为训练集,将训练好的模型用于测试集上,以得到模型好坏的判断或估计值,可以得到N ...

  5. 机器学习之路——KNN+交叉验证

    KNN分类模型 概念: 简单地说,K-近邻算法采用测量不同特征值之间的距离方法进行分类(k-Nearest Neighbor,KNN) k值的作用 欧几里得距离(Euclidean Distance) ...

  6. 【超参数寻优】交叉验证(Cross Validation)超参数寻优的python实现:多参数寻优

    [超参数寻优]交叉验证(Cross Validation)超参数寻优的python实现:多参数寻优 一.网格搜索原理 二.网格搜索+交叉验证用于多参数寻优的python实现 1.训练模型及待寻优参数 ...

  7. 【超参数寻优】交叉验证(Cross Validation)超参数寻优的python实现:单一参数寻优

    [超参数寻优]交叉验证(Cross Validation)超参数寻优的python实现:单一参数寻优 一.交叉验证的意义 二.常用的交叉验证方法 1.Hold one method 2.K-flod ...

  8. 2 机器学习 K近邻算法(KNN) 学习曲线 交叉验证 手写数字识别

    机器学习 1 K-近邻算法介绍 1.1 分类问题 分类问题:根据已知样本的某些特征,判断一个未知样本属于哪种样本类别. 与回归问题相比,分类问题的输出结果是离散值,用于指定输入的样本数据属于哪个类别. ...

  9. Scikit Learn: 在python中机器学习

    Warning 警告:有些没能理解的句子,我以自己的理解意译. 翻译自:Scikit Learn:Machine Learning in Python 作者: Fabian Pedregosa, Ga ...

最新文章

  1. 专家谈半导体产业前景 并购热还会继续
  2. YunYang1994/tensorflow-yolov3 IndexError: list index out of range 解决办法
  3. solaris 10安装mysql5
  4. OpenCV形态转换Morphology Transformations
  5. Mysql 优化器内部JOIN算法hash join Nestloopjoin及classic hash join CHJ过程详解
  6. Android数据存储之SharePreference和内部存储
  7. 面试题:谈谈你对hibernate的理解
  8. [No0000187]可能是把Java内存区域讲的最清楚的一篇文章
  9. 良心推荐丨国庆7天长假,程序员最佳度假去处
  10. 何时才使用https访问项目
  11. SpringMVC基础配置
  12. 制作删不掉的php唯读档,ppt母版logo删除不了怎么办
  13. 视觉算法工程师百度百科,视觉算法工程师是什么
  14. Intel graphics HD 4600 核芯显卡 对比 nVIDIA Geforce GTX 750 2GB GDDR5 独立显卡
  15. 计算机硬盘对计算机速度的影响,固态硬盘会不会影响整个电脑的运行速度
  16. 【详细】长按APP图标弹出快捷方式,ShortCut功能实现
  17. RNN模型与NLP应用笔记(2):文本处理与词嵌入详解及完整代码实现(Word Embedding)
  18. 配置小程序开发者工具及其使用(中)
  19. MyEclipse10 + Axis2 开发webservice
  20. 74HC595 8位移位寄存器介绍

热门文章

  1. Dapp开发教程四 Asch Dapp Dice Game
  2. [CentOS7] - CentOS7设置开机启动
  3. Nagios 安装教程
  4. 类与类关系的UML图与代码表现
  5. Git使用中关于rebase 、stash 、reflog、reset的一些注意点
  6. 使用PostgREST的配置教程
  7. Spring Batch示例教程
  8. vue实现网络图片瀑布流 + 下拉刷新 + 上拉加载更多
  9. C#LeetCode刷题之#728-自除数(Self Dividing Numbers)
  10. js向页面中动态添加脚本