📜  无监督 knn - Python (1)

📅  最后修改于: 2023-12-03 15:40:08.599000             🧑  作者: Mango

无监督 KNN - Python

KNN,即 k-Nearest Neighbors(k 近邻算法),是一种基本的分类和回归算法。该算法基于一个简单的假设:相似的样本会有相似的输出值。它的主要思想是将新样本与训练数据中的已知样本进行比较来确定其分类。

在无监督学习中,目标变量是未知的。与监督学习不同,无监督学习算法不需要先定义目标变量的值,而是试图在没有人工干预的情况下识别数据之间的模式和结构。KNN 已被广泛应用于无监督学习领域中的聚类问题,如图像分类、文本聚类等。

KNN 算法基本流程

KNN 算法的基本流程如下:

  1. 加载数据集。
  2. 初始化 K 值(近邻数)。
  3. 计算测试样本与数据集中每个数据点的距离。
  4. 选择距离最近的 K 个数据点。
  5. 判断 K 个数据点所属类别的多数派,即测试样本所属的类别。
  6. 返回测试样本的类别。
KNN 算法步骤详解
加载数据集

KNN 算法的第一步是加载数据集。数据集包括测试数据及其相应的类别和训练数据及其相应的类别。

初始化 K 值

K 值是指要在训练数据中选择的最近邻居数。通常,k 的值是一个奇数,以便方便分类。

计算测试样本与数据集中每个数据点的距离

距离通常使用欧几里得距离公式计算:

distance = math.sqrt(sum([(a - b) ** 2 for a, b in zip(x, y)]))

其中,x 和 y 分别是测试样本与数据集中每个数据点的特征值。

选择距离最近的 K 个数据点

从数据集中选择与测试样本距离最近的 k 个数据点。

判断 K 个数据点所属类别的多数派

确定 k 个数据点所属的类别,也就是最接近测试样本的类别。

返回测试样本的类别

根据 k 个数据点所属类别的多数派,返回测试样本的类别。

KNN 代码实现

下面是 Python 中 KNN 无监督算法的一个示例:

import numpy as np
from sklearn.neighbors import NearestNeighbors

# 加载数据集
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data   # 特征值
y = iris.target # 相应的类别

# 初始化 K 值
n_neighbors = 3

# 计算测试样本与数据集中每个数据点的距离
nbrs = NearestNeighbors(n_neighbors=n_neighbors, algorithm='ball_tree').fit(X)
distances, indices = nbrs.kneighbors(X)

# 选择距离最近的 K 个数据点
closest_neighbors = indices[:, 1:]

# 判断 K 个数据点所属类别的多数派
predictions = [np.argmax(np.bincount(y[neighbor_list]))
               for neighbor_list in closest_neighbors]

# 返回测试样本的类别
print(predictions)

在这个示例中,我们使用 scikit-learn 库中的 NearestNeighbors 类来计算距离和找到最近点。然后,我们使用 np.bincount() 函数来计算类别的出现次数,并使用 np.argmax() 函数找到出现次数最多的类别。

总结

KNN 算法是一种基本的分类和回归算法。在无监督学习中,KNN 已被广泛应用于聚类问题,如图像分类、文本聚类等。Python 是一种流行的编程语言,拥有丰富的数据科学库和工具。在 Python 中,我们可以使用 scikit-learn 库来实现 KNN 算法。