python kmeans聚类算法代码
时间: 2023-05-17 17:00:42 浏览: 160
Python kmeans聚类算法代码如下:
```python
import numpy as np
from sklearn.cluster import KMeans
#生成随机数据,因为是演示示例,故意生成两组数据
x1 = np.random.uniform(0,1,(100,2))
x2 = np.random.uniform(2,3,(100,2))
X = np.vstack((x1,x2))
# 实例化KMeans对象,并且设置聚类数为2
kmeans = KMeans(n_clusters=2)
# 拟合聚类模型
kmeans.fit(X)
# 输出聚类后的标签
print(kmeans.labels_)
# 输出聚类后的中心点
print(kmeans.cluster_centers_)
```
以上代码通过导入numpy库生成随机数据,并将两组数据合并为一个二维矩阵X,然后使用sklearn.cluster库中的KMeans类进行聚类模型的实例化,聚类数设置为2。接着,调用fit()方法拟合模型,获取聚类后的标签和中心点,最后输出聚类后的标签和中心点。
以上便是Python kmeans聚类算法代码的实现方法,通过以上代码可以很方便地进行kmeans聚类算法的实现,用于数据分析和机器学习等相关领域。
相关问题
kmeans聚类算法代码python
以下是kmeans聚类算法的Python代码:
```
import numpy as np
import matplotlib.pyplot as plt
def kmeans(X, K, max_iters=100):
centroids = X[np.random.choice(len(X), K, replace=False)]
for i in range(max_iters):
C = np.argmin(np.sqrt(((X - centroids[:, np.newaxis])**2).sum(axis=2)), axis=)
new_centroids = np.array([X[C == k].mean(axis=) for k in range(K)])
if np.allclose(centroids, new_centroids):
break
centroids = new_centroids
return C, centroids
# 生成数据
np.random.seed()
X = np.vstack([np.random.randn(100, 2) + [2, 2], np.random.randn(100, 2) + [-2, -2], np.random.randn(100, 2) + [2, -2]])
# 聚类
C, centroids = kmeans(X, 3)
# 可视化
plt.scatter(X[:, ], X[:, 1], c=C)
plt.scatter(centroids[:, ], centroids[:, 1], marker='x', s=200, linewidths=3, color='r')
plt.show()
```
该代码实现了kmeans聚类算法,其中X为输入数据,K为聚类数目,max_iters为最大迭代次数。函数返回聚类结果C和聚类中心centroids。代码中还包括了一个简单的数据生成和可视化过程。
kmeans聚类算法代码详细python
K-均值聚类是一种常见的无监督机器学习算法,用于将数据分成几个不同的组。理论上,算法可以被用于任何类型的数据集,但是,需要对每个点建立距离度量,来预测该点可能属于哪个聚类。下面是Python中K-means聚类算法的代码详细解释。
代码如下:
```
import numpy as np
import matplotlib.pyplot as plt
def k_means(X, k, max_iters=10):
centroids = X[np.random.choice(range(len(X)), k), :]
for i in range(max_iters):
C = np.array([np.argmin([np.dot(x_i-centroids[j],x_i-centroids[j]) for j in range(k)]) for x_i in X])
centroids = [X[C == j].mean(axis=0) for j in range(k)]
return np.array(centroids), C
# 创建数据集
np.random.seed(0)
X = np.vstack((np.random.randn(100,2)*0.75 + np.array([1,0]),
np.random.randn(100,2)*0.25 + np.array([-0.5,0.5]),
np.random.randn(100,2)*0.5 + np.array([-0.5,-0.5])))
# 调用k_means函数并输出结果
centroids, C = k_means(X, 3)
fig, ax = plt.subplots(figsize=(8,8))
plt.scatter(X[:,0], X[:,1], c=C.astype(float))
plt.scatter(centroids[:,0], centroids[:,1], marker='*', s=300, c='r')
```
解释:
* 第1行–导入必要的Python库,以及我们将要用到的函数。
* 第3-5行–函数接受输入,其中包括数据集X,期望的聚类数k和最大迭代次数max_iters。函数定义了一个初始聚类中心点centroids,然后迭代max_iters次计算最终聚类中心点。
* 第6行-使用numpy中的随机数生成器,从数据集中随机选择k个点作为初始聚类中心点centroid。
* 第7-10行-通过计算每个点到聚类中心点的距离,确定每个点所属的聚类,并将新的聚类中心点计算为属于对应聚类的所有点的平均值。这个过程将重复进行max_iters次。
* 第11-12行-将 点的聚类信息C返回,并返回最终的聚类中心点centroids。
* 第14-21行–创建一个数据集,并将它们传递给刚创建的函数。然后,绘制数据点,使用不同的颜色表示两个聚类,用red '*'表示所得到的聚类中心点。
该算法能够将数据聚类成不同的组,可以使用在几乎所有需要分类的情况下,该算法具有快速的性能和易于实现的优势。
阅读全文