Проблема кластеризации K-Means относительно центроидов - PullRequest
0 голосов
/ 12 сентября 2018

Итак, у меня возникли проблемы с моим скриптом ниже, код запускается и компилируется, но есть некоторые проблемы.Я не уверен, является ли моя проблема проблемой расчета или проблемой ее форматирования.Я даже не уверен, нахожусь ли я на правильном пути, я чувствую, что я есть, но я новичок в Python, я все уши к любому совету или вкладу было бы здорово!Застрял на следующем:

1) Класс K_means вообще не назначает центроиды кластерам

2) Класс K_means не выполняет никаких пересчетов для повторного центрирования центроидов

Ниже приведен мой код, я просто вставил свои функции, поскольку думаю, что именно в этом проблема:

class K_means():
    def __init__(self,k, lines, **kwargs):
        self.k = k
        self.lines = lines 
        self.index = []
        self.distance = []
        self.elements = []
        self.points = []
        for keys, values in kwargs.items():
            setattr(self, keys, values)

    def determineDistance(self, centroids, new_dict):

        for keys, points in new_dict.items():
            self.points.append(points)
            for elements in range(len(centroids)):
                self.elements.append(elements)
                distance = abs(points - centroids[elements])
                self.distance.append(distance)


    def assign_to_clusters(self, lines, clusters, centroids, 
        point_assignments, distance, new_dict):

        for index, points in new_dict.items():
            closest_index = (self.k + 1)
            for elements in range(len(centroids)):
                distance = self.determineDistance(centroids, new_dict)
                if distance < closest_index:
                    closest_index = distance
                    index = elements
            clusters[index].append(points)
            point_assignments[index] = closest_index
        return point_assignments

    def update_location(self, clusters, centroids):
        for keys, values in clusters.items():
            new_centroids ={keys:sum(values)/float(len(values))} 
            centroids.update(new_centroids)
        return centroids 
...