Индекс Данна и инерция в алгоритме kmeansPython

Программы на Python
Anonymous
Индекс Данна и инерция в алгоритме kmeans

Сообщение Anonymous »

У меня есть код, который запускает алгоритм KMeans для некоторых данных, но он мне нужен, чтобы теперь вычислить индекс Данна и инерцию для него, но поскольку ограничения для этой программы - numpy, matplotlib и csv, ни одно онлайн-видео не показывает, как вычислить Индекс Данна с помощью всего лишь этой пары библиотек. Я не очень люблю математику, поэтому внедрение реальных математических вычислений в код для меня слишком сложно...
Я искал в Интернете, как это сделать. вычислить индекс Данна и инерцию в Python с ограничениями numpy, но все использовало другую библиотеку.
Вот код:
import numpy as np
import matplotlib.pyplot as plt
import csv

def load_data(file_path):
data = []
with open(file_path, 'r') as csvfile:
csvreader = csv.reader(csvfile)
next(csvreader)
for row in csvreader:
data.append([float(row[0]), float(row[1])])
return np.array(data)

def calculate_distances(data, centers):
data_with_distances = data.copy()
num_centers = centers.shape[0]

for i in range(num_centers):
distances = np.sqrt(((data - centers) ** 2).sum(axis=1))
data_with_distances = np.column_stack((data_with_distances, distances))

return data_with_distances

def get_clusters(data_with_distances):
num_clusters = data_with_distances.shape[1] - 2
cluster_masks = []
for i in range(num_clusters):
mask = data_with_distances[:, i+2] == np.min(data_with_distances[:, 2:num_clusters+2], axis=1)
cluster_masks.append(mask)

clusters = [data_with_distances[mask, :] for mask in cluster_masks]
return clusters

def calculate_centers(clusters):
centers = np.array([cluster.mean(axis=0)[:2] for cluster in clusters])
return centers

def plot_clusters(clusters, centers):
colors = ['blue', 'red', 'green']
for i, cluster in enumerate(clusters):
plt.scatter(cluster[:, 0], cluster[:, 1], color=colors)
for center in centers:
plt.scatter(center[0], center[1], color='purple', marker='*', s=150)
plt.xlabel('Household Total Assets')
plt.ylabel('Annual Household Income')
plt.title('K-means Clustering of Household Data')
plt.show()

def run(data, num_clusters, max_iterations=100):
current_centers = np.random.permutation(data)[:num_clusters]

for iteration in range(max_iterations):
data_with_distances = calculate_distances(data, current_centers)
clusters = get_clusters(data_with_distances)
current_centers = calculate_centers(clusters)

plot_clusters(clusters, current_centers)

def main(file_path):
data = load_data(file_path)
for num_clusters in range(2, 11):
run(data, num_clusters)

file_path = 'assessment2dmv.csv'
num_clusters = 3
main(file_path)


Подробнее здесь: https://stackoverflow.com/questions/787 ... -algorithm

Вернуться в «Python»