python 读取csv文件 用k-medoide算法聚类不使用scikit-learn库 轮廓系数 可视化
时间: 2024-02-02 10:04:35 浏览: 78
好的,如果你不想使用scikit-learn库,你可以手动实现k-medoids算法。以下是一个简单的实现代码:
```python
import numpy as np
import pandas as pd
import random
from scipy.spatial.distance import pdist, squareform
# 读取csv文件
data = pd.read_csv('your_file.csv')
# 定义k-medoids算法
def kmedoids(D, k, tmax=100):
m, n = D.shape
# 初始化中心点
index = np.arange(m)
np.random.shuffle(index)
M = index[:k]
# 计算距离矩阵
D = squareform(pdist(D))
# 初始化标签
C = np.argmin(D[:, M], axis=1)
# 迭代更新中心点和标签
for t in range(tmax):
for k in range(m):
# 选择一个非中心点
if k not in M:
# 计算新的中心点
M_temp = M.copy()
M_temp[random.choice(range(len(M)))] = k
# 计算新的标签
C_temp = np.argmin(D[:, M_temp], axis=1)
# 比较新的标签和旧的标签的轮廓系数
if metrics.silhouette_score(D, C_temp) > metrics.silhouette_score(D, C):
M = M_temp
C = C_temp
return M, C
# 调用kmedoids函数进行聚类
M, C = kmedoids(data.values, 2)
# 计算轮廓系数
D = squareform(pdist(data.values))
silhouette_score = metrics.silhouette_score(D, C)
# 将聚类结果添加到数据集中
data['cluster'] = C
# 可视化聚类结果
sns.scatterplot(x='x_axis', y='y_axis', hue='cluster', data=data)
# 显示图形
plt.show()
```
这个实现代码中,我们手动实现了k-medoids算法,并使用了轮廓系数评价聚类效果,最后使用matplotlib和seaborn库可视化聚类结果。希望对你有帮助!
阅读全文