Day37 - 머신러닝(8). 22.10.19.수

류소리·2022년 10월 18일
0

머신러닝

목록 보기
8/14

회귀(Regression) 소개 p308

회귀는 여러 개의 독립변수와 한 개의 종속변수 간의 상관관계를 모델링하는 기법을 통칭한다.

이라는 선형 회귀식을 예로 들면 Y는 종속변수, X는 독립변수를 의미하고, W는 이 독립변수의 값에 영향을 미치는 회귀 계수(Regression coefficients)이다.
머신러닝 관점에서 보면 독립변수는 feature에 해당되며 종속변수는 label 값에 해당된다.
머신러닝 회귀 예측의 핵심은 주어진 feature와 label 데이터를 기반으로 학습하여 최적의 회귀 계수를 찾아내는 것이다.

회귀에서 가장 중요한 것은 회귀 계수이다.
회귀 계수가 선형일 때와 비선형일 때에 따라 선형 회귀와 비선형 회귀로 구분된다.
그리고 독립 변수가 한 개인지, 여러 개인 지에 따라 단일 회귀, 다중 회귀로 나뉜다.
지도 학습의 두 유형인 분류와 회귀의 가장 큰 차이는 예측값이 분류는 카테고리와 같은 이상형 클래스 값이고, 회귀는 연속형 숫자 값이 라는 것이다.

유형

  • 독립변수 개수
    • 단일: 독립변수가 1개인 경우
    • 다중: 독립변수가 여러 개인 경우
  • 회귀 계수의 결합
    • 선형
    • 비선형

분류, 회귀

  • 분류: 결과값이 Category (Ex. 0, 1)
  • 회귀: 결과값이 Continuous

여러 회귀 중 선형 회귀가 가장 많이 사용되며, 선형 회귀는 실제 값과 예측 값의 차이를 최소화하는 직선형 회귀선을 최적화하는 방식이다.
선형 회귀 모델은 규제(Regularization) 방법에 따라 유형이 나뉠 수 있으며, 여기서 규제는 일반적인 선형 회귀의 과적합 문제를 해결하기 위해 회귀 계수에 패널티 값을 적용하는 것을 말한다.

  • 일반 선형 회귀 : 예측값과 실제 값의 RSS(Residual Sum of Squares)를 최소화할 수 있도록 회귀 계수를 최적화하며, 규제(Regularization)를 적용하지 않은 모델이다.

  • 릿지(Ridge) : 릿지 회귀는 선형 회귀에 L2 규제를 추가한 회귀 모델이다. 릿지 회귀는 L2 규제를 적용하는데, L2 규제는 상대적으로 큰 회귀 계수 값의 예측 영향도를 감소시키기 위해서 회귀 계수값을 더 작게 만드는 규제 모델이다.

  • 라쏘(Lasso) : 라쏘 회귀는 선형 회귀에 L1 규제를 적용한 방식이다. L2 규제가 회귀 계수 값의 크기를 줄이는 데 반해, L1 규제는 예측 영향력이 작은 feature의 회귀 계수를 0으로 만들어 회귀 예측 시 feature가 선택되지 않게 하는 것이다. 이러한 특성 때문에 L1 규제는 feature 선택 기능으로도 불린다.

  • 엘라스틱넷(ElasticNet) : L2, L1 규제를 함께 결합한 모델이다. 주로 feature가 많은 dataset에서 적용되며, L1 규제로 feature의 개수를 줄임과 동시에 L2 규제로 계수 값의 크기를 조정한다.

  • 로지스틱 회귀(Logistic Regression) : 로지스틱 회귀는 회귀라는 이름이 붙어 있지만, 사실은 분류에 사용되는 선형 모델이다. 로지스틱 회귀는 매우 강력한 분류 알고리즘이다. 일반적으로 이진 분류 뿐만 아니라 희소 영역의 분류, 예를 들어 텍스트 분류와 같은 영역에서 뛰어난 예측 성능을 보인다.

최적의 회귀 모델을 만든다:
1. 잔차의 합이 최소가되는 모델을 만든다!
2. 잔차의 합이 최소가 되는 최적 회귀 계수를 찾는다!


단순 선형 회귀 p310

