티스토리 뷰
1. Python package 로드 및 matplotlib 출력 옵션 설정
우선 사용할 패키지들을 가져오자.
첫 번째 줄은 우리가 단일선형회귀분석을 하기 위해서 사용할 sklearn에 패키지 중 linear_model 모듈을 가져오는 코드이다. linear_model은 회귀분석을 할 수 있게 도와주는 모듈이다.
두 번째 줄은 numpy 패키지를 np라는 이름으로 가져온다. Numpy는 앞에서 배운 것 처럼 행렬, 벡터 등의 수학 계산을 위한 자료구조와 계산 함수를 제공하는 패키지이다.
세 번째 줄은 pandas 패키지를 pd라는 이름으로 가져오겠다. pandas 패키지는 CSV파일 또는 데이터베이스에서 데이터를 읽고 쓸 수 있고 또한 데이터를 쉽게 조작해 새로운 컬럼을 추가할 수 있는 패키지이다.
네 번째 줄은 Matplotlib패키지를 가져오겠다. Matplotlib은 막대그래프, 히스토그램, 파이차트, 산점도 등 다양한 그림을 그리는데 사용되는 파이썬의 시각화 패키지이다.
다섯 번째 줄은 matplotlib의 서브패키지인 pyplot을 "plt"라는 이름으로 가져오는 코드이다.
여섯 번째 줄은 "%matplotlib inline."이라는 명령어를 호출한다. 이는 matplotlib의 결과를 Ipython notebook 안에서 출력하기 위해 사용하는 명령어이다.
그리고 일곱 번째 줄은 matplotlib 패키지에서 제공하는 스타일 중 하나인 "ggplot"을 지정해서 사용하는 명령어이다.
다음은 python package 가져오기와 matplotlib 출력 옵션 설정에 대한 내용이다.
In:
|
from sklearn import linear_model import numpy as np import pandas as pd import matplotlib import matplotlib.pyplot as plt %matplotlib inline matplotlib.style.use('ggplot') |
2. 데이터 생성
다음은 사용할 데이터를 만들겠다.
첫 번째 줄은 data 변수 안에 dictionary 형태의 x, y key 이름을 가진 데이터를 생성한다.
세 번째 줄은 data 변수 안에 저장된 데이터를 pandas.DataFrame 함수를 통해 2차원의 수정 가능한 테이블 형태의 구조로 변경 후 data 변수에 저장한다. 해당 data 변수를 출력하면 x, y 컬럼명을 가진 데이터 프레임이 생성된 것을 확인할 수 있다.
다음은 데이터 생성에 대한 내용이다.
In: data = {'x' : [13, 19, 16, 14, 15, 14], Out:
'y' : [40, 83, 62, 48, 58, 43]}
data = pd.DataFrame(data)
data
x
y
0
13
40
1
19
83
2
16
62
3
14
48
4
15
58
5
14
43
3. 산점도 표현
다음으로 산점도로 데이터를 표현하도록 하겠다.
pyplot.plot 함수를 사용하여 선이나 마커를 플롯할 수 있는데 첫 번째 줄 plot앞에 data변수를 입력했다. 이유는 plot 앞에 데이터프레임 형식에 변수를 놓으면 컬럼명만 입력해서 쉽게 데이터를 가져올 수 있기 때문이다. 이제 plot 함수 안에 있는 파라미터들에 대해 알아보도록 하자.
kind 파라미터는 기본 선 이외의 여러 가지 플롯 스타일을 입력해서 사용가능 하도록 하는 파라미터이다. kind 파라미터에 scatter를 입력한 것은 산점도를 그리기 위해서 사용했다. 다음으로 x, y파라미터가 있다. x, y 파라미터는 한 열을 다른 열에 대해 플롯하기 위해 사용한다. x는 x축을, y는 y축을 의미하며 여기서 생성한 데이터 x, y를 알맞은 파라미터에 사용했다.
다음은 figsize 파라미터가 있다. figsize는 플롯의 크기를 조정할 때 사용하는 파라미터 이다. 안에 숫자를 입력해서 크고 작게 변경 가능하다.
마지막 파라미터로 color가 있다. 해당 코드를 실행하면 산점도를 출력할 수 있다.
다음 그림은 산점도 표현에 대한 내용이다.
data.plot(kind = "scatter", x = 'x', y = 'y', figsize = (5,5), color = "black") Out:
In:
<matplotlib.axes._subplots.AxesSubplot at 0x1333272fac8>
4. 데이터 학습
다음은 선형회귀모델을 만들어 데이터를 학습시켜보자.
첫 번째 줄은 linear_model.LinearRegression 함수를 통해 선형회귀모델을 만들어 linear_regression 변수 안에 저장한다.
두 번째 줄은 linear_regression.fit 함수를 이용해 모델을 학습하게 하는 함수이다. 학습을 시키기 위해선 X, y 값을 입력해야 하는데 X값은 꼭 2차원 형태로 입력해야 하고 y값은 기존형태로 입력하면 된다. X값엔 data변수 안에 있는 "x" 데이터 y값엔 "y"데이터를 입력했다. x는 독립변수, y는 종속변수를 입력하면 된다.
세 번째 줄은 linear_regression.predict 함수를 통해 학습된 선형회귀모델에 "x"값을 입력 값으로 해서 y값을 예측한다. 예측된 y값은 prediction 변수에 저장된다.
네 번째 줄은 linear_regression.intercopt_를 통해 선형회귀모델의 a계수를 출력한다. intercept_는 sklearn 패키지 linear_model 모듈에서 제공해주는 함수이다.
다섯 번째 줄은 linear_regression.coef_를 통해 선형회귀 모델의 b계수를 출력한다. coef_는 sklearn 패키지 linear_model 모듈에서 제공해주는 함수이다.
다음 그림은 데이터 학습시키는 내용이다.
In: linear_regression = linear_model.LinearRegression() Out:
linear_regression.fit(X=pd.DataFrame(data["x"]), y = data["y"])
prediction = linear_regression.predict(X = pd.DataFrame(data["x"]))
print('a value = ', linear_regression.intercept_)
print('b balue = ', linear_regression.coef_)
a value = -55.48175182481753
b balue = [7.32846715
5. 적합도 검증
다음은 잔차를 구해보자.
첫 번째 줄은 잔차를 구하는 공식인 실제 값 "y"에서 prediction에 저장된 예측 값 y를 빼주어 residuals 변수에 저장한다.
두 번째 줄은 pandas.DataFrame.decribe 함수를 통해 다양한 요약 통계를 생성한다. 숫자 형의 경우 전체 개수, 평균, 표준편차, 최댓값, 최솟값, 백분위 수를 보여준다.
다음은 적합도 검증 중 잔차에 대한 내용이다.
In: residuals = data["y"] - prediction Out:
residuals.describe()
count 6.000000e+00
mean 5.921189e-15
std 2.491445e+00
min -4.116788e+00
25% -5.164234e-01
50% 2.189781e-01
75% 7.189781e-01
max 3.554745e+00
Name: y, dtype: float64
다음은 적합도 검증 방법 중 결정계수를 구하도록 하겠다.
첫 번째 줄에서 residuals에 저장된 잔차 값을 제곱한 값을 numpy.sum 함수를 이용해 더해준 후 SSE 변수에 저장한다. SSE 변수는 결정계수 값을 구하기 위해 사용된다.
두 번째 줄에서 "y"에 저장된 실제 y값에서 numpy.mean 함수를 이용해 "y"를 평균한 값을 빼고 제곱한 값을 numpy.sum 함수를 이용해 더해준 후 SST변수에 저장한다. SST변수는 결정계쑤 값을 구하기 위해 사용된다. 출력 된 결정계수 97.5%로 결과를 통해 x값이 y값에 많은 영향을 주는 것을 확인했다. 그림 10은 적합도 검증 중 결정계수에 대한 내용이다.
In:
|
SSE = (residuals**2).sum() |
Out: |
R_squared = 0.9753156179610034 |
6. 예측하여 플롯으로 표현
다음은 예측한 값을 이용해 산포도에 선형회귀선을 그리도록 하겠다.
첫 번째 줄에선 plot함수를 통해 산점도를 그렸다. 앞에서 설명햇던 부분이므로 넘어가도록 라겠다.
네 번째 줄은 산점도 위에 선형회귀선을 그렸다. plot 함수 안에 파라미터 x, y를 입력하지 않으면 앞에 변수가 x축, 뒤에 변수가 y축으로 기본 세팅 된다. 출력된 결과를 보면 구하고자 했던 선형회귀선이 그려진 것을 확인할 수 있다.
다음은 선형회귀선과 산점도 표현에 대한 내용이다.
In: data.plot(kind = "scatter", x = "x", y = "y", figsize = (5, 5), color = "black") #Plot regression line Out:
plt.plot(data["x"],prediction,color="blue")
[<matplotlib.lines.Line2D at 0x13332b1f0b8>]
7. 성능 평가
다음은 생성된 회귀분석모델에 대한 성능평가를 진행하도록 하겠다.
첫 번째 줄은 sklearn 패키지에서 제공하는 MSE를 구하기 위한 모듈 mean_squared_error를 가져온다.
두 번째 줄은 sklearn.metrics.score 함수로 예측한 결과 값과 정확한 결과 값을 비교해서 성능을 평가한다. score함수는 x, y값을 입력해서 성능을 평가한다.
파라미터를 살펴보면 독립변수 "x"를 2차원 DataFrame 형태로 교체 후 x값으로 지정해주고 종속변수 "y"값은 y값으로 지정해서 학습한 모델을 통해 성능 평가한다.
세 번째 줄은 sklearn 패키지에서 제공하는 mean_squared_error모듈을 이용해 평균제곱오차 값을 구한다. 해당 모듈에 파라미터 값은 학습한 모델을 통해 나온 예측 값 prediction 변수와 실제 값이 저장된 "y"값을 입력한다.
네 번째 줄은 RMSE 값을 구한다. 구하는 방법은 세 번째 줄에서 구한 평균제곱오차 값에 루트를 씌워주었다. 루트는 **0.5 수식으로 구하였다.
이제 결과를 확인해 보도록 하겠다. 보면 알겠지만 앞에서 구한 결정계수와 score함수를 통해 나온 결과가 동일한 것을 확인할 수 있다. RMSE 결과를 통해 오차도 작은 것을 확인햇다.
다음은 성능 평가에 대한 내용이다.
In: from sklearn.metrics import mean_squared_error print('score = ', linear_regression.fit(X=pd.DataFrame(data["x"]), y = data["y"])) print('Mean_Squared_Error = ', mean_squared_error(prediction, data['y'])) print('RMSE = ', mean_squared_error(prediction, data['y'])) print('RMSE = ', mean_squared_error(prediction, data['y'])**0.5) Out:
score = LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None,
normalize=False)
Mean_Squared_Error = 5.172749391727503
RMSE = 5.172749391727503
RMSE = 2.2743679103714736
출처: 파이썬을 이용한 빅데이터 분석
'beginner > 파이썬 분석' 카테고리의 다른 글
다중선형회귀분석 실습 (0) | 2019.01.30 |
---|---|
단일선형회귀분석 ② (0) | 2019.01.28 |
서울시 범죄 현황 분석 (0) | 2019.01.20 |
서울시 구별 CCTV 현황 분석 (0) | 2019.01.18 |
데이터 시각화 (0) | 2019.01.17 |