【问题标题】:getting better results with sklearn's Kmeans使用 sklearn 的 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 好的,我已经添加了数据生成的代码!抱歉耽搁了!没有收到您的评论。

标签: python pandas scikit-learn cluster-analysis k-means


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-30
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    • 2018-12-24
    • 1970-01-01
    • 2020-05-22
    • 2015-05-16
    相关资源
    最近更新 更多