Находим необычные цифры
Часть раздела Обучение без учителя путешествия по Machine Learning на Coddy. Урок 47 из 51.
И последний вопрос: какие сканы необычные? Лес изоляции присваивает оценку каждому скану: чем ниже оценка, тем он страннее. Сначала — сканы с самыми высокими оценками, самые обычные:
iso = IsolationForest(contamination=0.02, random_state=0)
flags = iso.fit_predict(X_small)
scores = iso.score_samples(X_small)
typical = np.argsort(scores)[::-1][:10]np.argsort перечисляет номера строк от наименьшей оценки к наибольшей, поэтому в обратном порядке первыми идут самые обычные. Покажите их из X: все 64 пикселя.
Задание
СреднеФинал. В стартовом коде уже есть всё, что мы использовали до сих пор, а также guess — название кластера для каждого изображения.
- Обучи лес изоляции на
X_small(contamination=0.02,random_state=0). Выведи, сколько изображений он помечает, какая цифра помечается чаще всего и для скольких из них название кластера указано верно. - Нарисуй 10 самых необычных изображений, начиная с самого необычного: галерею 2 на 5 в
gray_r, с цифрами в заголовках.
При contamination=0.01:
Flagged as odd: 18 of 1797 scans
Most often odd: 7 (10 scans)
Named right by their cluster: 11 of 18 odd scansГалерея самых обычных семёрок выглядит так:
У тебя будут показаны самые необычные изображения. Названия кластеров верны для 79.2% всех изображений: как обстоят дела с необычными? Ты исследовал 1,797 изображений, не обучаясь на метках.
Попробуйте сами
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
from sklearn.ensemble import IsolationForest
# Из раздела «Рассмотрите цифры»: 1,797 изображений по 64 пикселя, интенсивность от 0 до 16
digits = load_digits()
X = digits.data
y = digits.target
# Из раздела «Сократите размерность с помощью PCA»: 80% дисперсии в 13 числах на изображение
pca = PCA(n_components=0.8)
X_small = pca.fit_transform(X)
# Из раздела «Сгруппируйте цифры»: 10 кластеров, найденных без меток
km = KMeans(n_clusters=10, n_init=10, random_state=0).fit(X_small)
# Из раздела «Назовите кластеры»: цифра, в честь которой назван кластер каждого изображения (79.2% совпадений с y)
names = pd.crosstab(km.labels_, y).idxmax(axis=1)
guess = names.to_numpy()[km.labels_]
# Напишите свой код ниже
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Обучение без учителя
1Поиск групп
Обучение без метокИзмерение сходстваK-Means вручнуюK-Means в scikit-learnПовторение: участники спортзала4Иерархическая кластеризация
Пошаговое объединениеАгломеративные моделиДендрограммыПовторение: породы собак7PCA на практике
64 измеренияКомпоненты как закономерностиСжимаем и восстанавливаемPCA перед обучением моделиПовторение: сканер лиц10Проект: исследуем цифры
Рассматриваем цифрыСжимаем с помощью PCAКластеризуем цифрыДаем названия кластерамНаходим необычные цифры2Выбор k
ИнерцияМетод локтяОценки силуэтаМасштабирование перед кластеризациейПовторение: зоны доставкиПотренируйтесь самостоятельно: Онлайн-компилятор Python