基于sklearn的机器学习 — K近邻(KNN)

目录

寻找观测值的最近邻

创建KNN分类器

确定最佳邻域尺寸

创建基于半径的最近邻分类器

最近邻回归器

KNN回归对比线性回归


拉到文末有福利

k-nearest neighbors(KNN)算法是监督机器学习中最简单但最常用的算法之一。

KNN通常被认为是一种惰性的学习算法,从技术上讲,它只是存储训练数据集,而不经历训练阶段。

KNN的原理是将新样本的特征与数据集中现有样本的特征进行比较。然后通过算法选择最接近的k个样本(k是自定义参数),新样本的输出是基于"k"最近样本的多数类(用于分类)或平均值(用于回归)确定的。

机器学习算法可以分为参数模型和非参数模型:

参数模型:估计训练数据集中的参数,学习可以对新数据点进行分类的函数,而不再需要原始训练数据集。典型模型有感知器、逻辑回归和线性 SVM。

非参数模型不能用一组固定的参数来表征,参数的数量随着训练数据量的变化而变化。典型的模型有决策树分类器/随机森林、SVM、KNN。

KNN在分类问题中应用更加广泛,但也可以应用于回归问题。

图片

 

KNN 算法本身相当简单,可以概括为以下步骤:

  1. 选择k的值和距离度量

  2. 根据计算的距离,选择最近的K个邻近点

  3. 分类:根据选定邻近点中不同类别的比例来决定测试样本的类别。

    回归:根据选定邻近点的平均值(或基于距离的加权平均),作为测试样本的预测值。

寻找观测值的最近邻

k近邻算法 (KNN) 的目标是识别给定测试点的最近邻,以便我们可以为该点分配一个类标签,因此确定距离的度量方法有助于形成决策边界,而决策边界可将测试点划分为不同的区域

要找到一个观测值的 k 个最近的观测值(邻居),可以使用 scikit-learn 的NearestNeighbors类,scikit-learn 提供了多种距离度量方法,默认情况下,NearestNeighbors使用闵可夫斯基距离(Minkowski distance)距离:

其中,xi 和 yi 是我们正在计算距离的两个值。

实际上,闵可夫斯基距离 (Minkowski Distance)是将多种距离公式(曼哈顿距离、欧式距离、切比雪夫距离)的一个推广。

当闵可夫斯基距离的超参数 p = 1时为曼哈顿距离(Manhattan distance):

当p = 2 时为欧几里得距离(Euclidean distance):

默认情况下,scikit-learn 中 p = 2。

下面基于鸢尾花数据集,使用NearestNeighbors来找到新建观测值new_observation在标准化特征空间中距离最近的两个点:

# Load libraries  
from sklearn import datasets 
from sklearn.neighbors import NearestNeighbors 
from sklearn.preprocessing import StandardScaler  

# Load data  
iris = datasets.load_iris() 
features = iris.data

# Create standardizer  
standardizer = StandardScaler()  

# Standardize features  
features_standardized = standardizer.fit_transform(features)  

# Two nearest neighbors  
nearest_neighbors = NearestNeighbors(n_neighbors=2).fit(features_standardized)  

# Create an observation  
new_observation = [ 1, 1, 1, 1]  

# Find distances and indices of the observation's nearest neighbors 
distances, indices = nearest_neighbors.kneighbors([new_observation])  

# View the nearest neighbors 
features_standardized[indices]

# View distances 
distances

还可以使用metric参数设置距离度量,例如通过metric参数将距离度量方法设为欧式距离:

# Find two nearest neighbors based on Euclidean distance 
nearestneighbors_euclidean = NearestNeighbors( n_neighbors=2, metric='euclidean').fit(features_standardized)

p参数与metric参数都可以用于设置距离度量方法,区别在于p参数用于指定Minkowski距离的阶数,因此只有当metric='minkowski'时才生效,其他情况下p参数会被忽略。

此外,我们

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

充电君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值