ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Linear model
    AI부트캠프 2021. 3. 3. 21:00

    지도학습(Supervised Learning)

    종류 : 회귀(Regression) / 분류(Classification)

     

    데이터셋 분할

        - train(모델 학습에 사용), valid(모델 학습 후 검증결과를 확인하고 모델 수정), test(마지막에 모델 성능 확인)

            (만약 valid set이 없이 test set으로만 모델 성능을 개선시킨다면 모델은 test set에 과적합 할 위험이 있다.

            * hold out : 직접 훈련/검증/테스트세트로 나누는 방법

            * cross validation(이후 model selection에서 다룸)

     

        - X (특성행렬), y(타겟배열)

     

     

    선형 회귀 모델에서 회귀선을 구하는 방법

    1. Ordinary least squares (OLS)

    RSS(residual sum of squares) 잔차제곱합을 최소화 하는 방법

    #Seaborn regplot
    sns.regplot(x=df[feature], y=df[target]);

    2. Gradient Descent

    반복적으로 모델의 오차들을 최소화 함으로써 계수값들을 최적화

     

    3. Regularization

    모델의 복잡성을 줄이고 제곱합 오차를 최소화하는데 주력

     

     

    회귀모델을 평가하는 평가 지표(evaluation metrics)

    MAE : 단위 유닛이 같으므로 보다 해석에 용이

    MSE : 제곱을 하기 때문에 특이값에 보다 민감

    RMSE : MSE를 실제값과 유사한 단위로 변화시켜주는 장점

    R-squared : 0~1사이 값이기 때문에 직관적인 모델 성능 평가가 가능(값이 1에 가까울 수록 데이터를 잘 설명하는 모델)

     

     

    과적합(overfitting)과 과소적합(underfitting)

    일반화 : 훈련데이터와 테스트데이터 모두에서 좋은 성능을 내는 모델을 만드는 것

    일반화 오차 : 테스트데이터에서 만들어내는 오차

    과적합 : 모델이 훈련데이터에만 특수한 성질을 과하게 학습해 일반화를 못해 결국 테스트데이터에서 오차가 커지는 현상

    과소적합 : 훈련데이터에 과적합도 못하고 일반화 성질도 학습하지 못해, 훈련/테스트 데이터 모두에서 오차가 크게 나오는 경우

     

     

    분산/편향 트레이드오프

    과/소적합은 오차의 편향(Bias)과 분산(Variance)개념과 관계가 있음

     

    분산이 높다 : 모델이 학습 데이터의 노이즈에 민감하게 적합, 과적합

    편향이 높다 : 모델이 학습 데이터에서, 특성과 타겟 변수의 관계를 잘 파악하지 못해 과소적합인 상태

     

    선형모델 예측

    - 학습데이터에서 오차 ↑(편향이 높다)

    - 훈련/테스트 두 데이터에서 그 오차가 비슷(분산이 낮다)

     

    비선형모델 예측

    - 학습데이터에서 오차 ↓(편향이 낮다)

    - 학습데이터에서는 오차가 적지만 테스트(검증)데이터에서는 오차 큰 경우(분산이 높다, 과적합)

     

     

     

    0. 기준모델(Baseline Model)

    가장 간단하고 직관적, 최소한의 성능 나타내는 모델

     

    • 분류문제 : 타겟의 최빈 클래스를 예측값으로 사용
    • 회귀문제 : 타겟의 평균값을 예측값으로 사용
    • 시계열 회귀문제 : 이전 타임스탬프 값을 예측값으로 사용

    ex ) 회귀문제의 기준모델 (붉은 선이 기준모델의 타겟 예측값)

     

     

    1. Simple Linear Regression (단순 선형 회귀)

    feature 1개로 회귀선을 예측하는 모델

    Ordinary least squares(OLS) : 잔차제곱합(RSS, residual sum of squares)를 최소화하는 방법 사용

    from sklearn.linear_model import LinearRegression
    
    #예측모델 인스턴스를 만듦
    model = LinearRegression()
    
    #X(특성들의 테이블)/y(타겟)
    feature = ['feature']
    target = ['target']
    X_train = df[feature]
    y_train = df[target]
    
    #모델을 학습(fit)
    model.fit(X_train, y_train)
    
    #전체 테스트 데이터를 모델을 통해 예측
    X_test = [[x] for x in df_t['feature']]
    y_pred = model.predict(X_test)
    
    #train 데이터에 대한 scatter plot
    plt.scatter(X_train, y_train, color='black', linewidth=1)
    
    #test 데이터에 대한 예측(파란색 점)
    plt.scatter(X_test, y_pred, color='blue', linewidth=1);

    - 회귀계수(coefficients)

    model.coef_, model.intercept_

    단순선형회귀식 :  y = x × coef + intercept

     

    회귀계수가 양수이면, feature 값이 커질수록 예측값을 증가시킨다.

    회귀계수가 음수이면, feature 값이 커질수록 예측값을 감소시킨다.

     

     

     

    2. Multiple Linear Regression (다중 선형 회귀)

    여러 feature로 회귀선을 예측하는 모델

    from sklearn.linear_model import LinearRegression
    
    model = LinearRegression()
    
    #다중모델 학습을 위한 특성
    features = ['feature1', 'feature2', ... , 'featureN']
    X_train = train[features]
    X_test = test[features]
    
    #모델에 학습(fit)
    model.fit(X_train, y_train)
    
    #예측값 계산
    y_pred = model.predict(X_train)
    

     

    - 회귀계수(coefficients)

    model.coef_, model.intercept_
    
    #결과값 : array([coef1, coef2]), intercept

    다중선형회귀식(feature가 2개일때) :  y = x1 × coef1 + x2 × coef2 + intercept

     

    양수인 회귀계수를 가진 feature가 증가하면, 다른 feature의 영향 아래 예측값을 증가시킨다.

    음수인 회귀계수를 가진 feature가 증가하면, 다른 feature의 영향 아래 예측값을 감소시킨다.

     

     

     

    3. Ridge Regression

     

    1) 정규화 (Regularization)

     

    과적합을 줄여 더 좋은 성능의 모델 생성 (편향을 증가, 분산을 감소시킴으로서)

    정규화 식

    위 식에서 전체식이 최소화 되려면 β3 β4가 0이면 된다.

    하지만 베타값에 제약을 줌으로서 overfitting 을 방지하는 것이 정규화이다. (모델의 설명도를 유지하면서 모델의 복잡도를 줄이는 것)

     

    2) Ridge 회귀

    릿지 회귀 식

    릿지 회귀식 = 잔자제곱합(RSS) + 패널티 항(베타 값)

    λ가 증가할수록 릿지회귀의 계수 추정치는 0에 가까워 짐. 즉, λ(람다)가 패널티를 얼마나 부과하는가를 조절

     

    from sklearn.linear_model import Ridge
    
    ridge = Ridge(alpha=alpha, normalize=True) #alpha : lambda(penalty term)
    ridge.fit(X, y)
    
    # 예측
    y_pred = ridge.predict(X)

     

    3) RidgeCV를 이용한 최적 패널티값 도출

    from sklearn.linear_model import RidgeCV
    
    alphas = [0.01, 0.05, 0.1, 0.2, 1.0, 10.0]
    
    ridgecv = RidgeCV(alphas=alphas, normalize=True, cv=number)
    ridgecv.fit(X, y)
    
    ridgecv.alpha_ #최적 alpha값 return

     

     

    4. Logistic Regression

    특성변수를 로지스틱 함수 형태로 표현하여 관측치가 특정 클래스에 속할 확률값 계산

    분류문제에서는 확률값이 정해진 기준값보다 크면 1, 아니면 0으로 예측

    from sklearn.linear_model import LogisticRegression
    
    logistic = LogisticRegression()
    logistic.fit(X_train, y_train)
    
    y_pred = logistic.predict(X_valid)

     

    - 회귀계수

     

    로지스틱 회귀의 계수는 비선형 함수내에 있어 직관적으로 해석하기 어려움 - Odds(오즈)를 사용하여 선형결합형태로 변환하여 해석가능

    ex) odds=4 : 성공확률이 실패확률의 4배라는 의미

     

    logit transformation (로짓변환) : odds에 log를 취한 것, 회귀계수 의미 해석 쉬움

    'AI부트캠프' 카테고리의 다른 글

    Evaluation metrics for classification  (0) 2021.03.03
    Tree based model  (0) 2021.03.03
    [Method] Linear regression (선형회귀)  (0) 2021.01.28
    [Concept] Section review  (0) 2021.01.27
    [Concept] Intermediate Linear Algebra  (0) 2021.01.19
Designed by Tistory.