해싱 특징 변환

Beginner

This tutorial is from open-source community. Access the source code

소개

이 실험실에서는 완전히 랜덤한 트리를 사용하여 해싱 기능 변환을 보여줍니다. 이는 데이터를 고차원의 희소 표현으로 매핑하여 분류에 유용할 수 있습니다. 이 매핑은 완전히 비지도 학습이며 매우 효율적입니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 연습을 위한 Jupyter Notebook에 접근할 수 있습니다.

때때로 Jupyter Notebook 이 로드되는 데 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사는 자동화될 수 없습니다.

학습 중 문제가 발생하면 Labby 에 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.

라이브러리 가져오기

이 단계에서는 이 실험실에서 필요한 라이브러리를 가져옵니다.

import numpy as np
import matplotlib.pyplot as plt

from sklearn.datasets import make_circles
from sklearn.ensemble import RandomTreesEmbedding, ExtraTreesClassifier
from sklearn.decomposition import TruncatedSVD
from sklearn.naive_bayes import BernoulliNB

합성 데이터셋 생성

이 단계에서는 합성 데이터셋을 생성합니다.

X, y = make_circles(factor=0.5, random_state=0, noise=0.05)

RandomTreesEmbedding 을 이용한 데이터 변환

이 단계에서는 RandomTreesEmbedding을 사용하여 데이터를 변환합니다.

hasher = RandomTreesEmbedding(n_estimators=10, random_state=0, max_depth=3)
X_transformed = hasher.fit_transform(X)

Truncated SVD 를 이용한 차원 축소 결과 시각화

이 단계에서는 Truncated SVD 를 사용하여 차원을 축소한 결과를 시각화합니다.

svd = TruncatedSVD(n_components=2)
X_reduced = svd.fit_transform(X_transformed)

변환된 데이터로 나이브 베이즈 분류기를 학습합니다.

이 단계에서는 변환된 데이터로 나이브 베이즈 분류기를 학습합니다.

nb = BernoulliNB()
nb.fit(X_transformed, y)

비교를 위한 ExtraTreesClassifier 학습

이 단계에서는 비교를 위해 ExtraTreesClassifier 를 학습합니다.

trees = ExtraTreesClassifier(max_depth=3, n_estimators=10, random_state=0)
trees.fit(X, y)

원본 데이터와 축소된 데이터의 산점도

이 단계에서는 원본 데이터와 축소된 데이터의 산점도를 생성합니다.

fig = plt.figure(figsize=(9, 8))

ax = plt.subplot(221)
ax.scatter(X[:, 0], X[:, 1], c=y, s=50, edgecolor="k")
ax.set_title("원본 데이터 (2 차원)")
ax.set_xticks(())
ax.set_yticks(())

ax = plt.subplot(222)
ax.scatter(X_reduced[:, 0], X_reduced[:, 1], c=y, s=50, edgecolor="k")
ax.set_title(
    "변환된 데이터의 축소된 SVD (2 차원) (%dd)" % X_transformed.shape[1]
)
ax.set_xticks(())
ax.set_yticks(())

원본 공간에서의 결정 경계 시각화

이 단계에서는 원본 공간에서의 결정 경계를 시각화합니다.

h = 0.01
x_min, x_max = X[:, 0].min() - 0.5, X[:, 0].max() + 0.5
y_min, y_max = X[:, 1].min() - 0.5, X[:, 1].max() + 0.5
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))

## RandomTreesEmbedding 을 사용하여 그리드 변환
transformed_grid = hasher.transform(np.c_[xx.ravel(), yy.ravel()])
y_grid_pred = nb.predict_proba(transformed_grid)[:, 1]

ax = plt.subplot(223)
ax.set_title("변환된 데이터에 대한 나이브 베이즈")
ax.pcolormesh(xx, yy, y_grid_pred.reshape(xx.shape))
ax.scatter(X[:, 0], X[:, 1], c=y, s=50, edgecolor="k")
ax.set_ylim(-1.4, 1.4)
ax.set_xlim(-1.4, 1.4)
ax.set_xticks(())
ax.set_yticks(())

## ExtraTreesClassifier 를 사용하여 그리드 변환
y_grid_pred = trees.predict_proba(np.c_[xx.ravel(), yy.ravel()])[:, 1]

ax = plt.subplot(224)
ax.set_title("ExtraTrees 예측")
ax.pcolormesh(xx, yy, y_grid_pred.reshape(xx.shape))
ax.scatter(X[:, 0], X[:, 1], c=y, s=50, edgecolor="k")
ax.set_ylim(-1.4, 1.4)
ax.set_xlim(-1.4, 1.4)
ax.set_xticks(())
ax.set_yticks(())

요약

이 실험에서는 완전히 랜덤한 트리를 사용하여 해싱 특징 변환을 활용하여 데이터를 고차원의 희소 표현으로 매핑하는 방법을 배웠습니다. 이는 분류에 유용할 수 있습니다. 또한 여러 트리에 의해 주어진 분할을 시각화하고 변환이 비선형 차원 축소 또는 비선형 분류에 어떻게 사용될 수 있는지 배웠습니다. 그런 다음 변환된 데이터에 나이브 베이즈를 사용하는 방법을 보여주고 원본 데이터에 학습된 ExtraTreesClassifier 와 비교했습니다.