이상한 숫자 찾기
Coddy Machine Learning 여정의 비지도 학습 섹션에 포함된 레슨. 51개 중 47번째.
마지막 질문 하나: 어떤 스캔이 특이할까요? 고립 포리스트는 각 스캔에 점수를 매기며, 점수가 낮을수록 더 특이합니다. 먼저 점수가 가장 높은, 가장 평범한 스캔입니다:
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개를 그리세요.
gray_r를 사용해 2×5 갤러리로 배치하고, 각 스캔의 숫자를 제목으로 표시하세요.
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가장 평범한 7을 모은 갤러리는 다음과 같습니다.
여러분의 갤러리에는 가장 이상한 스캔이 표시됩니다. 클러스터는 전체 스캔의 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
# 숫자 살펴보기에서: 64픽셀로 된 스캔 1,797개, 잉크 값은 0에서 16까지
digits = load_digits()
X = digits.data
y = digits.target
# PCA로 축소하기에서: 스캔당 13개의 숫자로 분산의 80%를 표현
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_]
# 아래에 코드를 작성하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
비지도 학습의 모든 레슨
직접 연습해 보세요: 온라인 Python 컴파일러