단순 선형 회귀는 독립 변수도 하나, 종속 변수도 하나인 선형 회귀이다

예측 값과 실제 값의 차이를 남은 오류, 잔차라고 부른다.
최적의 회귀 모델을 만든다는 것은 전체 데이터의 잔차 합이 최소가 되는 모델을 만든다는 의미이면서, 동시에 잔차 합이 최소가 될 수 있도록 만드는 최적의 회귀 계수를 찾는다는 의미도 있다.
오류 값은 +나 -가 될 수 있어서 단순히 더하면 오류 합이 크게 줄어들 수 있다.
따라서 보통 오류 합을 계산할 때는 절댓값을 취해서 더하는 Mean Absolute Error를 사용하거나,
오류 값의 제곱을 구해서 더하는 방식인 Residual Sum of Square(RSS)를 사용한다.
일반적으로 미분 계산을 편하게 하기 위해 RSS 방식으로 오류 합을 구한다.

회귀에서 이 RSS는 비용(Cost), 비용 함수, 손실 함수(loss function)라고 한다.
머신러닝 회귀 알고리즘은 데이터를 계속 학습하면서 이 비용 함수가 반환하는 값을 지속해서 감소시키고 최종적으로는 더 이상 갑소하지 않는 최소의 오류 값을 구하는 것이다.

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(0)
X = 2*np.random.rand(100,1)
y= 6 +4*X + np.random.rand(100,1)
plt. scatter(X,y)


비용 최소화하기 - 경사 하강법(Gradient Descent) 소개 p312

경사 하강법은 고차원 방정식에 대한 문제를 해결해 주면서 비용 함수 RSS를 최소화하는 방법을 직관적으로 제공하는 뛰어난 방식이다.
사실 경사 하강법은 '데이터를 기반으로 알고리즘이 스스로 학습한다'는 머신러닝의 개념을 가능하게 만들어준 핵심 기법의 하나이다.
사전적 의미는 '점진적 하강'이라는 뜻으로 점진적으로 반복적인 계산을 통해 w 파라미터를 업데이트하면서 오류 값이 최소가 되는 w 파라미터를 구하는 방식이다.

핵심은 오류가 작아지는 방향으로 w 값을 업데이트하는 방법이다.
위 그림과 같은 포물선 형태의 2차 함수의 최저점은 해당 2차 함수의 미분 값인 1차 함수의 기울기가 가장 최소일 때이다.
따라서 만약 비용 함수가 포물선 모양의 2차 함수라면 경사 하강법은 최초의 w에서부터 미분을 적용한 뒤 이 미분 값이 계속 감소하는 방향으로 순차적으로 w를 업데이트한다.
그리고 더 이상 미분된 1차 함수의 기울기가 감소하지 않는 지점을 비용 함수가 최소인 지점으로 간주하고 그때의 w를 반환한다.

편미분의 결과값을 반복적으로 보정하면서 파라미터 값을 업데이트하면 RSS(w0,w1)가 최소가 되는 파라미터를 구할 수 있다.
업데이트는 편미분 결과값에 마이너스(-)를 해준 뒤 원래 파라미터 값에 더해준다.
그리고 편미분 값이 너무 클 수 있기 때문에 보정 계수 η를 곱하는데, 이를 '학습률'이라고 부른다.

경사하강법은 새로운 w1, w0를 반복적으로 업데이트하면서 비용함수가 최소가 되는 값을 찾음

경사 하강법 구현 p315

간단한 회귀식인 y=4x+6을 근사하기 위한 100개의 데이터를 만들고 경사하강법을 이용해 회귀 계수를 도출해보겠다.

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(0)
X = 2*np.random.rand(100,1)
#X
y= 6 +4*X + np.random.rand(100,1)
plt. scatter(X,y)

x = 2*np.random.rand(100)
y = 6 + 4*x + np.random.rand(100)

plt.scatter(x, y)

#오류 없애기
model = LinearRegression(fit_intercept=True)

lr = model.fit(np.array(x).reshape(-1,1), y) 
lr.coef_
lr.intercept_ 


사이킷런 LinearRegression을 이용한 보스턴 주택 가격 예측

LinearRegression 클래스 - Ordinary Least Squares

