使用 sklearn 的 Kmeans 获得更好的结果

Posted

技术标签:

【中文标题】使用 sklearn 的 Kmeans 获得更好的结果【英文标题】:getting better results with sklearn's Kmeans 【发布时间】:2021-12-24 14:49:12 【问题描述】:

我有一个包含三个集群的 3d 空间,但是当我使用 Sklearn.cluster Kmeans 执行集群时,结果不太好。这是代码和结果。希望你能帮忙:)

from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

km = KMeans(n_clusters=3)
y_predicted = km.fit_predict(df1[['x','y','z']])
y_predicted

def create_3d_scatter_wprd(df):

   fig = plt.figure(figsize=(48, 24))
   ax = fig.add_subplot(111, projection='3d')
   ax.scatter(df['x'], df['y'], df['z'], c=y_predicted)
   plt.show()

create_3d_scatter_wprd(df)

以下是聚类的结果:

对于那些对如何制作数据感兴趣的人,这里是代码

space = np.zeros((100,100,100))

def distance(a,b,c,i,j,k,r):
    if math.dist((a,b,c),(i,j,k)) <= r:
        return True
    else:
        return False

for i in range(1,31):
    for j in range(1,31):
        for k in range(1,31):
            space[i,j,k] = 1
            
for i in range(60,85):
    for j in range(60,85):
        for k in range(60,85):
            space[i,j,k] = 2
            
for i in range(35,55):
    for j in range(35,55):
        for k in range(35,55):
            if distance(i,j,k,45,45,45,10):
                space[i,j,k] = 3

【问题讨论】:

如何重现df1 @Corralien df1 只是一个包含点 x,y,z 坐标的简单数据框 我明白,但是如何创建这个数据框来获得类似的情节? @Corralien 好的,我已经添加了数据生成的代码!抱歉耽搁了!没有收到您的评论。 【参考方案1】:

没有您的数据很难重现您的问题,您会明白原因。

f = lambda l,h: (np.random.randint(l, h, (30,30,30)) \
                 + np.random.random((30, 30, 30))).reshape(-1, 3)

df = pd.DataFrame(np.concatenate([f(10, 20), f(20, 30), f(30, 40)]),
                  columns=list('xyz'))

# Your code here
...

create_3d_scatter_wprd(df)

【讨论】:

以上是关于使用 sklearn 的 Kmeans 获得更好的结果的主要内容,如果未能解决你的问题,请参考以下文章

无监督学习——KMeans使用

sklearn KMeans 中 KMeans.cluster_centers_ 的值

菜菜的sklearn课堂笔记聚类算法Kmeans-重要参数init & random_state & n_init:初始质心怎么放更好

详解聚类算法Kmeans-重要参数init & random_state & n_init:初始质心怎么放更好菜菜的sklearn课堂笔记

如何从集群实现 sklearn -AgglomerativeClustering?

使用 sklearn KMeans 与 SciPy kmeans 相比有优势吗?