龙空技术网

K-Means聚类

编程小寶 467

前言:

今天你们对“cmeans聚类算法c”大约比较重视,小伙伴们都想要了解一些“cmeans聚类算法c”的相关知识。那么小编也在网络上网罗了一些有关“cmeans聚类算法c””的相关文章,希望你们能喜欢,姐妹们快快来学习一下吧!

k均值聚类算法属于机器学习的无监督学习类。提供给无监督算法的数据没有标记,即只给出输入变量(x)。

要理解K-means聚类的真正含义,我们可以从单词开始:

聚类(Cluster) - 指一组紧密排列或紧密相连的类似事物。 均值(Means) - 指数据的平均值 K - 指聚类的数量。K-means聚类如何工作?第一步是选择质心数。

如果给出上面的图像并要求决定将数据分成多少个聚类,那么显而易见的答案就是3。但是机器如何通过算法来决定呢?

肘部法则:您可能会想到的最基本的方法是试错法,通常称为肘部法。您可以尝试不同的k值并绘制聚类平方和(wcss)的平均值,即距各自质心相对于k的平均距离。理想的k值位于图的肘部。

2.找到k后,需要定位它们。换句话说,您需要找到k个质心的值。

最简单的方法是随机放置质心,即从数据集中随机选择k个数据点。但是,如果您选择一个异常值作为质心,则会破坏您的聚类并给出不适当的结果。

更有效的方法是多次运行算法并使用wcss找到最佳的质心值。

3.将数据点分配到最近的质心

初始化; 接下来是将每个数据点分配给k个聚类中的任何一个。

其中,S代表聚类,c代表质心值。

4.通过查找每个聚类的平均值来重新计算新的质心。

将每个数据点分配给k个聚类中的任何一个后,通过查找每个聚类的平均值来重新计算新的质心。

5.将数据点重新分配到最近的质心。

重复步骤3,即找到最近的质心并将数据点分配给该聚类。

6.重复步骤4和5,直到数据点保持在同一个聚类中。

步骤4和步骤5是迭代步骤,直到您收敛到聚类停止更改。

Iris数据集的示例代码

导入Python库

import numpy as npimport pandas as pdimport matplotlib.pyplot as plt%matplotlib inlinefrom sklearn.cluster import KMeans

读取数据集()

dataset = pd.read_csv('iris.csv')

为了简单起见,我们根据萼片长度和萼片宽度对机器学习数据集进行聚类,因此我们只考虑两个特征 - sepal_length和sepal_width。

data = dataset.values[:, 0:2]

使用elbow方法查找k的值

wcss = []for i in range(1, 6): kmeans = KMeans(n_clusters = i, init = 'k-means++', random_state = 100) kmeans.fit(data) wcss.append(kmeans.inertia_)plt.plot(range(1,6), wcss)plt.title('The Elbow Method')plt.xlabel('Number of clusters (k)')plt.ylabel('WCSS')

可以观察到k的值为3。

将K-means聚类应用于k = 3的机器学习数据集。

kmeans = KMeans(n_clusters= 3, init= 'k-means++', random_state= 42)y_kmeans = kmeans.fit_predict(data)

绘制聚类点和质心,Python代码如下:

#Below lines plot the cluster pointsplt.scatter(data[y_kmeans == 0, 0], data[y_kmeans == 0, 1], s = 100, c = 'red', label = 'Cluster 1')plt.scatter(data[y_kmeans == 1, 0], data[y_kmeans == 1, 1], s = 100, c = 'blue', label = 'Cluster 2')plt.scatter(data[y_kmeans == 2, 0], data[y_kmeans == 2, 1], s = 100, c = 'green', label = 'Cluster 3')#Plot the centroids with a bigger sizeplt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s = 300, c = 'yellow', label = 'Centroids',marker='s')plt.title('Clusters of IRIS dataset')plt.xlabel('Sepal length')plt.ylabel('Sepal width')plt.legend()

标签: #cmeans聚类算法c