K-Means聚类算法解析

算法可以分为三种类型:监督学习、无监督学习和强化学习。K-means聚类是一种无监督的机器学习技术。当输出或响应变量未提供时,这种算法被用来将数据分类到不同的簇中,以便更好地理解数据。它也被称为数据驱动的机器学习方法,因为它根据数据中的隐藏模式、洞察力和相似性对数据进行聚类。

考虑下面的图表:如果被要求将图片中的人分成不同的簇或组,而对这些人一无所知,无疑会尝试找到这些人共享的品质、特征或身体属性。观察这些人后,得出结论,他们可以根据身高和体重进行分类;鉴于对这些人没有先验知识。K-means聚类执行的工作大致相同。它试图根据相似性和隐藏模式对数据进行分类。K-means聚类中的“K”指的是算法将在数据中生成的簇的数量。

K-Means聚类工作原理

1) 算法随机选择k个质心,如图1所示。这里的k是算法将要创建的簇的数量。假设希望算法从数据中创建两个簇,那么将k的值设置为2。

2) 然后,它使用从两个质心计算出的距离将数据分成两部分,如图2所示。每个点到两个质心的距离分别计算,然后将点添加到距离最短的质心组中。算法还绘制了一条连接两个质心的线和一条垂直于它的线,试图将数据分成两组。

3) 一旦所有数据点根据它们与相应质心的最小距离被分组,算法随后计算每个组的平均值。然后比较每个组的均值和质心值。如果质心值与均值不同,则将质心移动到组的均值。如图3所示,红色和蓝色质心都移动到组的均值。

4) 再次计算均值并与新生成的组的质心进行比较。如果它们不同,质心将再次移动到组的均值。这个过程一直迭代,直到质心值和均值相等(质心值=组均值)。这是算法将数据分割成'K'个簇(本例中为2个)的点。

如何确定K的最优值

第一步是为k提供一个值。算法执行的每个后续步骤都完全依赖于指定的k值。这个k值帮助算法确定应该生成的簇的数量。这强调了为k提供精确值的重要性。在这里,使用一种称为“肘部方法”的方法来确定k的正确值。这是一个“簇数K”与“总内平方和”的图表。在x轴上绘制k的离散值,而在y轴上绘制簇的平方和。

1) 计算质心与簇中每个点之间的距离,将其平方,然后为簇中的所有点求平方距离之和。

2) 以相同的方式找到剩余簇的平方距离之和。

3) 最后,将所有簇的求和相加,得到“簇内平方和”的值,如下所示。

“总内平方和”随着k值的增加而开始减少。簇数与总内平方和之间的图表如下所示。簇的最优数量,或k的正确值,是值开始缓慢减少的点;这被称为“肘点”,如下所示的肘点是k=4。“肘部方法”因图表类似于肘部而得名,而“k”的最优点是肘点。

K-Means聚类的优势

1) 不需要标记数据。由于如此多的真实世界数据都是未标记的,因此它经常在各种真实世界问题陈述中使用。

2) 易于实现。

3) 能够处理大量数据。

4) 当数据量较大时,它比层次聚类(对于小k)运行得更快。

1) 需要手动使用“肘部方法”选择K值。

2) 异常值的存在会对聚类产生不利影响。因此,在使用k-means聚类之前,必须消除异常值。

3) 簇不会交叉;一个点一次只能属于一个簇。由于缺乏重叠,某些点被错误地放置在错误的簇中。

将在工作中导入以下库。

library(caret) library(ggplot2) library(dplyr)

将使用iris数据进行工作,其中包含三个类别:“Iris-setosa”、“Iris-versicolor”和“Iris-virginica”。

data <- read.csv("iris.csv", header =T)

让看看这三个类别是如何相互关联的。物种“Iris-versicolor”(绿色)和“Iris-verginica”(蓝色)不是线性可分的。正如下面的图表所示,它们是混合的。

data %>% ggplot(aes(SepalLengthCm, SepalWidthCm, color= Species))+ geom_point()

从数据中移除物种列后。现在将使用肘部方法的图表来确定“簇内平方和”和“k值”之间的合适值。在这种情况下,K=3是k的最佳值(注意:原始iris数据中有3个类别,这确保了k值的准确性)。

data <- data[, -5] maximum <- 10 scal <- scale(data) wss <- sapply(1:maximum, function(k){kmeans(scal, k, nstart = 50, iter.max = 15)$tot.withinss}) plot(1:max, wss,type="b", xlab = "k values")

对于k=3,应用K-means聚类算法。在这种情况下,K-means聚类方法解释了71.5%的数据变异性。

km <- kmeans(data[,1:2], k=3, iter.max = 50) km

让看看这三个类别是如何使用k-means聚类进行聚类的。正如所知,K-means聚类不会创建重叠的簇。由于“绿色”和“蓝色”物种在原始数据中不是线性可分的,k-means聚类无法捕捉到这一点,因为它有紧密的簇。

km$cluster <- as.factor(km$cluster) data %>% ggplot(aes(SepalLengthCm, SepalWidthCm, color= km$cluster))+ geom_point()

文章:Shivam Sharma。

电话:+91 7974280920

电子邮件:[email protected]

LinkedIn:www.linkedin.com/in/shivam-sharma-49ba71183

blogathon

K-Means聚类算法

Shivam

遇见Shivam,一位有两年经验的数据科学家,目前在梅赛德斯-奔驰工作。参与了多个与自然语言处理、经典机器学习和深度学习相关的项目。凭借在数据科学方面的学习,还擅长分析复杂数据集,以发现推动业务决策的洞察力和趋势。

初学者

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485