我尝试创建两个数据帧(一个用于保存质心结果,另一个用于保存添加到原始数据库中的群集标签结果),使用不同的群集编号(1,2,3,4,5)
原始数据如下所示:
在不同的街区有10家超市。男性=%社区男性,女性=%社区女性,N_产品=超市产品数量,GM=超市毛利率
# Load Libraries
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
from scipy.spatial import distance
df=pd.read_csv("stores.csv")
# Standardization (z-score)
scaler = StandardScaler()
df_std = scaler.fit_transform(df)
# Centroid and Label results for all numbers of clusters:
from collections import Counter
centroids_All = []
df_All = []
for cluster in range(1,6):
kmeans = KMeans(n_jobs = -1, n_clusters = cluster, init='k-means++')
kmeans.fit(df_std)
counts = dict(Counter(kmeans.labels_))
counts = pd.DataFrame.from_dict(counts, orient='index', columns=['Stores'])
centroids_deno = pd.DataFrame(scaler.inverse_transform(kmeans.cluster_centers_),columns= df.columns)
centroids_deno['Stores'] = counts['Stores']
centroids_deno['n_cluster'] = cluster
centroids_All.append(centroids_deno)
df['Label']=kmeans.labels_
df['n_cluster']=cluster
df_All.append(df)
df_All=pd.concat(df_All)
centroids_All = pd.concat(centroids_All)
质心结果是我想要创建的第一个数据帧
第二个数据帧是原始数据集,但包含一个标签,用于标识哪些存储属于哪些集群。这是我结果的一部分(太长了,无法显示)。 问题是n_cluster列应该是1到5之间的值,这意味着集群的数量,但我的算法只在集群的数量=5时生成结果,并重复5次
我很感激有人帮我修理它。谢谢大家!
目前没有回答
相关问题 更多 >
编程相关推荐