LinearRegression 클래스는 예측값과 실제 값의 RSS(Residual Sum of Squares)를 최소화해 OLS(Ordinary Least Squares) 추정 방식으로 구현한 클래스이며,
fit() method로 X, y 배열을 입력 받으면 회귀 계수(Coefficients)인 W를 coef_ 속성에 저장한다.

  • 입력 파라미터
    • fit_intercept : boolean 값으로 default는 True이다. Intercept(절편) 값을 계산할 것인지 말지를 지정하고, 만일 False로 지정하면 intercept가 사용되지 않고 0으로 지정된다.
    • normalize : boolean 값으로 default는 False이다. fit_intercept가 False인 경우에는 이 파라미터가 무시되고, True이면 회귀를 수행하기 전에 입력 dataset을 정규화한다.
  • 속성
    • coef_ : fit() method를 수행했을 때 회귀 계수가 배열 형태로 저장하는 속성이며, Shape은 (Targt 값 개수, feature 개수)이다.
    • intercept_ : intercept 값

다중 공선성 문제

  • Multi-colinearity : 입력변수들 간의 상관정도가 높은 상태를 말한다.
  • 정의: 피처간의 상관관계가 매우 높은 경우 분산이 매우 커져서 오류에 매우 민감해지는 문제
  • 일반적으로 선형회귀는 입력 피처의 독립성에 많은 영향을 받음
  • 상관관계가 높은 피처가 많은 경우 독립적인 중요한 피처만 남기고 제거하거나 규제를 적용함

회귀평가 지표

  • Yi: 실제 점
  • Y^i: 대응 직선점
  • Yi -Y^i: 오차를 표현함

LinearRegression을 이용해 보스턴 주택 가격 회귀 구현

사이킷런은 보스턴 주택 가격 dataset을 load_boston()을 통해 제공한다.
각 feature의 의미를 설명한 후 dataset을 로드하고 DataFrame으로 변경하겠다.

feature 설명

  • CRIM: 지역별 범죄 발생률
  • ZN: 25,000평방피트를 초과하는 거주 지역의 비율
  • NDUS: 비상업 지역 넓이 비율
  • CHAS: 찰스강에 대한 더미 변수(강의 경계에 위치한 경우는 1, 아니면 0)
  • NOX: 일산화질소 농도
  • RM: 거주할 수 있는 방 개수
  • AGE: 1940년 이전에 건축된 소유 주택의 비율
  • DIS: 5개 주요 고용센터까지의 가중 거리
  • RAD: 고속도로 접근 용이도
  • TAX: 10,000달러당 재산세율
  • PTRATIO: 지역의 교사와 학생 수 비율
  • B: 지역의 흑인 거주 비율
  • LSTAT: 하위 계층의 비율
  • MEDV: 본인 소유의 주택 가격(중앙값)
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
from scipy import stats
from sklearn.datasets import load_boston
%matplotlib inline

# boston 데이타셋 로드
boston = load_boston()

# boston 데이타셋 DataFrame 변환 
bostonDF = pd.DataFrame(boston.data , columns = boston.feature_names)

# boston dataset의 target array는 주택 가격임. 이를 PRICE 컬럼으로 DataFrame에 추가함. 
bostonDF['PRICE'] = boston.target
print('Boston 데이타셋 크기 :',bostonDF.shape)
bostonDF.head()

dataset의 feature는 Null 값은 없으며, 모두 float 형이다.
그 다음 각 feature(column)이 회귀 결과에 미치는 영향이 어느 정도인지 시각화해서 알아보겠다.

# 2개의 행과 4개의 열을 가진 subplots를 이용. axs는 4x2개의 ax를 가짐.
fig, axs = plt.subplots(figsize=(16,8) , ncols=4 , nrows=2)
lm_features = ['RM','ZN','INDUS','NOX','AGE','PTRATIO','LSTAT','RAD']
for i , feature in enumerate(lm_features):
    row = int(i/4)
    col = i%4
    # 시본의 regplot을 이용해 산점도와 선형 회귀 직선을 함께 표현
    sns.regplot(x=feature , y='PRICE',data=bostonDF , ax=axs[row][col])

다른 feature보다 RM과 LSTAT의 PRICE 영향도가 가장 두드러지게 나타난다.
RM(방 개수)는 양 방향의 선형성(Positive Linearity)이 가장 크다.
즉, 방의 크기가 클수록 가격이 증가하는 모습을 확연히 보여준다.
LSTAT(하위 계층 비율)는 음 방향으 선형성(Negative Linearity)이 가장 크다.
이제 LinearRegression 클래스를 이용하여 보스턴 주택 가격의 회귀 모델을 만들어 학습/예측을 수행한 후 MSE와 R2 Score를 측정하겠다.

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error , r2_score

y_target = bostonDF['PRICE']
X_data = bostonDF.drop(['PRICE'],axis=1,inplace=False)

X_train , X_test , y_train , y_test = train_test_split(X_data , y_target ,test_size=0.3, random_state=156)

# Linear Regression OLS로 학습/예측/평가 수행. 
lr = LinearRegression()
lr.fit(X_train ,y_train )
y_preds = lr.predict(X_test)
mse = mean_squared_error(y_test, y_preds)
rmse = np.sqrt(mse)

print('MSE : {0:.3f} , RMSE : {1:.3F}'.format(mse , rmse))
print('Variance score : {0:.3f}'.format(r2_score(y_test, y_preds)))

# 회귀 계수를 큰 값 순으로 정렬하기 위해 Series로 생성. index가 컬럼명에 유의
coeff = pd.Series(data=np.round(lr.coef_, 1), index=X_data.columns )
coeff.sort_values(ascending=False)

from sklearn.model_selection import cross_val_score

y_target = bostonDF['PRICE']
X_data = bostonDF.drop(['PRICE'],axis=1,inplace=False)
lr = LinearRegression()

# cross_val_score( )로 5 Fold 셋으로 MSE 를 구한 뒤 이를 기반으로 다시  RMSE 구함. 
neg_mse_scores = cross_val_score(lr, X_data, y_target, scoring="neg_mean_squared_error", cv = 5)
rmse_scores  = np.sqrt(-1 * neg_mse_scores)
avg_rmse = np.mean(rmse_scores)

# cross_val_score(scoring="neg_mean_squared_error")로 반환된 값은 모두 음수 
print(' 5 folds 의 개별 Negative MSE scores: ', np.round(neg_mse_scores, 2))
print(' 5 folds 의 개별 RMSE scores : ', np.round(rmse_scores, 2))
print(' 5 folds 의 평균 RMSE : {0:.3f} '.format(avg_rmse))

  • 일반적으로 회귀는 MSE 값이 낮을수록 수록 좋은 회귀 모델입니다. p328

다항 회귀를 이용한 과소적합 및 과적합 이해 p332

다항 회귀는 feature의 직선적 관계가 아닌 복잡한 다항 관계를 모델링할 수 있다.
다항식의 차수가 높아질수록 매우 복잡한 feature 간의 관계까지 모델링이 가능하다.
하지만 다항 회귀의 차수(degree)를 높일수록 학습 데이터에만 너무 맞춘 학습이 이뤄져서 정작 테스트 데이터 환경에서는 오히려 예측 정확도가 떨어진다.
즉, 차수가 높아질수록 과적합의 문제가 크게 발생한다.

다항 회귀

  • 회귀식이 독립변수의 단항식이 아닌 2,3차 방정식과 같은 다항식으로 표현되는 것
  • 원본 단항 피처들을 다항 피처들로 변환한 데이터 세트로 활용
  • 사이킷런에서는 Pipeline 클래스를 이용해서 PolynomialFeatures변환과 LinearRegression 학습/예측을 결합하여 다항회귀를 구현

  • 수치예측 scoring함수
    scoring='neg_mean_squared_error'를 쓰는 이유는 scoring 매개변수에 클수록 좋은 함수를 기대하기 때문에 -mse를 쓰고 나서 나중에 다시 -를 곱해준다.

과소적합과 과적합 문제의 예제가 있다.
원래 dataset은 feature X와 target y가 noise가 포함된 다항식의 cosine 그래프 관계를 가지도록 만들어준다.
그리고 이에 기반하여 다항 회귀의 차수를 변화시키면서 그에 따른 회귀 예측 곡선과 예측 정확도를 비교하는 예제이다.


편형-분산 트레이드오프 (Bias-Variance Trade off) p336

편향-분산 트레이드오프(Bias-Variance Trade off)는 머신러닝이 극복해야하는 가장 중요한 이슈 중의 하나이다.
위 예제의 Degree 1과 같은 모델은 매우 단순한 모델로 지나치게 한 방향으로 치우친 경향이 있는 모델이다.
이런 모델을 고편향(High Bias)성을 가졌다고 한다.
반대로 Degree 15와 같은 모델은 학습 데이터 하나하나의 특성을 매우 잘 반영하면서 지나치게 복잡한 모델이 되었고 높은 변동성을 가지게 되었다.
이런 모델은 고분산(High Variance)성을 가졌다고 말한다.

  • Low Bias/Low Variance는 예측 결과가 실제 결과에 비해 매우 잘 근접하면서도 예측 변동이 크지 않고 특정 부위에 집중돼 있는 아주 뛰어난 성능을 보여준다.
  • Low Bias/High Variance는 예측 결과가 실제 결과에 비교적 근접하지만, 예측 결과가 실제 결과를 중심으로 꽤 넓게 분포되고 있다.
  • High Bias/Low Variance는 정확한 결과에서 벗어나면서도 예측이 특정 부분에 집중되어 있다.
  • High Bias/High Variance는 정확한 예측 결과를 벗어나면서도 넓은 부분에 분포되어 있다.

일반적으로 bias와 variance는 한 쪽이 높으면 다른 한 쪽이 낮아지는 경향이 있다.
bias가 너무 높으면 전체 error가 높고, bias를 점점 낮추면 동시에 variance는 높아지면서 전체 error는 낮아진다.
그리고 전체 error가 가장 낮아지는 'Goldilocks' 지점을 통과하면서 분산은 지속적으로 높이면 전체 error는 오히려 증가하면서 예측 성능이 다시 낮아진다.
high bias/low variance는 과소적합되기 쉬우며 low bias/high variance는 과적합되기 쉽다.
bias와 variance가 서로 trade off를 이루면서 가장 낮은 Cost를 가지는 모델을 구축하는 것이 가장 효율적인 머신러닝 예측 모델이다.


규제 선형 모델 - 릿지, 라쏘, 엘라스틱넷 p337

회귀 모델은 적절히 데이터에 적합하면서도 회귀 계수가 기하급수적으로 커지는 것을 제어할 수 있어야함

규제 선형 모델의 개요 p337

회귀 모델은 적절하게 데이터에 적합하면서도 회귀 계수가 기하급수적으로 커지는 것을 제어할 수 있어야한다.
이전까지는 선형 모델의 비용 함수는 실제 값과 예측 값의 차이를 최소화하는 것만 고려하였다. 그러다보니 과적합이 발생하여 회귀 계수가 쉽게 커졌다.
이를 반영하여 비용 함수는 학습 데이터의 잔차 오류 값을 최소로 하는 방법과 과적합을 방지하기 위해 회귀 계수가 커지지 않도록 하는 방법이 서로 균형을 이뤄야 한다.
따라서 회귀 계수의 크기를 제어하여 과적합을 개선하기 위해 비용 함수를 변경해야 한다.

여기서 alpha는 학습 데이터 적합 정도와 회귀 계수 값의 크기 제어를 수행하는 튜닝 파라미터이다.
alpha가 0이나 매우 작은 값이라면 비용 함수 식은 기존과 동일한 식으로 근사가 가능할 것이다.
반면에 alpha가 무한대에 가깝게 커진다면 비용 함수 식은 단순히 W값을 0으로 만드는 것이 Cost 함수의 목표가 될 것이다.
즉, alpha를 0에서부터 지속적으로 값을 증가시키면 회귀 계수 값의 크기를 감소시킬 수 있다.
이처럼 비용 함수에 alpha 값으로 패널티를 부여해 회귀 계수 값의 크기를 감소시켜 과적합을 개선하는 방식을 규제(Regularization)라고 부른다.
규제는 크게 L2 방식과 L1 방식으로 구분된다.
L2 규제는 위와 같이 alpha∗∣∣W∣∣22 를 부여하는 하는 방식이며,
L2 규제를 적용한 회귀를 릿지(Ridge) 회귀라고 한다.
L1 규제는 alpha∗∣∣W∣∣1 를 부여하는 방식이고,
L1 규제를 적용한 회귀는 라쏘(Lasso) 회귀라고 부른다.
L1 규제를 적용하면 영향력이 크지 않은 회귀 계수를 0으로 만든다.


릿지 회귀 p339

사이킷런은 Ridge 클래스를 통해 릿지 회귀를 구현한다.
Ridge 클래스의 주요 생성 파라미터는 alpha이며,
이는 릿지 회귀의 alpha L2 규제 계수이다.
보스턴 주택 가격 dataset을 사용하여 Ridge 클래스로 다시 예측해 보고 성능을 평가해 보겠다.

from sklearn.linear_model import Ridge
from sklearn.model_selection import cross_val_score

ridge = Ridge(alpha = 10)
neg_mse_scores = cross_val_score(ridge, X_data, y_target, scoring="neg_mean_squared_error", cv = 5)
rmse_scores  = np.sqrt(-1 * neg_mse_scores)
avg_rmse = np.mean(rmse_scores)
print(' 5 folds 의 개별 Negative MSE scores: ', np.round(neg_mse_scores, 3))
print(' 5 folds 의 개별 RMSE scores : ', np.round(rmse_scores,3))
print(' 5 folds 의 평균 RMSE : {0:.3f} '.format(avg_rmse))

# 알파가 커지니까 RMSE는 작아졌다.


from sklearn.linear_model import Ridge
from sklearn.model_selection import cross_val_score

ridge = Ridge(alpha = 200)
neg_mse_scores = cross_val_score(ridge, X_data, y_target, scoring="neg_mean_squared_error", cv = 5)
rmse_scores  = np.sqrt(-1 * neg_mse_scores)
avg_rmse = np.mean(rmse_scores)
print(' 5 folds 의 개별 Negative MSE scores: ', np.round(neg_mse_scores, 3))
print(' 5 folds 의 개별 RMSE scores : ', np.round(rmse_scores,3))
print(' 5 folds 의 평균 RMSE : {0:.3f} '.format(avg_rmse))

  • alpha 값을 계속 증가시킬수록 회귀 계수 값이 작아지는 것을 알 수 있다.
  • 특히 NOX feature의 경우 굉장히 크게 작아지는 것을 볼 수 있다.
  • 하지만 릿지 회귀의 경우에 회귀 계수를 0으로 만들지는 않는다.

라쏘 회귀 p342

w의 절대값에 패널티를 부여하는 L1 규제를 선형 회귀에 적용한 것이 라쏘(Lasso) 회귀이다.
L2 규제가 회귀 계수의 크기를 감소시키는 데 반해,
L1 규제는 불필요한 회귀 계수를 급격하게 감소시켜 0으로 만들고 제거한다.
이러한 측면에서 L1 규제는 적절한 feature만 회귀에 포함시키는 feature 선택의 특성을 가지고 있다.

사이킷런은 Lasso 클래스를 통해 라쏘 회귀를 구현하였다.
Lasso 클래스의 주요 생성 파라미터는 alpha이며, 이는 L1 규제 계수이다.
이 Lasso 클래스를 이용하여 릿지 회귀와 유사하게 라쏘의 alpha 값을 변화시키면서 RMSE와 각 feature의 회귀 계수를 출력해보겠다.

from sklearn.linear_model import Lasso

lasso = Lasso(alpha = 10)
neg_mse_scores = cross_val_score(ridge, X_data, y_target, scoring="neg_mean_squared_error", cv = 5)
rmse_scores  = np.sqrt(-1 * neg_mse_scores)

print(' 5 folds 의 개별 Negative MSE scores: ', np.round(neg_mse_scores, 3))
print(' 5 folds 의 개별 RMSE scores : ', np.round(rmse_scores,3))
print(' 5 folds 의 평균 RMSE : {0:.3f} '.format(avg_rmse))

엘라스틱넷 회귀 p345


선형 회귀 모델을 위한 데이터 변환p347


  • 선형 모델은 일반적으로 피처와 타겟 간에 선형 관계가 있다고 가정함
  • 피처값과 타겟값의 분포가 정규분포 형태를 매우 선호함

