前言

在KNN算法中,k值的选择对我们最终的预测结果有着很大的影响

那么有没有好的方法能够帮助我们选择好的k值呢?

模型选择与调优

目标

  • 说明交叉验证过程

  • 说明参数搜索过程

  • 应用GirdSearchCV实现算法参数的调优

应用

Facebook 签到位置预测调优

什么是交叉验证(cross validation)

定义

将拿到的训练数据,分为训练和验证集,以下图为例:将数据分成4份,其中一份作为验证集,然后经过4次(组)的测试,每次都更换不同的验证集,即得到4组模型的结果,取平均值作为最终结果。由于是将数据分为4份,所以我们称之为4折交叉验证。

分析

我们之前知道数据分为训练集和测试集,但是**为了让从训练得到模型结果更加准确。**做以下处理

  • 训练集:训练集+验证集

  • 测试集:测试集

为什么要进行交叉验证

交叉验证的目的:为了让被评估的模型更加准确可信

超参数搜索-网格搜索(Grid Search)

通常情况下,有很多参数是需要手动指定的(如K-近邻算法中的k值),这种叫做超参数。但是手动过程繁杂,所以需要对模型预设几种超参数组合。每组超参数都采用交叉验证来进行评估。最后选出最优参数组合建立模型。

模型选择与调优API

  • sklearn.model_selection.GridSearchCV(estimator, param_grid=None,cv=None)

    • 对估计器的指定参数值进行详细搜索

    • estimator:估计器对象

    • param_grid:估计器参数(dict){‘n_neighbors’:[1,3,5]}

    • cv: 指定几折交叉验证

    • fit :输入训练数据

    • score:准确率

结果分析:

  • bestscore:在交叉验证中验证的最好结果_

  • bestestimator:最好的参数模型

  • cvresults:每次交叉验证后的验证集准确率结果和训练集准确率结果

鸢尾花案例增加K值调优

使用GridSearchCV构建估计器

def knn_iris_gscv():"""用KNN算法对鸢尾花进行分类,添加网格搜索和交叉验证:return:"""# 1)获取数据iris = load_iris()# 2)划分数据集x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=22)# 3)特征工程:标准化transfer = StandardScaler()x_train = transfer.fit_transform(x_train)x_test = transfer.transform(x_test)# 4)KNN算法预估器estimator = KNeighborsClassifier()# 加入网格搜索与交叉验证# 参数准备param_dict = {"n_neighbors": [1, 3, 5, 7, 9, 11]}estimator = GridSearchCV(estimator, param_grid=param_dict, cv=10)estimator.fit(x_train, y_train)# 5)模型评估# 方法1:直接比对真实值和预测值y_predict = estimator.predict(x_test)print("y_predict:\n", y_predict)print("直接比对真实值和预测值:\n", y_test == y_predict)# 方法2:计算准确率score = estimator.score(x_test, y_test)print("准确率为:\n", score)# 最佳参数:best_params_print("最佳参数:\n", estimator.best_params_)# 最佳结果:best_score_print("最佳结果:\n", estimator.best_score_)# 最佳估计器:best_estimator_print("最佳估计器:\n", estimator.best_estimator_)# 交叉验证结果:cv_results_print("交叉验证结果:\n", estimator.cv_results_)

