Menu
CoddyTech

PCA Sebelum Model

Termasuk bagian Pembelajaran Tanpa Pengawasan dalam perjalanan Machine Learning di Coddy. Pelajaran 32 dari 51.

Fitur yang lebih sedikit membuat model lebih cepat dan mengurangi noise yang perlu ditangani. PCA dapat ditempatkan dalam pipeline, tepat sebelum model:

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}")

Pada dataset digits:

Garis akurasi k-NN pada dataset digits berdasarkan jumlah komponen yang dipertahankan: 0.595 dengan 2, 0.884 dengan 5, 0.940 dengan 10, lalu hampir datar, 0.958 dengan 20 hingga 0.963 dengan semua 64

Akurasi mulai stabil di sekitar 20: 44 arah lainnya hampir tidak menambah apa pun. Setiap lipatan menyesuaikan PCA dengan baris latihannya sendiri, jadi tidak ada data yang bocor.

Satuannya berbeda? Letakkan StandardScaler() di awal, seperti biasa.

challenge icon

Tantangan

Sedang

Sebuah laboratorium minyak zaitun menilai minyak berdasarkan cahaya yang diserapnya pada 36 panjang gelombang, ditambah 4 uji laboratorium. Berapa sedikit fitur yang diperlukan? Program membaca nilai toleransi.

  1. Untuk setiap n dalam sizes, lakukan validasi silang (5 lipatan) pada pipeline: scaler, PCA dengan n komponen, LogisticRegression(max_iter=1000). Cetak setiap skor.
  2. Cetak jumlah komponen paling sedikit yang skornya berada dalam batas toleransi dari skor terbaik.

Untuk laboratorium lain dan 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

Coba sendiri

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 sampel minyak zaitun: cahaya yang diserap pada 36 panjang gelombang, 4 uji laboratorium, dan tingkat mutunya
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())

# Tulis kodemu di bawah ini
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pembelajaran Tanpa Pengawasan

Latihan sendiri: Compiler Python online