ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [python / scikitlearn] 다중회귀분석 예제 코드 및 설명
    python 데이터 분석 2024. 3. 19. 10:16

    패키지 불러오기 및 데이터 불러오기

    import pandas as pd
    from sklearn.model_selection import train_test_split
    from sklearn.linear_model import LinearRegression, Lasso, Ridge, LassoCV, BayesianRidge
    import statsmodels.formula.api as sm
    import matplotlib.pylab as plt
    
    from dmba import regressionSummary, exhaustive_search
    from dmba import backward_elimination, forward_selection, stepwise_selection
    from dmba import adjusted_r2_score, AIC_score, BIC_score
    
    import pandas as pd
    toyota = pd.read_csv('./Datasets_DataMiningForBusinessAnalytics/ToyotaCorolla.csv')
    
    toyota.describe()

    데이터 불러오기 및 데이터 요약 보기

     

    toyota = toyota.iloc[0:1000]
    
    predictors = ['Age_08_04', 'KM', 'Fuel_Type', 'HP', 'Met_Color', 'Automatic', 'CC',
                 'Doors', 'Quarterly_Tax', 'Weight']
    outcome = 'Price'
    
    # partition data
    X = pd.get_dummies(toyota[predictors], drop_first =True)
    y = toyota[outcome]
    train_X, valid_X, train_y, valid_y = train_test_split(X, y, test_size = 0.4, random_state=1)
    
    car_lm = LinearRegression()
    car_lm.fit(train_X, train_y)
    
    #print coefficients
    print(pd.DataFrame({'Predictor' : X.columns, 'coefficient': car_lm.coef_}))
    
    # print preformance measures (training data)
    regressionSummary(train_y, car_lm.predict(train_X))

     

    데이터 세트를 행으로 자르는 메소드 .iloc[] 을 통해서, 첫번째 ~ 1000번째 행까지만 사용하기 위해 데이터 자르기

     

    predictors 는 말 그대로, 리스트 안에 열의 이름을 담아서 매우 많은 열(39개) 중에서 10개의 열에 대해서 분석하기 위해서 자른다. 

    이렇게 자르는 이유는 데이터 양이 너무 많으면, 회귀분석 등 다른 분석을 돌릴 때 시간이 오래 걸리기 때문에 다른 데이터 분석을 할 때도 이러한 전처리를 하면 좋다.

     

    outcome : 예측하고자 하는 Y 를 outcome 이라고 변수 선언을 한다.

    # partition data 

    머신러닝에서는 데이터를 훈련 / 검증 데이터로 나누어서, 훈련 데이터를 통해서 모델을 구축하고, 이를 검증 데이터를 활용하여, 모델의 성능을 평가하는 과정인데,

    이 부분은 데이터를 자르는 과정이다.

    X = pd.get_dummies(toyota[predictors], drop_first =True)

     

    pd.get_dummies 함수는 범주형 데이터를 수치형 데이터로 변환해주는 함수이다.

    •  이러한 함수를 사용하는 이유는 간단히 말해서, 머신러닝 알고리즘에서 수치형 데이터를 요구하기 때문이다.
    • drop_first=True 옵션은 더미 변수의 함정을 피하기 위해, 첫 번째 더비 변수를 제거하여, 모델의 다중공선성 문제를 방지한다.

    따라서, 위의 코드는 X 라는 변수에 데이터를 알맞게 변환하는 과정이다.


    train_X, valid_X, train_y, valid_y = train_test_split(X, y, test_size = 0.4, random_state=1)

     

    위의 코드의 train_test_split 함수는 데이터를 훈련 세트(train-set)와 검증 세트(test-set | validation-set)로 분할하는 데 사용된다.

    이 함수는 위의 설명처럼 모델을 학습하기 위한 메이터와 모델의 성능을 평가하기 위한 데이터로 나누는 작업이다.

    이 과정을 통해

    • train_X 와 train_y 는 모델 학습에 사용되는 훈련 데이터의 특성과 레이블로 나뉘고,
    • valid_X 와 valid_y 는 학습된 모델의 성능을 평가하는 데 사용되는 검증 데이터의 특성과 레이블로 나뉜다.

    train_test_split  함수의 매개변수

    • test_size=0.4 : 전체 데이터 세트 중 검증 세트로 할당될 데이터의 비율을 나타낸다.
      • 위의 코드의 경우 전체 데이터의 40% 가 검증 세트로 설정되고, 나머지 60% 는 훈련 세트로 나뉜다.
    • random_state = 1
      • 랜덤하게 train / test set 로 나누되, 데이터를 섞는 과정에서 일련된 결과를 보장한다. 이는 데이터 분석 결과를 리뷰하거나, 남들에게 공유할  때, 시도마다 결과값이 달라지면 공유 및 리뷰가 어렵기 때문에 사용한다. (결과의 재현성 보장)

    이와 같은 데이터 분할(partition data) 과정은 모델의 일반화 능력을 평가하고, 과적합을 방지하는 데 중요한 역할을 한다,


    검증 데이터 셋 20개의 예측값 및 검증 데이터 셋에 대해 성능을 보기 위한 코드

    # 표 6-4 : 검증 데이터셋 20개의 예측값 및 검증 데이터셋에 대한 성능 요약
    
    # Use predict() to make predictions on a new set
    car_lm_pred = car_lm.predict(valid_X)
    
    result = pd.DataFrame({'Predicted' : car_lm_pred, 'Actual' : valid_y,
                          'Residual' : valid_y - car_lm_pred})
    # Residual : 잔차
    
    print(result.head(20))
    
    # print preformance measures (validation data)
    regressionSummary(valid_y, car_lm_pred)

     

     

     

    사이킷런 다운로드 방법

     

    [python / 회귀] 다중회귀분석 방법 예제 - 1

    package 들 설치 pip install -U scikit-learn pip install statsmodels pip install dmba scikit-learn 은 python 에서 머신러닝을 다룰 때, 필수적인 라이브러리이다. 이는 여러 모듈이 있는데, 모듈은 간단히 말하자면 코

    shartarc.tistory.com

     

    궁금한거 있거나, 수정사항 보이시면 댓글 남겨주세요!!

Designed by Tistory.