Menu
CoddyTech

Проекции

Часть раздела Обучение без учителя путешествия по Machine Learning на Coddy. Урок 25 из 51.

Проекция опускает каждую точку прямо на линию, словно тень. Вот двойники вин из урока «Слишком много признаков», расположенные вокруг своего среднего значения, на двух линиях:

Два графика одних и тех же вин в виде синих точек вокруг центра. Слева линия проходит вдоль облака точек: оранжевые тени широко распределены вдоль неё, разброс 1.14. Справа линия проходит поперёк облака точек: тени сгруппированы вместе, разброс 0.30

Вдоль облака тени сохраняют большую часть разброса, поэтому одного числа для каждого вина почти достаточно, как и двух.

Направление — это два числа, квадраты которых в сумме дают 1, например (0.6, 0.8). Тень — это взвешенная сумма:

centered = X - X.mean(axis=0)
shadow = centered[:, 0] * 0.6 + centered[:, 1] * 0.8
print(round(shadow.std(), 3))

Это выводит 1.136. Лучшее направление сохраняет наибольший разброс.

challenge icon

Задание

Средне

Леснику нужно одно число для каждой сосновой шишки вместо длины и ширины. Какое из двух направлений сохраняет больший разброс шишек? Программа считывает два направления, по два числа в каждом.

  1. Напиши spread_along(direction): стандартное отклонение теней шишек в этом направлении.
  2. Выведи оба значения разброса с точностью до 3 знаков после запятой.
  3. Выведи направление, которое нужно оставить.

Для других шишек:

Along [0.6, 0.8]: spread 2.104
Along [0.8, -0.6]: spread 0.412
Keep [0.6, 0.8]

Попробуйте сами

import numpy as np
import pandas as pd

# Лесничий измерил 70 сосновых шишек: их длину и ширину в см
cones = pd.read_csv("cones.csv")
X = np.column_stack([cones["length_cm"], cones["width_cm"]])
first = [float(input()), float(input())]
second = [float(input()), float(input())]

# Напишите свой код ниже
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Обучение без учителя

Потренируйтесь самостоятельно: Онлайн-компилятор Python