聚类分析pyhton代码
时间: 2023-07-02 20:15:08 浏览: 99
下面是一个简单的聚类分析Python代码的示例,使用K-Means算法进行聚类:
```
import numpy as np
import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
# 读取数据
data = pd.read_csv('data.csv')
# 构造特征矩阵
X = np.array(data[['feature1', 'feature2']])
# 设置聚类数目
k = 3
# 构建K-Means模型
kmeans = KMeans(n_clusters=k)
# 拟合数据
kmeans.fit(X)
# 获取聚类结果
labels = kmeans.labels_
# 绘制聚类结果
colors = ['red', 'green', 'blue']
for i in range(k):
plt.scatter(X[labels == i, 0], X[labels == i, 1], c=colors[i], label='cluster{}'.format(i+1))
plt.legend()
plt.show()
```
其中,数据集存储在data.csv文件中,特征矩阵X是由feature1和feature2两列组成的。聚类数目k被设定为3。通过KMeans模型拟合数据,获取聚类结果labels,然后将聚类结果可视化。
相关问题
利用kennard-stone算法进行数据集分组,给出Pyhton代码
Kennard-Stone算法是一种用于数据降维和聚类的无监督学习方法。它从原始数据集中选择一对最远的数据点,形成第一个簇,然后移除这个簇并重复此过程,直到达到所需的簇数或达到预定的迭代次数。以下是使用Python实现的一个简化版示例:
```python
import numpy as np
from sklearn.metrics.pairwise import euclidean_distances
def kennard_stone(data, num_clusters, init='random'):
# 数据预处理
data = np.array(data)
# 初始化
if init == 'random':
center = data[np.random.choice(len(data), num_clusters, replace=False)]
elif init == 'first_two':
distances = euclidean_distances(data)
center = data[np.argsort(distances.sum(axis=1))[0:2]] # 取距离之和最小的两个点作为初始中心
else:
raise ValueError(f"Invalid initialization method: {init}")
clusters = [[] for _ in range(num_clusters)]
while len(clusters) != num_clusters:
# 计算每个数据点到所有簇中心的距离
dists = [euclidean_distances([data[i]], [center[j]])[0][0] for i, j in enumerate(range(len(center)))]
# 找出离当前中心最远的点
farthest_index = np.argmax(dists)
# 将该点添加到最近的簇中
closest_center_index = np.argmin([dists[i] for i in range(len(clusters))])
clusters[closest_center_index].append(data[farthest_index])
center[closest_center_index] = np.mean(clusters[closest_center_index], axis=0) # 更新中心点
return center, clusters
# 示例用法
X = ... # 假设这是你的数据矩阵
num_clusters = 3
centers, clusters = kennard_stone(X, num_clusters)
```
请注意,这个实现非常基础,实际应用中你可能需要对距离计算、初始化策略和性能优化进行调整。此外,`sklearn`库中的`KMeans`或者其他专门的聚类算法可能更适合于这类任务。
阅读全文