Menu
CoddyTech
flag Ar iconالعربيةdown icon

الدالة predict

الدرس 11 من 19 في دورة مقدمة في تعلم الآلة على Coddy.

challenge icon

التحدي

متوسط

تقوم الطريقة predict بحساب المسافة لكل نقطة جديدة مفردة إلى جميع المراكز الأخرى. يتم تعيين النقطة إلى العنقود الخاص بأقرب مركز. 

لكل نقطة جديدة، قم بتعيين فهرس أقرب مركز. أرجع قائمة العناقيد المعينة المتوقعة.

جرّب بنفسك

def euclidian_distance(point_a, point_b):
    return (sum([(point_a[i] - point_b[i])**2 for i in range(len(point_a))]))**0.5

class KMeans:
    def __init__(self, k):
        self.k = k

    def find_cluster_centroid(self, cluster_points):
    # Write your code here
        centroid = []
        for point in cluster_points:
            for dim, value in enumerate(point):
                if len(centroid) - 1 < dim:
                    centroid.append(0)
                centroid[dim] += value
        for i in range(len(centroid)):
            centroid[i] /= len(cluster_points)
        return centroid

    def fit(self, X_train):
        # Write you code here
        self.centroids = [X_train[i] for i in range(2, self.k*2 + 1, 2)]
        while True:
            # Assing each point to centroid
            points_clusters = []
            for point in X_train:
                distances = []
                for centroid in self.centroids:
                    dist_to_point = euclidian_distance(centroid, point)
                    distances.append(dist_to_point)
                closest_centroid_index = distances.index(min(distances))
                points_clusters.append((point, closest_centroid_index))

            # Update centroids
            clusters = {}
            for point, cluster in points_clusters:
                if cluster not in clusters:
                    clusters[cluster] = []
                clusters[cluster].append(point)
            new_centroids = [None]*self.k
            for cluster, points in clusters.items():
                new_centroids[cluster] = self.find_cluster_centroid(points)

            # Check if converged
            total_dist = 0
            for i in range(len(new_centroids)):
                total_dist += euclidian_distance(new_centroids[i], self.centroids[i])
            if total_dist < 0.01:
                break
            self.centroids = new_centroids


    def predict(self, X_test):
        pass

جميع دروس مقدمة في تعلم الآلة

تدرّب بنفسك: مترجم Python عبر الإنترنت