У меня есть CSV-файл с 6 атрибутами и 1 классом, который я читаю с Pandas.
CsvFile = "/path/to/file.csv"
df = pd.read_csv(CsvFile)
Первые 5 строк моего CSV:
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: как вы понимаете, копировать-вставить random.uniform(0.0, 255.0)
столько раз, сколько случайных точек, которые я хочу получить, чтобы соответствовать количеству атрибутов в моем CSV-файле, не очень продуктивно. Есть идеи, как это сделать без копирования и вставки?
Подобным образом в следующем коде я вычисляю евклидово расстояние.
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
, а если у меня их меньше, удалить один или несколько. Как я могу немного автоматизировать этот процесс? 1021 * 1022