모델 적용 전 PCA
Coddy Machine Learning 여정의 비지도 학습 섹션에 포함된 레슨. 51개 중 32번째.
특징이 적으면 모델이 더 빨라지고 쫓아다닐 잡음도 줄어듭니다. 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가지 실험실 검사 결과를 바탕으로 오일의 등급을 매깁니다. 특성은 최소 몇 개면 충분할까요? 프로그램은 허용 오차를 입력받습니다.
sizes의 각n에 대해 스케일러,n개 성분을 사용하는 PCA,LogisticRegression(max_iter=1000)으로 구성된 파이프라인을 교차 검증(5개 폴드)합니다. 각 점수를 출력합니다.- 최고 점수에서 허용 오차 이내인 성분 수 중 가장 적은 값을 출력합니다.
다른 실험실에서 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())
# 아래에 코드를 작성하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
비지도 학습의 모든 레슨
직접 연습해 보세요: 온라인 Python 컴파일러