Уведомления

Группа в Telegram: @pythonsu

#1 Май 7, 2020 13:20:21

therborg
Зарегистрирован: 2020-05-07
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите сделать лабу по кластеризации

Помогите сделать лабу по кластеризации .В файле 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()

Офлайн

#2 Май 7, 2020 14:04:56

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

помогите сделать лабу по кластеризации

Охренеть!
Ну я могу еще как-то понять, когда начинают ныть, ну типа я учусь на гинеколога, а меня бедненького заставляют питон учить, памагитяяяяя.
Но это уж как-то за гранью.
Пшел вон.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version