#Питон #Python #K-means, К-средние Нужно написать алгоритм k-means для сортировки сгенерированных данных в питоне.
Перед этим заданием нужно было просто реализовать алгоритм в питоне. 1.Нужно было сгенерировать данные с функции random
2.выбрать два центра случайным образом
3.создать два начальных класса
4.Затем найти новые центры и перераспределить точки в соответствии с ними.
(это задание уже выполнено смотри код внизу)
Теперь нужно преобразовать код так, чтобы для класса была только одна переменная-список, то же самое касается центров и расстояний. То есть вместо distance1, distance2, должна быть только одна переменная distances (и для других тоже: classes, centers). Должен получиться код, в котором мы задаем только количество классов, а не создаем для каждого класса переменную.
Как нам объясняли, должно быть что-то типа такого:
k=3
centers = [ ]
for i in range(k):
centers[i]= points [random.randint(1, len(points)]
Всю эту красоту надо вывести на экран с matplotlib
Вот такой код надо преобразовать, или написать новый:
import matplotlib.pyplot as plt
import random
def main():
min_distance = 0.01
distance_center_1 = 10
distance_center_2 = 10
points = [(random.randint(1, 10), random.randint(1, 10)) for i in range(50)] + [(random.randint(15, 25), random.randint(15, 25)) for i in range(50)]
выбрать два центра случайным образом
class_center_1 = points[random.randint(1, len(points))]
class_center_2 = points[random.randint(1, len(points))]
i=0
while (distance_center_1 > min_distance) and (distance_center_2 > min_distance):
print(i)
class_1 = []
class_2 = []
pass
for e in range(len(points)):
distance_1 = euclidian_dist(class_center_1, points)
distance_2 = euclidian_dist(class_center_2, points)
if distance_1 <= distance_2:
class_1.append(points[e])
else:
class_2.append(points[e])
new_class_center_1 = get_centroid(class_1)
new_class_center_2 = get_centroid(class_2)
#расстояние между старым и новым центрами
distance_center_1 = euclidian_dist(class_center_1, new_class_center_1)
distance_center_2 = euclidian_dist(class_center_2, new_class_center_2)
class_center_1 = new_class_center_1
class_center_2 = new_class_center_2
plt.plot([p[0] for p in class1], [p[1] for p in class1], 'ro')
plt.plot([p[0] for p in class2], [p[1] for p in class2], 'go')
plt.show()
i += 1
plt.plot([p[0] for p in class1], [p[1] for p in class1], 'ro')
plt.plot([p[0] for p in class2], [p[1] for p in class2], 'go')
plt.show()
def euclidian_dist(p1, p2):
return ((p1[0] - p2[0]) ** 2 + (p1[1] - p2[1]) ** 2) ** (1 / 2)
def get_centroid(cluster):
centroids_id = [0,0]
for e in cluster:
centroids_id[0]= centroids_id [0]+ e[0]
centroids_id[1] = centroids_id[1] + e[1]
pass
centroids_id[0] = centroids_id[0]/len(cluster)
centroids_id[1] = centroids_id[1] /len(cluster)
return centroids_id
2. Протокол передачи данных — набор определённых правил или соглашений интерфейса логического уровня, который определяет обмен данными между различными программами.
3. Web-страница - гипертекстовый документ в интернете
4. Гиперте́кст — термин, обозначающий систему из текстовых страниц, имеющих перекрёстные ссылки, составленные как по вертикали, так и по горизонтали.
5. Провайдер— организация, предоставляющая услуги доступа к сети Интернет и иные связанные с Интернетом услуги.
6. Телевизор, телевизионный приёмник — приёмник телевизионных сигналов изображения и звукового сопровождения, отображающий их на экране и с динамиков.
7. Сайт, или веб-сайт— одна или несколько логически связанных между собой веб-страниц; также место расположения контента сервера.
первое задание: 1. Необходимо следить за адресами, на которые ведут ссылки. Для того чтобы узнать адрес, на который ведет ссылка необходимо просто навести на нее курсор. Если вам предлагают перейти на сайт Х, а ссылка ведет на сайт Y то тут что-то не так. Возможно, вас пытаются обмануть.
2. Перед вводом личной информации проверяйте адресную строку браузера. Если вы там увидите что то вроде vkontokte.ru вместо привычного vkontakte.ru, то можете быть уверены, что вы находитесь на поддельном сайте и у вас пытаются украсть пароль для доступа к вашему аккаунту. После получения данных злоумышленники могут использовать аккаунт для рассылки спама и вирусов вашим друзьям.
3. Не переходите по незнакомым ссылкам, которые приходят вам на почту, в «аську», или в социальные сети. Даже если ссылка пришла от знакомого человека необходимо быть максимально внимательным. Вполне возможно аккаунт вашего знакомого уже взломан, и теперь от его имени рассылают вирусы.
4. Не скачивайте неизвестные файлы, пришедшие вам на почту или в «аську», даже если файл пришел от вашего знакомого. Перед тем как скачивать такие файлы уточните у отправителя, что это за файл.
5. Современные поисковые системы и браузеры умеют предупреждать пользователя, когда он пытается зайти на сайт распространяющий вирусы. Необходимо внимательно относиться к таким предупреждениям, скорее всего сайт, который вы пытаетесь посетить, заражен.
2 задание 1 Длина пароля. Пароль должен содержать не менее 8 символов, а лучше – 10 и более.
2 Наличие цифр и букв верхнего и нижнего регистров, идущих не подряд – .
3 Наличие специальных знаков – «@», «$», «&» и т.д. (если допустимо их присутствие).
пример [email protected]
Объяснение: