K中心聚类python 数据集
时间: 2023-07-28 15:45:48 浏览: 55
您可以使用Python中的scikit-learn库进行K中心聚类,以下是一个简单的示例:
首先,您需要准备用于聚类的数据集。您可以使用scikit-learn中的make_blobs函数来生成随机数据集,如下所示:
```python
from sklearn.datasets import make_blobs
X, y = make_blobs(n_samples=100, centers=3, n_features=2, random_state=0)
```
接下来,您需要导入KMeans模型并将其拟合到数据集中。在这里,我将使用k=3进行聚类。
```python
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3, init='k-means++', max_iter=300, n_init=10, random_state=0)
pred_y = kmeans.fit_predict(X)
```
最后,您可以使用matplotlib库将数据可视化并查看聚类结果。
```python
import matplotlib.pyplot as plt
plt.scatter(X[:,0], X[:,1])
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=300, c='red')
plt.show()
```
希望这可以帮助您开始使用K中心聚类进行数据聚类。
相关问题
K中心聚类python csv数据集 实例
以下是一个基于CSV数据集的K中心聚类Python实现示例:
```python
import numpy as np
import pandas as pd
from scipy.spatial.distance import cdist
def kcenter_clustering(X, k):
"""
K-Center聚类算法实现
:param X: 数据集,形状为(n_samples, n_features)
:param k: 簇的数量
:return: 簇的标签,形状为(n_samples,)
"""
n_samples = X.shape[0]
# 随机选择第一个中心点
center_idx = np.random.choice(n_samples, 1)
centers = X[center_idx]
# 初始化距离矩阵
distances = cdist(X, centers, metric='euclidean')
# 初始化簇的标签
labels = np.zeros(n_samples, dtype=int)
for i in range(1, k):
# 选择距离当前中心点最远的样本作为下一个中心点
farthest_distance = np.max(distances, axis=1)
next_center_idx = np.argmax(farthest_distance)
next_center = X[next_center_idx]
centers = np.vstack((centers, next_center))
# 更新距离矩阵
next_distances = cdist(X, np.array([next_center]), metric='euclidean')
distances = np.minimum(distances, next_distances)
# 更新簇的标签
next_labels = np.ones(n_samples, dtype=int) * i
labels = np.where(next_distances < distances, next_labels, labels)
return labels
# 读取CSV数据集
data = pd.read_csv('data.csv')
X = data.iloc[:, :-1].values
# 进行K中心聚类
k = 3
labels = kcenter_clustering(X, k)
# 输出簇的标签
print(labels)
```
在该示例中,我们使用了Pandas库读取名为`data.csv`的CSV数据集。请确保该文件与代码文件在同一目录中。然后我们从数据集中提取所有特征,并将其传递给K中心聚类实现。在这里,我们假设要将数据集分成3个簇。最后输出每个点所属的簇的标签。
请注意,在实际应用中,您可能需要对数据进行预处理,例如标准化或归一化,以使得K中心聚类算法能够更好地工作。
K中心聚类python实现 并用数据集进行性能测试
好的,下面是一个完整的K中心聚类Python实现,以及使用数据集进行性能测试的示例:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.metrics import pairwise_distances_argmin
from time import time
class KMeans:
def __init__(self, k):
self.k = k
def fit(self, X):
m = X.shape[0] # 样本数量
self.centers = X[np.random.choice(m, self.k, replace=False)] # 随机选择k个中心点
while True:
# 分配样本到最近的中心点
labels = pairwise_distances_argmin(X, self.centers)
# 计算新的中心点
new_centers = np.array([X[labels == i].mean(0) for i in range(self.k)])
# 如果中心点不再变化,停止迭代
if np.all(self.centers == new_centers):
break
self.centers = new_centers
return self.centers, labels
# 生成随机数据集
X, y = make_blobs(n_samples=1000, centers=3, n_features=2, random_state=0)
# 测试KMeans算法性能
t0 = time()
kmeans = KMeans(k=3)
centers, labels = kmeans.fit(X)
t1 = time()
print('KMeans算法用时: %.2f秒' % (t1 - t0))
# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=labels)
plt.scatter(centers[:, 0], centers[:, 1], marker='*', s=300, c='red')
plt.show()
```
这里使用scikit-learn中的make_blobs函数生成一个包含1000个样本,3个类别的数据集。然后,我们使用KMeans类进行聚类,将k设置为3,并记录算法的运行时间。最后,我们使用matplotlib库将聚类结果可视化。
您可以根据需要更改数据集的大小和K值,并比较不同参数下算法的性能及聚类效果。