IIWAB K-means(K均值聚类)和KNN(K近邻算法) - IIWAB

K-means(K均值聚类)和KNN(K近邻算法)

IIWAB 1月前 ⋅ 114 阅读

K-means(K均值聚类)和KNN(K近邻算法)是机器学习中两种不同的算法,它们在多个方面存在明显区别:

算法类型

  • K-means:它属于无监督学习算法。无监督学习意味着在数据集中没有预先定义的标签,算法的目标是通过数据的特征将数据划分为不同的组(簇),以发现数据中的内在结构和模式。
  • KNN:属于有监督学习算法。有监督学习需要有标记好的训练数据,算法通过学习这些带有标签的数据,对新的数据进行分类或回归预测。

算法目的

  • K-means:目的是将数据集中的样本划分为K个不同的簇,使得同一簇内的样本相似度较高,不同簇之间的样本相似度较低。每个簇由一个质心(中心点)来代表,算法通过迭代的方式不断更新质心的位置,直到质心不再发生显著变化或达到最大迭代次数。
  • KNN:对于分类问题,它根据新样本的K个最近邻样本的类别,通过多数表决的方式来确定新样本的类别;对于回归问题,它根据K个最近邻样本的数值,通过求平均值等方式来预测新样本的数值。

核心原理

  • K-means:首先随机初始化K个质心,然后将每个样本分配到距离最近的质心所在的簇中,接着重新计算每个簇的质心,不断重复这个过程,直到收敛。
  • KNN:对于一个新的数据点,它会计算该数据点与训练集中所有样本的距离,然后选择距离最近的K个样本,根据这K个样本的情况进行分类或回归。

数据输出

  • K-means:输出是每个样本所属的簇的标签,用于揭示数据的聚类结构。
  • KNN:输出是新样本的预测类别(分类问题)或预测值(回归问题)。

示例代码对比

以下是简单的Python代码示例,帮助你理解两者的使用:

K-means示例代码:

from sklearn.cluster import KMeans
import numpy as np

# 生成一些示例数据
X = np.array([[1, 2], [1, 4], [1, 0],
              [4, 2], [4, 4], [4, 0]])

# 创建K-means模型
kmeans = KMeans(n_clusters=2, random_state=0).fit(X)

# 输出每个样本的簇标签
print(kmeans.labels_)

KNN示例代码:

from sklearn.neighbors import KNeighborsClassifier
import numpy as np

# 生成一些示例数据和标签
X = np.array([[1, 2], [1, 4], [1, 0],
              [4, 2], [4, 4], [4, 0]])
y = np.array([0, 0, 0, 1, 1, 1])

# 创建KNN模型
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X, y)

# 预测新样本的类别
new_sample = np.array([[2, 2]])
print(knn.predict(new_sample))

通过上述代码可以看出,K-means不需要标签,而KNN需要有标签的数据进行训练。


全部评论: 0

    我有话说: