02-18 scikit-learn库之k近邻算法
更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11686958.html
scikit-learn库之k近邻算法
由于k近邻可以做回归又可以做分类,所以最普通的k近邻算法在scikit-learn库中有两种实现,即KNeighborsClassifier和KNeighborsRegressor;上次讲到了k近邻的两个扩展限定半径k近邻,因此该方法在scikit-learn中也有两种实现,即RadiusNeighborsClassifier和RadiusNeighborsRegressor;k近邻还有一种扩展,即最近质心分类算法NearestCentroid。
接下来将会讨论这五者的区别,由于是从官方文档翻译而来,翻译会略有偏颇,有兴趣的也可以去scikit-learn官方文档查看https://scikit-learn.org/stable/modules/classes.html#module-sklearn.neighbors
一、KNeighborsClassifier
1.1 使用场景
KNeighborsClassfier模型就是最普通的k近邻算法,可以通过参数控制使用高斯距离、kd树、球树找到实例的\(k\)个近邻。
1.2 代码
from sklearn.neighbors import KNeighborsClassifier
X = [[0], [1], [2], [3]]
y = [0, 0, 1, 1]
neigh = KNeighborsClassifier(n_neighbors=3)
neigh.fit(X, y)
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
metric_params=None, n_jobs=None, n_neighbors=3, p=2,
weights='uniform')
print(neigh.predict([[1.1]]))
[0]
print(neigh.predict_proba([[0.9]]))
[[0.66666667 0.33333333]]
1.3 参数详解
- n_neighbors:\(k\)值选择,int类型。一般选择一个较小的\(k\)值,然后通过交叉验证选择一个较好的\(k\)值。默认为5。
- weights:近邻权重,str类型。如果weights='uniform',则意味着所有近邻的权重都一样;如果weights='distance',则意味着权重和距离成反比,即距离目标点更近的点有更高的权重;可以自定定义函数自定义权重,输入是距离值,输出是权重值。默认为'uniform'。
- algorithm:算法实现,str类型。如果algorithm='brute',即最原始的k近邻算法,计算出所有点与点之间的距离;如果algorithm='kd_tree',即kd树实现;如果algorithm='ball_tree',即球树实现;如果algorithm='auto',则模型会选择一个拟合最好的算法。如果样本特征少,使用'auto'即可;如果数据量大或者样本特征多,推荐使用kd树之后再尝试球树,如此做可以提高准确度;如果输入的样本特征是稀疏的时候,scikit-learn始终会自行选择'brute'实现。默认为'auto'。
- leaf_size:叶子节点阈值,int类型。只有当algorithm={'kd_tree','ball_tree'}时该参数才生效,这个值越小,则生成的kd树或球树层数越大,建树时间越长,泛指层数越小,建树时间短。如果样本数量过大,则必须得增大该值,因为树的层数越大,则树越容易过拟合,推荐使用交叉验证选择一个较优值。默认为30。
- p:距离度量附属参数,int类型。只有当metric='minkowski'时该参数才生效,p=1时为曼哈顿距离,p=2时为欧氏距离。默认为2。
- metric:距离度量类型,str类型。metric='euclidean'为欧氏距离;metric='manhattan'为曼哈顿距离;metric='chebyshev'为切比雪夫距离;metric='minkowski'为闵可夫斯基距离;metric='wminkowski'为带权重闵可夫斯基距离;metric='seuclidean'为标准化欧氏距离;metric='mahalanobis'为马氏距离,通常情况下默认的metric='minkowski'+p=2即欧式距离就可以满足大多数业务的需求。默认为'minkowski'。
- metric_params:距离度量附属参数,dict类型。如带权重闵可夫斯基距离的参数,一般不会用到。
- n_jobs:并行数,int类型。n_jobs=1使用1个cpu运行程序;n_jobs=2,使用2个cpu运行程序;n_jobs=-1,使用所有cpu运行程序。默认为1。
1.4 方法
- fit(X,y):把数据放入模型中训练模型。
- get_params([deep]):返回模型的参数,可以用于Pipeline中。
- predict(X):预测样本X的分类类别。
- predict_proba(X):返回样本X在各个类别上对应的概率。
- score(X,y[,sample_weight]):基于报告决定系数\(R^2\)评估模型。
- set_prams(**params):创建模型参数。
1.4.1 kneighbors([X, n_neighbors, return_distance])
找到某个点的n_neighbors个近邻。
# 为方便测试接下来的方法测试我们将通过最近邻模型演示
samples = [[0., 0., 0.], [0., .5, 0.], [1., 1., .5]]
from sklearn.neighbors import NearestNeighbors
neigh = NearestNeighbors(n_neighbors=1)
neigh.fit(samples)
NearestNeighbors(algorithm='auto', leaf_size=30, metric='minkowski',
metric_params=None, n_jobs=None, n_neighbors=1, p=2, radius=1.0)
print(neigh.kneighbors([[1., 1., 1.]]))
(array([[0.5]]), array([[2]]))
X = [[0., 1., 0.], [1., 0., 1.]]
neigh.kneighbors(X, return_distance=False)
array([[1],
[2]])
1.4.2 kneighbors_graph([X, n_neighbors, mode])
计算样本X的n_neighbors个近邻的权重,可以返回距离或者矩阵关系图。
X = [[0], [3], [1]]
from sklearn.neighbors import NearestNeighbors
neigh = NearestNeighbors(n_neighbors=2)
neigh.fit(X)
A = neigh.kneighbors_graph(X)
A.toarray()
array([[1., 0., 1.],
[0., 1., 1.],
[1., 0., 1.]])
二、KNeighborsRegressor
KNeighborsRegressor模型类似于KNeighborsClassifier模型,不同的是两个模型找到\(k\)个近邻的时候KNeighborsClassifier模型使用了多数表决发选择类别,而KNeighborsRegressor模型使用了对\(k\)近邻去平均数或者中位数的方法得到预测值。
三、RadiusNeighborsClassifier
RadiusNeighborsClassifier模型类似KNeighborsClassifier模型,不同之处在于RadiusNeighborsClassifier模型少了两个参数n_neighbors和n_jobs,多了两个参数:
- radius半径大小,float类型。即选择半径大小的参数。默认为1。
- outlier_label,异常点类别,str类型。即假设限定半径后,目标点半径内没有近邻时该选择哪个类别作为输出。默认为None,不建议使用默认值。
四、RadiusNeighborsRegressor
RadiusNeighborsRegressor模型类似于RadiusNeighborsRegressor模型,不同之处在于少了参数outlier_label,并且两者在得到\(k\)个近邻后处理的方式不同。
五、NearestCentroid
NearestCentroid模型是基于最近质心分类算法实现的,由于只有metric距离度量参数和shrink_threshold特征距离阈值两个参数,不多赘述。
02-18 scikit-learn库之k近邻算法的更多相关文章
- 02-16 k近邻算法
目录 k近邻算法 一.k近邻算法学习目标 二.k近邻算法引入 三.k近邻算法详解 3.1 k近邻算法三要素 3.1.1 k值的选择 3.1.2 最近邻算法 3.1.3 距离度量的方式 3.1.4 分类 ...
- 02机器学习实战之K近邻算法
第2章 k-近邻算法 KNN 概述 k-近邻(kNN, k-NearestNeighbor)算法是一种基本分类与回归方法,我们这里只讨论分类问题中的 k-近邻算法. 一句话总结:近朱者赤近墨者黑! k ...
- 用Python从零开始实现K近邻算法
KNN算法的定义: KNN通过测量不同样本的特征值之间的距离进行分类.它的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别.K通 ...
- 从K近邻算法、距离度量谈到KD树、SIFT+BBF算法
转载自:http://blog.csdn.net/v_july_v/article/details/8203674/ 从K近邻算法.距离度量谈到KD树.SIFT+BBF算法 前言 前两日,在微博上说: ...
- 从K近邻算法谈到KD树、SIFT+BBF算法
转自 http://blog.csdn.net/v_july_v/article/details/8203674 ,感谢july的辛勤劳动 前言 前两日,在微博上说:“到今天为止,我至少亏欠了3篇文章 ...
- 机器学习——KNN算法(k近邻算法)
一 KNN算法 1. KNN算法简介 KNN(K-Nearest Neighbor)工作原理:存在一个样本数据集合,也称为训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分 ...
- <转>从K近邻算法、距离度量谈到KD树、SIFT+BBF算法
转自 http://blog.csdn.net/likika2012/article/details/39619687 前两日,在微博上说:“到今天为止,我至少亏欠了3篇文章待写:1.KD树:2.神经 ...
- 机器学习实战 - python3 学习笔记(一) - k近邻算法
一. 使用k近邻算法改进约会网站的配对效果 k-近邻算法的一般流程: 收集数据:可以使用爬虫进行数据的收集,也可以使用第三方提供的免费或收费的数据.一般来讲,数据放在txt文本文件中,按照一定的格式进 ...
- 机器学习:k-NN算法(也叫k近邻算法)
一.kNN算法基础 # kNN:k-Nearest Neighboors # 多用于解决分裂问题 1)特点: 是机器学习中唯一一个不需要训练过程的算法,可以别认为是没有模型的算法,也可以认为训练数据集 ...
随机推荐
- webpack4 output配置 filename chunkhash报错
这里的hash由chunkhash改成hash,原因是使用HotModuleReplacementPlugin之后不能使用chunkhash和contenthash.看到有些地方说把“hot:true ...
- Python---网络爬虫初识
1. 网络爬虫介绍 来自wiki的介绍: 网络爬虫(英语:web crawler),也叫网上蜘蛛(spider),是一种用来自动浏览万维网的网络机器人. 但是我们在写网络爬虫时还要注意遵守网络规则,这 ...
- Python 基础 3 - 元组
元组与列表区别 Python 元组与列表类似,不同之处在于列表可以修改,元组不可以修改 元组用小括号 () 定义,列表用方括号 [] 定义 元组不可修改,列表可修改 元组创建 只需要在小括号 () 内 ...
- sql 多行、一行 互转
原始数据: 期望数据: IF OBJECT_ID('temp_20170701','u') IS NOT NULL DROP TABLE temp_20170701 CREATE TABLE temp ...
- 大数据平台搭建 - Mysql在linux上的安装
一.简介 MySQL是一个关系型数据库系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 ...
- js 正则表达式:价格的校验
/*验证单价:包括两位小数*/var priceReg = /(^[1-9]\d*(\.\d{1,2})?$)|(^0(\.\d{1,2})?$)/;var price=$("#price& ...
- ACM团队周赛题解(2)
拉了CF583和CF486的两套div2题目 还是先贴宏定义部分 #define MAXN 1000000+5#define MOD 1000000007#define PI (acos(-1.0)) ...
- CentOS在VMware中的安装
1.启动VMware 2.新建一台虚拟机,选择典型 3.选择稍后安装操作系统 4.选择引导系统为Linux,系统版本为Centos 5.选择安装位置 6.选择最大磁盘容量 7.点击自定义硬件,进行硬件 ...
- Netty源码分析 (十二)----- 心跳服务之 IdleStateHandler 源码分析
什么是心跳机制? 心跳说的是在客户端和服务端在互相建立ESTABLISH状态的时候,如何通过发送一个最简单的包来保持连接的存活,还有监控另一边服务的可用性等. 心跳包的作用 保活Q:为什么说心跳机制能 ...
- 第八届蓝桥杯java b组第十题
标题: k倍区间 给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1, ... Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍 ...