소개
이 실습에서는 scikit-learn 의 선형 모델을 탐색합니다. 선형 모델은 회귀 및 분류 작업에 사용되는 방법 집합입니다. 이 모델들은 목표 변수가 특징의 선형 결합이라고 가정합니다. 이러한 모델은 단순성과 해석 가능성으로 인해 머신 러닝에서 널리 사용됩니다.
다음 주제를 다룰 것입니다:
- 최소 제곱법
- 릿지 회귀
- 라쏘
- 로지스틱 회귀
- 확률적 경사 하강법
- 퍼셉트론
머신 러닝에 대한 사전 경험이 없으시면 지도 학습: 회귀를 참고하세요.
VM 팁
VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 연습을 위한 Jupyter Notebook에 접근합니다.
때때로 Jupyter Notebook 이 완전히 로드되기까지 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사를 자동화할 수 없습니다.
학습 중 문제가 발생하면 Labby 에게 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.
최소 제곱법
머신 러닝에 대한 사전 경험이 없으시면 지도 학습: 회귀를 참고하세요.
최소 제곱법 (OLS) 은 관측된 목표값과 예측된 목표값 간의 제곱 차이 합을 최소화하는 선형 회귀 방법입니다. 수학적으로 다음과 같은 형태의 문제를 해결합니다: $$\min_{w} || X w - y||_2^2$$
선형 회귀 모델을 OLS 를 사용하여 적합해 보겠습니다.
from sklearn import linear_model
reg = linear_model.LinearRegression()
X = [[0, 0], [1, 1], [2, 2]]
y = [0, 1, 2]
reg.fit(X, y)
print(reg.coef_)
- scikit-learn 에서
linear_model모듈을 가져옵니다. LinearRegression의 인스턴스를 생성합니다.fit메서드를 사용하여 모델을 학습 데이터에 적합시킵니다.- 선형 모델의 계수를 출력합니다.
릿지 회귀
릿지 회귀는 일반 최소 제곱법 목적 함수에 페널티 항을 추가하는 선형 회귀 방법입니다. 이 페널티 항은 계수를 0 으로 수축하여 과적합을 줄이는 데 도움이 됩니다. 모델의 복잡도는 정규화 매개변수로 제어할 수 있습니다.
릿지 회귀 모델을 적합해 보겠습니다.
reg = linear_model.Ridge(alpha=0.5)
reg.fit([[0, 0], [0, 0], [1, 1]], [0, 0.1, 1])
print(reg.coef_)
- 정규화 매개변수
alpha를 0.5 로 설정한Ridge의 인스턴스를 생성합니다. fit메서드를 사용하여 모델을 학습 데이터에 적합시킵니다.- 릿지 회귀 모델의 계수를 출력합니다.
Lasso
Lasso 는 일반 최소 제곱법 목적 함수에 페널티 항을 추가하는 선형 회귀 방법입니다. 페널티 항은 일부 계수를 정확히 0 으로 설정하는 효과가 있어 특징 선택을 수행합니다. Lasso 는 희소 모델 추정에 사용될 수 있습니다.
Lasso 모델을 적합해 보겠습니다.
reg = linear_model.Lasso(alpha=0.1)
reg.fit([[0, 0], [1, 1]], [0, 1])
print(reg.coef_)
- 정규화 매개변수
alpha를 0.1 로 설정한Lasso의 인스턴스를 생성합니다. fit메서드를 사용하여 모델을 학습 데이터에 적합시킵니다.- Lasso 모델의 계수를 출력합니다.
로지스틱 회귀
로지스틱 회귀는 로지스틱 함수를 사용하여 가능한 결과의 확률을 추정하는 분류 방법입니다. 이는 일반적으로 이진 분류 작업에 사용됩니다. 로지스틱 회귀는 다중 클래스 분류 문제를 처리하도록 확장될 수도 있습니다.
로지스틱 회귀 모델을 적합해 보겠습니다.
clf = linear_model.LogisticRegression(random_state=0).fit(X, y)
print(clf.coef_)
random_state매개변수를 0 으로 설정한LogisticRegression의 인스턴스를 생성합니다.fit메서드를 사용하여 모델을 학습 데이터에 적합시킵니다.- 로지스틱 회귀 모델의 계수를 출력합니다.
확률적 경사 하강법 (SGD)
확률적 경사 하강법 (SGD) 은 선형 모델을 학습시키는 간단하지만 효율적인 방법입니다. 특히 샘플과 특징의 수가 매우 많을 때 유용합니다. SGD 는 각 반복에서 학습 데이터의 작은 부분집합을 사용하여 모델 매개변수를 업데이트합니다. 이는 온라인 학습 및 외부 메모리 학습에 적합합니다.
SGD 를 사용하여 로지스틱 회귀 모델을 적합해 보겠습니다.
clf = linear_model.SGDClassifier(loss="log_loss", max_iter=1000)
clf.fit(X, y)
print(clf.coef_)
- 로지스틱 회귀를 수행하기 위해
loss매개변수를 "log_loss"로 설정한SGDClassifier의 인스턴스를 생성합니다. fit메서드를 사용하여 모델을 학습 데이터에 적합시킵니다.- SGD 를 사용하여 얻은 로지스틱 회귀 모델의 계수를 출력합니다.
퍼셉트론
퍼셉트론은 대규모 학습에 적합한 단순한 선형 분류 알고리즘입니다. 오류에 대해서만 모델을 업데이트하므로, 허용 손실 (hinge loss) 을 사용한 확률적 경사 하강법 (SGD) 보다 학습 속도가 더 빠릅니다. 결과 모델 또한 더 희소합니다.
퍼셉트론 모델을 적합해 보겠습니다.
clf = linear_model.Perceptron(alpha=0.1)
clf.fit(X, y)
print(clf.coef_)
- 정규화 매개변수
alpha를 0.1 로 설정한Perceptron의 인스턴스를 생성합니다. fit메서드를 사용하여 모델을 학습 데이터에 적합시킵니다.- 퍼셉트론 모델의 계수를 출력합니다.
요약
이 실험에서 scikit-learn 의 선형 모델을 탐색했습니다. 일반 최소 제곱, 릿지 회귀, 라쏘, 로지스틱 회귀, 확률적 경사 하강법, 퍼셉트론에 대해 배웠습니다. 이러한 모델은 회귀 및 분류 작업 모두에 사용될 수 있습니다. 또한 온라인 학습 및 특징 선택과 같은 다양한 알고리즘과 기법을 사용하여 이러한 모델을 어떻게 적합시키는지 살펴보았습니다.