타겟값 변환

  • 반드시 정규분포를 가져야함
  • 주로 로그 변환을 적용함

피처값 변환

  • 표준화 or 정규화를 수행함
  • 다항 특성을 적용하여 변환하기도 함 (예측 성능에 향상이 없는 경우)
  • 로그 변환을 적용함
  • 데이터 인코딩은 원-핫 인코딩을 적용함

로지스틱 회귀

  • 로지스틱 회귀는 선형 회귀 방식을 분류에 적용한 알고리즘이다.
  • 회귀가 선형인지 비선형인지는 독립 변수가 아닌 가중치(weight)가 선형인지 비선형인지를 따른다.
  • 로지스틱 회귀가 선형 회귀와 다른 점은 학습을 통해 선형 함수의 회귀 최적선을 찾는 것이 아니라 시그모이드(Sigmoid) 함수 최적선을 찾고 이 시그모이드 함수의 반환값을 확률로 간주해 확률에 따라 분류를 결정한다는 것이다.
  • 많은 자연, 사회 현상에서 특정 변수의 확률 값은 선형이 아니라 시그모이드 함수와 같은 S자 커브 형태를 가진다.
  • 시그모이드 함수는 항상 0~1 사이의 값을 가지며, x값이 커지면 1에 근사하고, x값이 작아지면 0에 근사한다.
  • 따라서 로지스틱 회귀는 회귀 문제를 분류 문제로 적용하기 위해 선형 회귀 방식과 시그모이드 함수를 이용하여 결과 값이 1과 0을 예측하도록 수행한다.
  • 선형 회귀 방식을 분류에 적용한 알고리즘
  • 이진분류 문제에 주로 사용됨
  • 희소한 데이터 세트 분류에도 뛰어난 성능을 보임
  • 선형 회귀와의 차이점은 시그모이드 함수 최적선을 찾고, 시그모이드 함수의 반환값을 확률로 간주하여 분류를 결정함

< Sigmoid Function>


회귀 트리

선형 회귀는 회귀 계수의 관계가 모두 선형이라고 가정하는 방식이며, 비선형 회귀 역시 회귀 계구의 관계가 비선형 회귀라고 가정하는 방식이다.
머신러닝 기반의 회귀는 회귀 계수를 기반으로 하는 최적 회귀 함수를 도출하는 것이 주요 목표이다.
하지만 회귀 함수를 기반으로 하지 않고 결정 트리와 같이 트리를 기반으로 하는 회귀 방식도 있다.
회귀를 위한 트리를 생성하고 이를 기반으로 회귀 예측을 하는 것이다.
4장의 분류 트리와 크게 다르지 않지만 리프 노드에서 예측 결정 값을 만드는 과정에 차이가 있는데, 분류 트리가 특정 클래스 label을 결정하는 것과 달리 회귀 트리는 리프 노드에 속한 데이터의 평균을 구해 회귀 예측값을 계산한다.

만약 feature가 하나만 있는 X feature dataset과 결정값 Y가 있다고 가정해보면, 결정 트리 기반으로 분할하면 X값의 균일도를 빈영한 지니 계수에 따라 규칙 노드들이 생기며 분할될 것이다.
리프 노드 생성 기분에 부합하는 트리 분할이 완료됬다면 리프 노드에 소속된 데이터 값의 평균값을 구해서 최종적으로 리프 노드에 결정 값으로 할당한다.

  • CART (Classification and Regression Tree)
    • 분류 뿐만 아니라 회귀도 가능한 트리 분할 알고리즘
  • 분류와 유사하게 분할함, 분할 기준은 RSS(SSE)가 최소가 될 수 있는 기준
  • 최종 분할이 완료된 후에는 각 분할 영역에 있는 데이터 결정값들의 평균값으로 학습/예측함


출처:
https://velog.io/@sset2323/05-02.-%EB%8B%A8%EC%88%9C-%EC%84%A0%ED%98%95-%ED%9A%8C%EA%B7%80%EB%A5%BC-%ED%86%B5%ED%95%9C-%ED%9A%8C%EA%B7%80-%EC%9D%B4%ED%95%B4
https://velog.io/@gjtang/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-Section5

profile
새싹 빅테이터 개발자

0개의 댓글