机器学习 第5篇:knn回归
基于最邻近算法的分类,本质上是对离散的数据标签进行预测,实际上,最邻近算法也可以用于对连续的数据标签进行预测,这种方法叫做基于最邻近数据的回归,预测的值(即数据的标签)是连续值,通过计算数据点最临近数据点平均值而获得预测值。
一,sklearn的knn回归
scikit-learn实现了两个不同的最邻近回归模型:
- KNeighborsRegressor:根据每个查询点的最邻近的k个数据点的均值作为预测值,其中,k是用户指定的整数。
- RadiusNeighborsRegressor:基于查询点的固定半径内的数据点的均值作为预测值,其中r是用户指定的浮点值。
回归模拟器的定义如下,该定义只列出最重要的参数,详细参数请参考sicikit-learn 官网:
sklearn.neighbors.KNeighborsRegressor(n_neighbors=5, weights='uniform', algorithm='auto', metric='minkowski',...)
sklearn.neighbors.RadiusNeighborsRegressor(radius=1.0, weights='uniform', algorithm='auto', metric='minkowski',...)
参数注释:
- radius:寻找的半径、
- n_neighbors:最邻近的邻居数量
- algorithm:寻找最邻近的数据点的算法,有效值是['auto','ball_tree','kd_tree','brute']
- metric:计算距离的度量,详细信息请查看:
DistanceMetric - weights:权重,默认值weights ='uniform',为每个邻居分配统一的权重。 weights ='distance'分配的权重与距查询点的距离成反比。用于也可以提供定义函数来计算权重。在某些情况下,最好对邻居加权,以使较近的邻居对拟合的贡献更大,这可以通过weights关键字完成。
最基本的最邻近回归使用统一的权重,也就是说,在特定范围中的每个数据点对查询点的分类(回归)的作用是相同的。在某些情况下,对权重点进行加权可能会比较有利,以使邻近的点比远离的点对回归的贡献更大,这可以通过weights关键字完成。默认值weights ='uniform',为所有点分配相等的权重。 weights ='distance'分配的权重与距查询点的距离成反比。
二,基于最邻近的数据点的数量来预测
当使用knn计算某个数据点的预测值时,模型会从训练数据集中选择离该数据点最近的k个数据点,并且把它们的y值取均值,把该均值作为新数据点的预测值:
from sklearn.neighbors import KNeighborsRegressor
对于knn分类,使用score方法评估模型,对于回归的问题,返回的是R^2分数,R^2分数也叫做决定系数,是回归模型预测的优度度量,位于0到1之间,R^2等于1对应完美预测,R^2等于0对应于常数模型,即总是预测训练集响应(y_train)的均值。
from sklearn.datasets import make_regression
from sklearn.neighbors import KNeighborsRegressor
from sklearn.model_selection import train_test_split kng=KNeighborsRegressor(n_neighbors=5) x_data,y_data=make_regression(n_features=1,n_informative=1,noise=50,random_state=1)
x_train,x_test,y_train,y_test=train_test_split(x_data,y_data,random_state=1) kng.fit(x_train,y_train)
prediction=kng.predict(x_test) kng_test_score=kng.score(x_test,y_test)
kng_train_score=kng.score(x_train,y_train)
print('test data score:{:.2f}'.format(kng_test_score))
三,knn回归模型的优缺点
knn回归有两个重要的参数:最邻近数据点的数量k,数据点之间距离的度量方法。
在实践中,通常使用较小的k值,在knn分类中通常把k值设置为奇数,便于找到多数邻居的标签。默认的距离度量是欧式距离,它在多数情况下的效果都很好,除此之外,还有曼哈顿距离等,详细信息,请阅读《Scipy 学习第3篇:数字向量的距离计算》。
在确定knn回归或knn分类的k值时,可以通过折叠交叉验证来寻找最佳的k值,示例代码如下:
from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV #通过网络方式来获取参数 # 导入iris数据集
iris2=datasets.load_iris()
X2=iris2.data
y2=iris2.target
print(X2.shape,y2.shape) # 设置需要搜索的K值,'n_neightbors'是sklearn中KNN的参数
parameters={'n_neightbors':[1,3,5,7,9,11,13,15]}
knn=KNeighborsClassifier()#注意:这里不用指定参数 # 通过GridSearchCV来搜索最好的K值。这个模块的内部其实就是对每一个K值进行评估
clf=GridSearchCV(knn,parameters,cv=5) #5折
clf.fit(X2,y2) # 输出最好的参数以及对应的准确率
print("最终最佳准确率:%.2f"%clf.best_score_,"最终的最佳K值",clf.best_params_)
knn回归模型的优点之一是模型很容易理解,通常不需要过多的调参就可以得到不错的性能,并且构建模型的速度通常很快。但是使用knn算法时,对数据进行预处理是很重要的,对特征很多的数据集、对于大多数特征值都为0的数据集,效果往往不是很好。
虽然k邻近算法很容易理解,但是由于预测速度慢,且不能处理具有很多特征的数据集,所以,在实践中往往不会用到。
参考文档:
sklearn.neighbors.KNeighborsRegressor
机器学习 第5篇:knn回归的更多相关文章
- 吴裕雄 python 机器学习——KNN回归KNeighborsRegressor模型
import numpy as np import matplotlib.pyplot as plt from sklearn import neighbors, datasets from skle ...
- 机器学习系列(3)_逻辑回归应用之Kaggle泰坦尼克之灾
作者:寒小阳 && 龙心尘 时间:2015年11月. 出处: http://blog.csdn.net/han_xiaoyang/article/details/49797143 ht ...
- 机器学习笔记(4):多类逻辑回归-使用gluton
接上一篇机器学习笔记(3):多类逻辑回归继续,这次改用gluton来实现关键处理,原文见这里 ,代码如下: import matplotlib.pyplot as plt import mxnet a ...
- Coursera公开课笔记: 斯坦福大学机器学习第六课“逻辑回归(Logistic Regression)” 清晰讲解logistic-good!!!!!!
原文:http://52opencourse.com/125/coursera%E5%85%AC%E5%BC%80%E8%AF%BE%E7%AC%94%E8%AE%B0-%E6%96%AF%E5%9D ...
- K-NN回归算法
from sklearn.datasets import load_iris import numpy as np import matplotlib.pyplot as plt iris = loa ...
- scikit-learn中机器学习模型比较(逻辑回归与KNN)
本文源自于Kevin Markham 的模型评估:https://github.com/justmarkham/scikit-learn-videos/blob/master/05_model_eva ...
- 机器学习 第五篇:分类(kNN)
K最近邻(kNN,k-NearestNeighbor)算法是一种监督式的分类方法,但是,它并不存在单独的训练过程,在分类方法中属于惰性学习法,也就是说,当给定一个训练数据集时,惰性学习法简单地存储或稍 ...
- 用Python开始机器学习(7:逻辑回归分类) --好!!
from : http://blog.csdn.net/lsldd/article/details/41551797 在本系列文章中提到过用Python开始机器学习(3:数据拟合与广义线性回归)中提到 ...
- SVM(支持向量机)与统计机器学习 & 也说一下KNN算法
因为SVM和统计机器学习内容很多,所以从 http://www.cnblogs.com/charlesblc/p/6188562.html 这篇文章里面分出来,单独写. 为什么说SVM和统计学关系很大 ...
随机推荐
- Vue路由Hash模式分析
Vue路由Hash模式分析 Vue-router是Vue的核心组件,主要是作为Vue的路由管理器,Vue-router默认hash模式,即使用URL的Hash来模拟一个完整的URL,当URL改变时页面 ...
- 058 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 05 案例:求数组元素的最大值
058 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 05 案例:求数组元素的最大值 本文知识点:求数组元素的最大值 案例:求数组元素的最大值 程序代码及其执行过程 ...
- 014 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 08 “字符型”字面值
014 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 08 "字符型"字面值 字符型 字面值如何表示? 两个关键:单引号(必须是英文单引号). ...
- Iptables 下 SNAT、DNAT和MASQUERADE三者之间的区别
Iptables 中可以灵活的做各种网络地址转换(NAT,Network Address Translation) 网络地址转换(NAT)主要有两种:SNAT 和 DNAT,但是也有一种特例 MASQ ...
- 踩坑 Pycharm 2020.1.1 安装/ JetBrains破解/ anacode配置
引言 网上的办法试了很多,通常不能解决问题,还会引发一些负效应,选取了一个试了两天终于成功的方案记录一下备用. Pycharm安装 https://www.jetbrains.com/pycharm/ ...
- ls: 显示目下的内容及相关属性信息
ls: 显示目下的内容及相关属性信息 [功能说明] ls 命令可以理解为英文单词 "list" 的缩写,其功能是列出目录的内容及其内容属性信息(list directory con ...
- str常用操作方法
1. 索引(即下标) s = 'ABCDEFGHIJKLMN' s1 = s[0] print('s[0] = ' + s1) #s[0] = A print('s[3] = '+ s[3]) #s[ ...
- spring-boot-route(十五)整合RocketMQ
RocketMQ简介 RocketMQ是阿里巴巴开源的消息中间件.目前已经贡献给Apache软件基金会,成为Apache的顶级项目. rocketMQ基本概念 1. Producer Group 生产 ...
- pytest文档48-切换 base_url 测试环境(pytest-base-url)
前言 当我们自动化代码写完成之后,期望能在不同的环境测试,这时候应该把 base_url 单独拿出来,能通过配置文件和支持命令行参数执行. pytest-base-url 是 pytest 里面提供的 ...
- 面试一个百度T7程序员,一道简单的题没答上来!网友却都在吐槽面试官!
程序员面试时都考些什么? 一个面试官得意洋洋地说自己面了一个百度T7,出了一道coding题,结果对方连最长上升子序列都写不出来. 楼主本想嘲弄一下百度T7的代码水平低,没想到网友们炸开了锅,纷纷 ...