머신러닝/machine learning

simple linear regression, multiple linear regression

Olivia-BlackCherry 2023. 5. 16. 18:10

목차

    regression은 독립변수가 종속변수에 영향을 미친다는 가정 아래 활용되는 모델이다. 

    regression의 종류는 다양하다. 

    선형성이 있는가의 여부에 따라 linear, nonlinear로

    독립변수의 개수에 따라 simple, multiple로

    규제항에 따라 ridge, lasso, elastic net

    독립변수의 차수에 따라 polynomial

    등으로 구분한다. 

     

    1. simple linear regression

    import matplotlib.pyplot as plt
    import pandas as pd
    import pylab as pl
    import numpy as np
    %matplotlib inline
    
    #파일 다운로드 받기
    path=파일의 경로
    df = pd.read_csv("FuelConsumption.csv")
    
    #데이터 탐색하기
    df.head()
    df.describe()
    cdf = df[['ENGINESIZE','CYLINDERS','FUELCONSUMPTION_COMB','CO2EMISSIONS']]
    
    #시각화하여 살펴보기
    viz = cdf[['CYLINDERS','ENGINESIZE','CO2EMISSIONS','FUELCONSUMPTION_COMB']]
    viz.hist()
    plt.show()
    
    plt.scatter(cdf.FUELCONSUMPTION_COMB, cdf.CO2EMISSIONS,  color='blue')
    plt.xlabel("FUELCONSUMPTION_COMB")
    plt.ylabel("Emission")
    plt.show()
    
    plt.scatter(cdf.ENGINESIZE, cdf.CO2EMISSIONS,  color='blue')
    plt.xlabel("Engine size")
    plt.ylabel("Emission")
    plt.show()
    
    #train,test set 분류하기
    msk = np.random.rand(len(df)) < 0.8 #rand(숫자) 0~1까지의 수가 무작위로 숫자만큼 선택
    train = cdf[msk]
    test = cdf[~msk]
    print(len(train), len(test))
    
    #모델링
    from sklearn import linear_model
    regr = linear_model.LinearRegression()
    train_x = np.asanyarray(train[['ENGINESIZE']]) 
    train_y = np.asanyarray(train[['CO2EMISSIONS']])
    regr.fit(train_x, train_y)
    
    # The coefficients 회귀계수: 기울기, 절편
    print ('Coefficients: ', regr.coef_)
    print ('Intercept: ',regr.intercept_)
    
    #시각화
    plt.scatter(train.ENGINESIZE, train.CO2EMISSIONS,  color='blue')
    plt.plot(train_x, regr.coef_[0][0]*train_x + regr.intercept_[0], '-r')
    plt.xlabel("Engine size")
    plt.ylabel("Emission")
    
    #평가
    from sklearn.metrics import r2_score
    
    test_x = np.asanyarray(test[['ENGINESIZE']])
    test_y = np.asanyarray(test[['CO2EMISSIONS']])
    test_y_ = regr.predict(test_x)
    
    print("Mean absolute error(MAE): %.2f" % np.mean(np.absolute(test_y_ - test_y)))
    print("Residual sum of squares (MSE): %.2f" % np.mean((test_y_ - test_y) ** 2))
    print("R2-score(결정계수): %.2f" % r2_score(test_y , test_y_) )

    1) asarray(), asanyarray()

    np.asarray() : 입력된 개체를 Numpy 배열로 반환. 입력 객체가 넘파이 배열 아니라면 새로운 배열 생성하여 반환.

    assanyarray()함수는 입력된 객체가 넘파이 배열이 아니라면, 넘파이 배열로 변환하여 반환

     

    2)평가값

    해당 회귀모델이 제대로 작동하는지 여부를 평가해주는 평가값이다.

    - MAE: 평균절대값오차

     

    residual error : 실제 yi값 - 회귀모델 예측값

    MSE란, 전체 residual error을 합한 것의 평균이다.

    - MSE: 오차제곱의 평균

    - RMSE 루트씌움 

     

    - R-squared : 이것은 에러는 아닌데, 회귀 모형에서 너무 유명하다. 한국에서는 결정계수라고도 하는데, rsquared값은 데이터점들이 얼마나 회귀선과 근접하는지를 보여준다. 만약에 rsquared값이 크면, 이 모델은 잘 학습된 것이라고 보면된다. 결정계수(rsquared)이 가능한 값은 0~1까지의 수이다.

    1-(SSE/SST)=SSR/SST=R-squared=결정계수

     

     

    2. multiple regression

    실제 세상에서는 독립변수가 2개 이상인 경우가 많다. 즉 종속변수에 영향을 미치는 요인이 여러 개 존재한다는 의미이다. 

    이런 경우 독립변수가 종속변수에 미치는 영향력을 수치화하고, 이를 토대로 미래를 예측하기 위해 multiple linear regression model을 사용한다. 

    from sklearn import linear_model
    regr = linear_model.LinearRegression()
    x = np.asanyarray(train[['ENGINESIZE','CYLINDERS','FUELCONSUMPTION_COMB']])
    y = np.asanyarray(train[['CO2EMISSIONS']])
    regr.fit (x, y)
    # The coefficients
    print ('Coefficients: ', regr.coef_)
    
    #prediction:y_hat, rea_y:y
    y_hat= regr.predict(test[['ENGINESIZE','CYLINDERS','FUELCONSUMPTION_COMB']])
    x = np.asanyarray(test[['ENGINESIZE','CYLINDERS','FUELCONSUMPTION_COMB']])
    y = np.asanyarray(test[['CO2EMISSIONS']])
    
    #평가
    print("Residual sum of squares(SSE): %.2f"
          % np.mean((y_hat - y) ** 2))
    
    # Explained variance score: 1 is perfect prediction
    print('Variance score: %.2f' % regr.score(x, y))

    1) 평가 방법으로 Variance score을 사용했다. variance는 분산을 나타낸다. 

    가장 좋은 분산은 1이고, 작을 수록 좋지 않은 모델이다.