K最近邻

  • 1、引言
  • 2、决策树
  • 2.1 定义
  • 2.2 原理
  • 2.3 实现方式
  • 2.3.1 距离度量
  • 2.3.2 K值的选择
  • 2.4 算法公式
  • 2.5 代码示例
  • 3、总结


1、引言

小屌丝:鱼哥, 这么长时间没更新了,是不是得抓紧时间了。
小鱼:最近可都是在忙的呢, 这不正在写着呢。
小屌丝:我这一提醒你,你就说已经开始写了,我要是不提醒你呢
小鱼:不提醒我,那我照样在写啊。
小屌丝:…行啊,鱼哥,你这说的我竟然无力反驳。
小鱼:这就对了哦,今天来分享一下 K最近邻
小屌丝:؏؏☝ᖗ乛◡乛ᖘ☝؏؏

【机器学习】有监督学习算法之:K最近邻_距离度量

2、决策树

2.1 定义

K最近邻(K-Nearest Neighbors,简称KNN)是一种基本的机器学习分类与回归方法。

基本思想:在特征空间中,如果一个实例的大部分近邻都属于某一个类别,则该实例也属于这个类别。

2.2 原理

KNN算法的原理相对简单。对于给定的测试实例,基于某种距离度量找出训练集中与其最靠近的K个训练实例,然后统计这K个实例中多数属于的类别,并将其作为预测结果。

KNN算法的核心在于两点:

  • 如何计算实例之间的距离,
  • 如何选择K值。

2.3 实现方式

实现方式有2种,及 距离度量 和 K值选择

2.3.1 距离度量

  • 距离度量:常用的距离度量有欧氏距离、曼哈顿距离等。
  • 欧氏距离:(d(x, y) = \sqrt{\sum_{i=1}^{n} (x_i - y_i)^2})
  • 曼哈顿距离:(d(x, y) = \sum_{i=1}^{n} |x_i - y_i|)

2.3.2 K值的选择

  • K值的选择:K值的选择会对预测结果产生很大的影响。如果K值选择过小,可能会导致模型对噪声数据过于敏感;如果K值选择过大,可能会使模型过于简单,忽略数据的局部特征。

2.4 算法公式

在K近邻算法中,我们需要使用距离度量方法来计算样本之间的距离。其中,欧氏距离(Euclidean Distance)是应用广泛的一种距离度量方法。
欧氏距离的计算公式如下:

d(x, y) = √((x1 - y1)² + (x2 - y2)² + ... + (xn - yn)²)

其中,d(x, y)表示点x和点y之间的距离。x1, x2, …, xn是点x的n个维度的坐标,y1, y2, …, yn是点y的n个维度的坐标。

该公式计算的是点x和点y之间的直线距离。

2.5 代码示例

# -*- coding:utf-8 -*-
# @Time   : 2024-02-21
# @Author : Carl_DJ

'''
实现功能:
    使用scikit-learn库实现的KNN分类器

'''
from sklearn.model_selection import train_test_split  
from sklearn.preprocessing import StandardScaler  
from sklearn.neighbors import KNeighborsClassifier  
from sklearn.datasets import load_iris  
  
# 加载数据集  
iris = load_iris()  
X = iris.data  
y = iris.target  
  
# 划分训练集和测试集  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  
  
# 数据标准化  
scaler = StandardScaler()  
X_train = scaler.fit_transform(X_train)  
X_test = scaler.transform(X_test)  
  
# 创建KNN分类器  
knn = KNeighborsClassifier(n_neighbors=3)  
  
# 训练模型  
knn.fit(X_train, y_train)  
  
# 预测测试集结果  
y_pred = knn.predict(X_test)  
  
# 输出预测结果  
print(y_pred)

3、总结

K最近邻算法是一种简单而有效的机器学习算法,适用于多种分类和回归任务。
它基于实例学习,不需要显式的训练过程,而是通过计算测试实例与训练实例之间的距离来进行预测。
然而,KNN算法也存在一些局限性,如对数据的预处理和特征选择较为敏感,计算复杂度较高,特别是当数据集较大时。
因此,在实际应用中,需要根据具体问题和数据集特点来选择合适的算法和参数。

我是小鱼

  • 博客专家
  • 阿里云 专家博主
  • 51CTO博客专家
  • 多个知名企业认证讲师
  • 认证金牌面试官
  • 职场面试培训、职场规划师
  • 多个国内主流技术社区的认证专家博主
  • 多款主流产品(阿里云等)测评一、二等奖获得者

关注小鱼,学习机器学习领域的知识。