[파이썬] 선형회귀 간단하게 구현

반응형
    반응형

    파이썬으로 선형회귀 모델 만들기

    이전 포스팅에서 선형회귀에 대한 이론적인 내용을 했었는데 파이썬으로 구현할 때 본의아니게 많이 어렵게 코딩을 한 것 같습니다. 그래서 scikit-learn 과 statsmodel을 이용해 선형회귀를 구현하는 방법을 포스팅합니다.

    이미 되어있는 걸 가져다 쓰면 되기 때문에 간단합니다.

    scikit-learn 을 이용한 방법

    numpy와 scikit-learn을 이용한 방법입니다.
    선형회귀 모델에 데이터를 훈련해서 회귀계수를 찾아냅니다.

    먼저 데이터를 가져옵니다. 예제이므로 간단하게 만들었습니다. 실제 데이터를 가져온다면 입력데이터와 타킷데이터를 구분합니다.

    import numpy as np
    from sklearn.linear_model import LinearRegression
    
    # 입력 데이터
    X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)  # 입력 데이터는 1차원 배열이므로 2D 배열로 변환
    
    # 대상 변수(타깃)
    y = np.array([2, 4, 5, 4, 5])

    선형회귀 모델을 생성합니다. 이미 scikit-learn 에 LinearRegression()이라는 함수가 있으므로 가져다 씁니다.

    '# 선형 회귀 모델 생성
    model = LinearRegression()

    데이터를 기반으로 모델을 훈련시킵니다.

    # 모델 훈련
    model.fit(X, y)

    훈련된 모델에서 최종적인 slope와 y-intercept을 가져옵니다.

    # 모델의 기울기와 절편
    slope = model.coef_[0]
    intercept = model.intercept_
    print(f"기울기: {slope}, 절편: {intercept}")

    평가를 위해서 R^2 score도 계산할 수 있습니다.

    from sklearn.metrics import r2_score
    
    y_pred = model.predict(X)
    # R^2 계산
    r_squared = r2_score(y, y_pred)
    print(f"R^2 값: {r_squared}")

    statsmodel을 이용한 방법

    마찬가지 방법으로 합니다.

    ## statsmodel을 이용한 방법
    import numpy as np
    import statsmodels.api as sm
    
    # 입력 데이터
    X = np.array([1, 2, 3, 4, 5])
    
    # 대상 변수(타깃)
    y = np.array([2, 4, 5, 4, 5])

    X에 상수항을 추가합니다.
    상수항을 추가하지 않으면 모든 독립 변수의 값을 0으로 간주하는 모델로 인식합니다. 원래 데이터는 원점을 지나지 않은 경우가 더 많기 때문에 일반화를 위해 상수항을 추가시킵니다.

    X = sm.add_constant(X)

    모델을 생성하고 훈련시킵니다. summary()를 이용하면 선형회귀 모델에 전체결과를 보실 수 있습니다. statsmodel 모듈 자체가 R에서 왔기 때문에 summary가 잘 되어 있습니다. 선형계수와 R^2도 모두 한번에 볼 수 있습니다.

    model = sm.OLS(y, X).fit()
    print(model.summary())

    기울기와 절편을 따로 보고 싶다면 아래와 같이 합니다.

    slope = model.params[1]
    intercept = model.params[0]
    print(f"기울기: {slope}, 절편: {intercept}")

     

    함께 보면 좋은글

    [Python] 회귀(Regression)

    선형회귀(Linear regression)

    댓글

    Designed by JB FACTORY

    ....