我有一个CSV文件,该文件具有6个属性和1个类,可以通过Pandas进行阅读。
CsvFile = "/path/to/file.csv"
df = pd.read_csv(CsvFile)
我的CSV的前5行:
x,y,x1,y1,x2,y2,class
92,115,120,94,84,102,3
84,102,106,79,84,102,3
84,102,102,83,80,102,3
80,102,102,79,84,94,3
84,94,102,79,80,94,3
由于我有6个属性,所以我想用Python创建一个字典(6个键,每个键5个值),该字典将具有kmeans的质心。
numberOfClusters = 5
centroids =
{
i+1: [random.uniform(0.0, 255.0), random.uniform(0.0, 255.0),
random.uniform(0.0, 255.0), random.uniform(0.0, 255.0),
random.uniform(0.0, 255.0), random.uniform(0.0, 255.0)]
for i in range(numberOfClusters)
}
问题1:如您所知,为了匹配CSV文件中的属性数,将random.uniform(0.0, 255.0)
复制粘贴至我想要获取的随机点的次数不那么有效。 。有没有复制粘贴的方法吗?
以类似的方式,在下面的代码中,我计算了欧几里得距离。
for i in centroids.keys():
df['distance_from_{}'.format(i)] = (
np.sqrt(
(df['x'] - centroids[i][0]) ** 2
+ (df['y'] - centroids[i][1]) ** 2
+ (df['x.1'] - centroids[i][2]) ** 2
+ (df['y.1'] - centroids[i][3]) ** 2
+ (df['x.2'] - centroids[i][4]) ** 2
+ (df['y.2'] - centroids[i][5]) ** 2
)
)
问题2:如果我有更多属性,则必须添加更多df['x'] - centroids[i][0]) ** 2
,而如果我有更少属性,则删除一个或多个。我如何才能稍微自动化该过程?
不使用scikit的kmeans的原因是我想计算每个群集的权重。
如果键数是您可以使用的问题