목차
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이고, 작을 수록 좋지 않은 모델이다.