다중 작업 Lasso 를 이용한 공동 특징 선택

Beginner

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

소개

이 실습에서는 다중 작업 Lasso 알고리즘을 사용하여 공동 특징 선택을 수행하는 방법을 살펴봅니다. 파이썬 머신러닝 라이브러리인 scikit-learn 을 사용하여 샘플 데이터를 생성하고 모델을 맞출 것입니다. 그런 다음 모델 결과를 플롯하여 비교해 보겠습니다.

VM 팁

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

때때로 Jupyter Notebook 이 완전히 로드되기까지 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업 검증은 자동화될 수 없습니다.

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

데이터 생성

먼저, 모델에 적합시킬 수 있는 샘플 데이터를 생성해야 합니다. NumPy 를 사용하여 100 개의 샘플을 생성하며, 각 샘플은 30 개의 특징과 40 개의 작업을 가집니다. 또한 5 개의 관련 특징을 무작위로 선택하고, 랜덤한 주파수와 위상을 가진 사인파를 사용하여 이들에 대한 계수를 생성합니다. 마지막으로 데이터에 랜덤 노이즈를 추가합니다.

import numpy as np

rng = np.random.RandomState(42)

## 랜덤 주파수와 위상을 가진 사인파를 사용하여 2 차원 계수를 생성
n_samples, n_features, n_tasks = 100, 30, 40
n_relevant_features = 5
coef = np.zeros((n_tasks, n_features))
times = np.linspace(0, 2 * np.pi, n_tasks)
for k in range(n_relevant_features):
    coef[:, k] = np.sin((1.0 + rng.randn(1)) * times + 3 * rng.randn(1))

X = rng.randn(n_samples, n_features)
Y = np.dot(X, coef.T) + rng.randn(n_samples, n_tasks)

모델 적합

이제 데이터가 준비되었으므로 Lasso 및 다중 작업 Lasso 알고리즘을 사용하여 모델을 적합시킬 수 있습니다. 각 작업에 대해 Lasso 모델을 적합시킨 다음 모든 작업에 대해 한 번에 다중 작업 Lasso 모델을 적합시킬 것입니다.

from sklearn.linear_model import MultiTaskLasso, Lasso

coef_lasso_ = np.array([Lasso(alpha=0.5).fit(X, y).coef_ for y in Y.T])
coef_multi_task_lasso_ = MultiTaskLasso(alpha=1.0).fit(X, Y).coef_

결과 플롯

마지막으로, 모델의 결과를 플롯하여 서로 어떻게 비교되는지 확인할 수 있습니다. 각 모델의 지원 (즉, 0 이 아닌 계수의 위치) 과 특징 중 하나의 시계열을 플롯할 것입니다.

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(8, 5))
plt.subplot(1, 2, 1)
plt.spy(coef_lasso_)
plt.xlabel("특징")
plt.ylabel("시간 (또는 작업)")
plt.text(10, 5, "Lasso")
plt.subplot(1, 2, 2)
plt.spy(coef_multi_task_lasso_)
plt.xlabel("특징")
plt.ylabel("시간 (또는 작업)")
plt.text(10, 5, "MultiTaskLasso")
fig.suptitle("계수의 0 이 아닌 위치")

feature_to_plot = 0
plt.figure()
lw = 2
plt.plot(coef[:, feature_to_plot], color="seagreen", linewidth=lw, label="Ground truth")
plt.plot(
    coef_lasso_[:, feature_to_plot], color="cornflowerblue", linewidth=lw, label="Lasso"
)
plt.plot(
    coef_multi_task_lasso_[:, feature_to_plot],
    color="gold",
    linewidth=lw,
    label="MultiTaskLasso",
)
plt.legend(loc="upper center")
plt.axis("tight")
plt.ylim([-1.1, 1.1])
plt.show()

요약

이 실험에서 다중 작업 Lasso 알고리즘을 사용하여 공동 특징 선택을 수행하는 방법을 배웠습니다. 샘플 데이터를 생성하고 Lasso 및 다중 작업 Lasso 를 사용하여 모델을 적합시키고 결과를 플롯했습니다. 다중 작업 Lasso 알고리즘이 Lasso 알고리즘에 비해 모든 작업에서 관련 특징을 더 잘 선택할 수 있음을 알 수 있습니다.