【机器学习】K-近邻算法-模型选择与调优相关推荐

  1. 机器学习-分类算法-模型选择与调优09

    模型选择与调优 交叉验证:为了让被评估的模型更加准确可信 网格搜索 from sklearn.neighbors import KNeighborsClassifier from sklearn.mo ...

  2. 简单粗暴理解与实现机器学习之K-近邻算法(十):交叉验证,网格搜索(模型选择与调优)API、鸢尾花案例增加K值调优

    K-近邻算法 文章目录 K-近邻算法 学习目标 1.10 交叉验证,网格搜索 1 什么是交叉验证(cross validation) 1.1 分析 1.2 为什么需要交叉验证 **问题:那么这个只是对 ...

  3. 机器学习算法------1.10 交叉验证,网格搜索(交叉验证,网格搜索(模型选择与调优)API、鸢尾花案例增加K值调优)

    文章目录 1.10 交叉验证,网格搜索 学习目标 1 什么是交叉验证(cross validation) 1.1 分析 1.2 为什么需要交叉验证 2 什么是网格搜索(Grid Search) 3 交 ...

  4. 【机器学习-K近邻算法】

    K-近邻算法 K-近邻算法的快速入门 K-近邻(KNN)算法概念 殴式距离公式 电影分类案例 K-近邻算法API Scikit-learn工具 Scikit-learn包含内容 K-近邻算法API方法 ...

  5. 机器学习的练功方式(五)——模型选择及调优

    文章目录 5 模型选择及调优 5.1 数据增强 5.2 过拟合 5.3 交叉验证 5.4 超参数搜索--网格搜索 5 模型选择及调优 5.1 数据增强 有时候,你和你的老板说你数据不够,它是不会理你的 ...

  6. 机器学习——K近邻算法(KNN)(K Nearest Neighbor)

    参考视频与文献: python与人工智能-KNN算法实现_哔哩哔哩_bilibili 机器学习--K近邻算法(KNN)及其python实现_清泉_流响的博客-CSDN博客_python实现knn 机器 ...

  7. 机器学习——分类算法之K近邻+朴素贝叶斯,模型选择与调优

    目录 K-近邻算法 定义 如何求距离? 数据预处理--标准化 sklearn k-近邻算法API 案例--预测入住位置 分类问题 数据处理 k近邻算法相关问题 k值取多大?有什么影响? 优缺点 应用场 ...

  8. [机器学习]K近邻算法及其应用--WEKA工具

    K近邻算法理论基础 k近邻模型 距离度量 k值的选择 分类决策规则 WEKA实战 问题背景 数据预处理 得到分类器 对未知的数据进行分类预测 K近邻算法理论基础 (本节内容参考了:李航<统计学习 ...

  9. python机器学习 | K近邻算法学习(1)

    K近邻算法学习 1 K近邻算法介绍 1.1算法定义 1.2算法原理 1.3算法讨论 1.3.1 K值选择 1.3.2距离计算 1.3.3 KD树 2 K近邻算法实现 2.1scikit-learn工具 ...

最新文章

  1. 2021 火爆技术人朋友圈的实时音视频 RTC 你 Pick 了嘛?
  2. MySQL:教你学会如何做性能分析与查询优化
  3. Java并发源码之ReentrantLock
  4. pandas 如何把时间转成index_pandas将字段中的字符类型转化为时间类型,并设置为索引...
  5. python locust 能压测数据库_python locust 性能测试:HOOKS钩子方法
  6. HOJ 13828 Funfair
  7. html列表滑动字母索引,js实现做通讯录的索引滑动显示效果和滑动显示锚点效果...
  8. python每天学多久_怎么自学python,大概要多久?
  9. MybatisPlus报错: org.apache.velocity.context.Context(已解决)
  10. like mybatis 用法_Mybaits中Like 的使用方式以及一些注意点
  11. 杭电多校HDU 6656 Kejin Player(概率DP)题解
  12. 【C语言】C语言小项目—贪吃蛇
  13. 世界各地区5G信道一览表[转载,仅作保存使用]
  14. 微信小程序如何快速达到1000UV流量主开通要求
  15. 当今主流浏览器内核简介
  16. php 生成pdf 中文,用PHP创建PDF中文文档
  17. b B KB MB GB TB 之间的关系与换算
  18. 标准正态分布alpha分位点
  19. C++11 find和find_if的用法
  20. RHEL 5.5 KVM 网卡 bridge设置

热门文章

  1. 材料科学中的数据挖掘:晶体图神经网络解读与代码解析
  2. ICLR 2020 | “同步平均教学”框架为无监督学习提供更鲁棒的伪标签
  3. 自然语言处理太难?按这个方式走,就是砍瓜切菜!
  4. AI以假乱真怎么办?TequilaGAN教你轻松辨真伪
  5. 【Java】基于注解开发初探
  6. isulad代替docker_云原生时代的华为新“引擎”:iSula | Linux 中国
  7. 【Linux部署】Spring Boot 项目部署在Linux环境下的Docker容器内举例【任务调度系统 xxl-job 任务调度中心】(手动版)
  8. php使用mysql怎么连接浏览器_一个简单的php实现的MySQL数据浏览器
  9. mysql jdbc 批量_MYSQL 之 JDBC(十四):批量处理JDBC语句提高处理效率
  10. Mybatis-sql语句的抽取