【机器学习】K-近邻算法-模型选择与调优
前言
在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-近邻算法-模型选择与调优相关推荐
- 机器学习-分类算法-模型选择与调优09
模型选择与调优 交叉验证:为了让被评估的模型更加准确可信 网格搜索 from sklearn.neighbors import KNeighborsClassifier from sklearn.mo ...
- 简单粗暴理解与实现机器学习之K-近邻算法(十):交叉验证,网格搜索(模型选择与调优)API、鸢尾花案例增加K值调优
K-近邻算法 文章目录 K-近邻算法 学习目标 1.10 交叉验证,网格搜索 1 什么是交叉验证(cross validation) 1.1 分析 1.2 为什么需要交叉验证 **问题:那么这个只是对 ...
- 机器学习算法------1.10 交叉验证,网格搜索(交叉验证,网格搜索(模型选择与调优)API、鸢尾花案例增加K值调优)
文章目录 1.10 交叉验证,网格搜索 学习目标 1 什么是交叉验证(cross validation) 1.1 分析 1.2 为什么需要交叉验证 2 什么是网格搜索(Grid Search) 3 交 ...
- 【机器学习-K近邻算法】
K-近邻算法 K-近邻算法的快速入门 K-近邻(KNN)算法概念 殴式距离公式 电影分类案例 K-近邻算法API Scikit-learn工具 Scikit-learn包含内容 K-近邻算法API方法 ...
- 机器学习的练功方式(五)——模型选择及调优
文章目录 5 模型选择及调优 5.1 数据增强 5.2 过拟合 5.3 交叉验证 5.4 超参数搜索--网格搜索 5 模型选择及调优 5.1 数据增强 有时候,你和你的老板说你数据不够,它是不会理你的 ...
- 机器学习——K近邻算法(KNN)(K Nearest Neighbor)
参考视频与文献: python与人工智能-KNN算法实现_哔哩哔哩_bilibili 机器学习--K近邻算法(KNN)及其python实现_清泉_流响的博客-CSDN博客_python实现knn 机器 ...
- 机器学习——分类算法之K近邻+朴素贝叶斯,模型选择与调优
目录 K-近邻算法 定义 如何求距离? 数据预处理--标准化 sklearn k-近邻算法API 案例--预测入住位置 分类问题 数据处理 k近邻算法相关问题 k值取多大?有什么影响? 优缺点 应用场 ...
- [机器学习]K近邻算法及其应用--WEKA工具
K近邻算法理论基础 k近邻模型 距离度量 k值的选择 分类决策规则 WEKA实战 问题背景 数据预处理 得到分类器 对未知的数据进行分类预测 K近邻算法理论基础 (本节内容参考了:李航<统计学习 ...
- 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工具 ...
最新文章
- 2021 火爆技术人朋友圈的实时音视频 RTC 你 Pick 了嘛?
- MySQL:教你学会如何做性能分析与查询优化
- Java并发源码之ReentrantLock
- pandas 如何把时间转成index_pandas将字段中的字符类型转化为时间类型,并设置为索引...
- python locust 能压测数据库_python locust 性能测试:HOOKS钩子方法
- HOJ 13828 Funfair
- html列表滑动字母索引,js实现做通讯录的索引滑动显示效果和滑动显示锚点效果...
- python每天学多久_怎么自学python,大概要多久?
- MybatisPlus报错: org.apache.velocity.context.Context(已解决)
- like mybatis 用法_Mybaits中Like 的使用方式以及一些注意点
- 杭电多校HDU 6656 Kejin Player(概率DP)题解
- 【C语言】C语言小项目—贪吃蛇
- 世界各地区5G信道一览表[转载,仅作保存使用]
- 微信小程序如何快速达到1000UV流量主开通要求
- 当今主流浏览器内核简介
- php 生成pdf 中文,用PHP创建PDF中文文档
- b B KB MB GB TB 之间的关系与换算
- 标准正态分布alpha分位点
- C++11 find和find_if的用法
- RHEL 5.5 KVM 网卡 bridge设置
热门文章
- 材料科学中的数据挖掘:晶体图神经网络解读与代码解析
- ICLR 2020 | “同步平均教学”框架为无监督学习提供更鲁棒的伪标签
- 自然语言处理太难?按这个方式走,就是砍瓜切菜!
- AI以假乱真怎么办?TequilaGAN教你轻松辨真伪
- 【Java】基于注解开发初探
- isulad代替docker_云原生时代的华为新“引擎”:iSula | Linux 中国
- 【Linux部署】Spring Boot 项目部署在Linux环境下的Docker容器内举例【任务调度系统 xxl-job 任务调度中心】(手动版)
- php使用mysql怎么连接浏览器_一个简单的php实现的MySQL数据浏览器
- mysql jdbc 批量_MYSQL 之 JDBC(十四):批量处理JDBC语句提高处理效率
- Mybatis-sql语句的抽取