Menu
CoddyTech

Поиск необычных объектов

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

В этой главе мы ищем необычные строки. К её завершению вы отметите необычные минуты работы сервера:

Ночь работы веб-сервера: число запросов в секунду растёт, как и задержка; плотное восходящее облако и четыре одинокие минуты, обведённые красным, в которых согласны два детектора

Аномалия — это редкая строка, не похожая на остальные: неисправность, мошенничество, опечатка. Каждая новая аномалия отличается, поэтому никто не может заранее присвоить им метки.

Начни с z-оценок. StandardScaler преобразует каждый столбец в z-оценки, поэтому одной строкой можно отметить строки, в которых любое значение превышает 3:

z = StandardScaler().fit_transform(X)
odd = (np.abs(z) > 3).sum(axis=1) > 0

Деформация, измеренная датчиком моста, растёт с температурой. Одно значение намного выше остальных обведено красным — отмечено, потому что z-оценка деформации превышает 3. Значение ниже тренда при 27 градусах обведено оранжевым: пропущенное

Но строка может быть обычной в каждом столбце и необычной только в их сочетании. Z-оценки столбцов этого не замечают.

challenge icon

Задание

Средне

Супермаркет записал средние значения за день для 80 морозильных камер. Каким из них нужен техник? Программа считывает порог.

  1. Преобразуй каждый столбец X в z-оценки.
  2. Для каждого столбца выведи, сколько морозильных камер он отмечает: z-оценка больше порога относительно 0.
  3. Выведи каждую морозильную камеру, отмеченную хотя бы одним столбцом, в порядке строк таблицы.

Для другого магазина и 3:

temp_c: 1 flagged
power_kw: 2 flagged
door_openings: 0 flagged
defrost_min: 0 flagged
Freezers to check:
  F05
  F13
  F51

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

import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler

# Одна строка на каждую морозильную камеру: средние показатели за день
freezers = pd.read_csv("freezers.csv")
columns = ["temp_c", "power_kw", "door_openings", "defrost_min"]
X = freezers[columns]
cutoff = float(input())

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

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

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

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