Найти - Пользователи
Полная версия: помогите сделать лабу по кластеризации
Начало » Python для новичков » помогите сделать лабу по кластеризации
1
therborg
Помогите сделать лабу по кластеризации .В файле k_means.py необходимо найти все комментарии, начинающиеся с TODO, и дополнить код так, как описано в комментарии.

ФАЙЛ k_means.py

import numpy as np

# евклидово расстояние между двумя точками
def dist(A, B):
# TODO: реализуйте вычисление евклидова расстояния для двух точек A и B в N-мерном пространстве
# Помните, что размерность пространства может быть произвольной (не только 2D).
# Для взятия разностей по каждому измерерию можно использовать код: A - B
# Для возведения в квадрат можете использовать оператор ** (например, 3**2 == 9) или функцию np.power
# Для вычисления суммы используйте функцию sum или np.sum
# Для вычисления квадратного корня используйте функцию np.sqrt
# r = …

return r


# возвращает список индексов ближайших центров по каждой точке
def class_of_each_point(X, centers):
m = len(X)
k = len(centers)

# матрица расстояний от каждой точки до каждого центра
distances = np.zeros((m, k))
for i in range(m):
for j in range(k):
distances = dist(centers, X)

# поиск ближайшего центра для каждой точки
return np.argmin(distances, axis=1)


def kmeans(k, X):

# TODO: инициализировать переменные m и n
# m - количество строк в матрице X
# n - количество столбцов в матрице X
# Используйте свойство shape матрицы X для решения этой задачи
# Чтобы понять, что хранится в свойстве shape, попробуйте в консоли Python следующий код:
# >>> ones = np.ones((3, 2))
# >>> ones
# >>> ones.shape
# m = … # количество строк в матрице X
# n = … # количество столбцов в матрице X



curr_iteration = prev_iteration = np.zeros(m)

# TODO: сгенерировать k кластерных центров со случайными координатами.
# Должна получиться матрица случайных чисел размера k*n (k строк, n столбцов).
# Для генерации матрицы случайных чисел используйте код:
# centers = np.random.random((k, n))
# Функция random генерирует случайные числа в диапазоне от 0 до 1, поэтому
# не забывайте, что координаты центров не должны выходить
# за границы минимальных и максимальных значений столбцов (признаков) матрицы X.
# Для вычисления минимальных и максимальных значений по столбцам (признакам)
# матрицы X используйте функции min(X, axis=0) и max(X, axis=0) библиотеки NumPy соответственно.
# centers = …

# приписываем каждую точку к заданному классу
curr_iteration = class_of_each_point(X, centers)

# цикл до тех пор, пока центры не стабилизируются
# TODO: условие выхода из цикла - векторы curr_iteration и prev_iteration стали равны
# Для сравнения двух массивов NumPy можете использовать один из вариантов:
# np.all(a1 == a2), где a1 и a2 массивы NumPy.
# или
# np.any(a1 != a2)
# Для реализации логического отрицания в Python используйте not
# Поэкспериментируйте в консоли Python с функциями all и any, чтобы понять, как они работают.
while True:

prev_iteration = curr_iteration

# вычисляем новые центры масс
for i in range(k):
sub_X = X
if len(sub_X) > 0:
centers = np.mean(sub_X, axis=0)

# приписываем каждую точку к заданному классу
curr_iteration = class_of_each_point(X, centers)

return centers



ФАЙЛ run.py
import numpy as np
import matplotlib.pyplot as plt
from k_means import kmeans

# исходные данные
X = np.array([
,
,
,
,
,
,
,
,
,
])

# запуск кластеризации
ans = kmeans(2, X)

# отображение результатов
print(ans)
plt.plot(X, X, ‘bx’, ans, ans, ‘r*’, markersize=20)
plt.grid()
plt.show()
FishHook
Охренеть!
Ну я могу еще как-то понять, когда начинают ныть, ну типа я учусь на гинеколога, а меня бедненького заставляют питон учить, памагитяяяяя.
Но это уж как-то за гранью.
Пшел вон.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB