首页 > 解决方案 > Python 中的 KMeans - 转换变量后保留样本权重

问题描述

我的数据框 (df) 由布尔值、连续变量和一个名为 wt_cnt 的字段的混合组成,该字段指示记录的权重。

在我进行聚类之前,MinMaxScaler 应用于我的数据:

mms = MinMaxScaler()
mms.fit(data)
data_transformed = mms.transform(data)

KMeans 例程如下:

sum_of_squared_distances = []
K = range(1,15)
for k in K:
    km = KMeans(n_clusters=k) #init model
    km = km.fit(data_transformed, sample_weight=None) #fit model
    sum_of_squared_distances.append(km.inertia_) #overall SSE 

但是我想从我的第一个 df (wt_cnt) 中保留我的初始字段,该字段指定我的聚类分析的权重。这对我来说很难做到,因为 data_transformed 只是一个矩阵而不是 df。关于如何最有效地做到这一点的任何建议?

下面的例子:

data = [[2,12669,5]
      ,[2,7057,1]
      ,[2,6353,1]
      ,[1,13265,3]
      ,[2,22615,1]      
      ,[2,9413,1]      
      ,[2,12126,2]      
      ,[2,7579,1]      
      ,[1,5963,1]]
df = pd.DataFrame(data,columns=['Nm','Frsh','wt_cnt'])
mms = MinMaxScaler()
mms.fit(df)
data_transformed = mms.transform(df)
sum_of_squared_distances = []
K = range(1,5)
for k in K:
    km = KMeans(n_clusters=k)
    km = km.fit(data_transformed, sample_weight=None)
    sum_of_squared_distances.append(km.inertia_)
plt.plot(K, sum_of_squared_distances, 'bx-')
plt.xlabel('k')
plt.ylabel('SS dists')
plt.show()

标签: pythonk-means

解决方案


推荐阅读