如何用python写一个K-means的函数
时间: 2023-06-13 08:08:53 浏览: 142
下面是一个简单的 Python 代码示例,用于实现 K-means 算法:
```python
import numpy as np
from sklearn.cluster import KMeans
def kmeans(data, k):
kmeans = KMeans(n_clusters=k).fit(data)
return kmeans.labels_
```
其中,`data` 是输入的数据集,`k` 是聚类数。函数使用 `sklearn` 库中的 KMeans 类来执行 K-means 算法,并返回每个数据点所属的聚类标签。调用函数时,可以像下面这样使用:
```python
data = np.array([[1, 2], [1, 4], [1, 0],
[4, 2], [4, 4], [4, 0]])
k = 2
labels = kmeans(data, k)
print(labels)
```
输出结果:
```
[0 0 0 1 1 1]
```
这表示前三个数据点被分配到第一个聚类中,后三个数据点被分配到第二个聚类中。
相关问题
用python写一个k-means算法
以下是一个简单的 Python 实现 k-means 算法的示例代码:
```python
import random
import numpy as np
def kmeans(X, k, max_iterations=100):
# 随机选择 k 个点作为初始聚类中心
centroids = random.sample(X, k)
for i in range(max_iterations):
# 将数据点分配给最近的聚类中心
clusters = [[] for _ in range(k)]
for x in X:
distances = [np.linalg.norm(x - c) for c in centroids]
cluster_index = np.argmin(distances)
clusters[cluster_index].append(x)
# 计算新的聚类中心
new_centroids = []
for cluster in clusters:
new_centroid = np.mean(cluster, axis=0)
new_centroids.append(new_centroid)
# 如果聚类中心不变则停止迭代
if np.allclose(centroids, new_centroids):
break
centroids = new_centroids
return clusters, centroids
```
在上述代码中,输入参数 X 是一个 n×m 的矩阵,其中 n 是数据点的数量,m 是每个数据点的特征数。k 是需要聚类的簇的数量。max_iterations 是最大迭代次数。
在函数的开头,我们随机选择 k 个点作为初始聚类中心。然后,我们将数据点分配给最近的聚类中心,并计算新的聚类中心。如果新的聚类中心和旧的聚类中心相同,则停止迭代。
最后,函数返回聚类后的簇以及聚类中心。
用python写一个K-means的代码
好的,下面是一个简单的K-means算法的Python代码实现:
```python
import numpy as np
def kmeans(X, k, max_iters=100):
# 随机初始化聚类中心
centroids = X[np.random.choice(len(X), k, replace=False)]
for i in range(max_iters):
# 计算每个样本点到聚类中心的距离
distances = np.sqrt(((X - centroids[:, np.newaxis])**2).sum(axis=2))
# 分配每个样本到距离最近的聚类中心
labels = np.argmin(distances, axis=0)
# 更新聚类中心
for j in range(k):
centroids[j] = X[labels == j].mean(axis=0)
return labels, centroids
```
其中,X是一个二维的numpy数组,每行表示一个样本点,k表示聚类中心的数量,max_iters表示最大迭代次数。函数返回一个元组,第一个元素是每个样本点所属的聚类标签,第二个元素是k个聚类中心的坐标。
阅读全文