PCA перед обучением модели
Часть раздела Обучение без учителя путешествия по Machine Learning на Coddy. Урок 32 из 51.
Меньшее количество признаков ускоряет модель и уменьшает шум, за которым она гоняется. PCA можно поместить в конвейер непосредственно перед моделью:
for n in [2, 5, 10, 20, 40, 64]:
model = make_pipeline(PCA(n_components=n), KNeighborsClassifier())
print(n, f"{cross_val_score(model, X, y, cv=5).mean():.3f}")На наборе цифр:
Точность перестаёт расти примерно на 20: остальные 44 направления почти ничего не добавляют. На каждом фолде PCA обучается на собственных обучающих строках, поэтому утечки данных не происходит.
Смешанные единицы измерения? Сначала поставь StandardScaler(), как всегда.
Задание
СреднеЛаборатория оливкового масла оценивает масла по тому, сколько света они поглощают на 36 длинах волн, а также по результатам 4 лабораторных тестов. Какого минимального количества признаков будет достаточно? Программа считывает допустимое отклонение.
- Для каждого
nвsizesпроведи кросс-валидацию (5 блоков) конвейера: масштабирование, PCA сnкомпонентами,LogisticRegression(max_iter=1000). Выведи оценку для каждого. - Выведи наименьшее количество компонент, результат для которого находится в пределах допустимого отклонения от лучшего результата.
Для другой лаборатории и 0.05:
2 components: 0.817
3 components: 0.833
4 components: 0.889
5 components: 0.928
10 components: 0.928
20 components: 0.917
40 components: 0.922
Fewest within 0.05 of the best: 4 componentsПопробуйте сами
import pandas as pd
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score
# 180 образцов оливкового масла: поглощение света на 36 длинах волн, результаты 4 лабораторных тестов и категория качества
oils = pd.read_csv("oils.csv")
X = oils.drop(columns=["oil", "grade"])
y = oils["grade"]
sizes = [2, 3, 4, 5, 10, 20, 40]
slack = float(input())
# Напишите свой код ниже
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Обучение без учителя
1Поиск групп
Обучение без метокИзмерение сходстваK-Means вручнуюK-Means в scikit-learnПовторение: участники спортзала4Иерархическая кластеризация
Пошаговое объединениеАгломеративные моделиДендрограммыПовторение: породы собак7PCA на практике
64 измеренияКомпоненты как закономерностиСжимаем и восстанавливаемPCA перед обучением моделиПовторение: сканер лиц2Выбор k
ИнерцияМетод локтяОценки силуэтаМасштабирование перед кластеризациейПовторение: зоны доставкиПотренируйтесь самостоятельно: Онлайн-компилятор Python