티스토리 뷰

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],
        'y' : [40, 83, 62, 48, 58, 43]}
data = pd.DataFrame(data)
data

Out:

 

 

 

 

 

 

 

 

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가 있다. 해당 코드를 실행하면 산점도를 출력할 수 있다.

 

다음 그림은 산점도 표현에 대한 내용이다.

 

In:

data.plot(kind = "scatter", x = 'x', y = 'y', figsize = (5,5), color = "black")

Out:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<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()
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_)

Out:

 

 

a value =  -55.48175182481753
b balue =  [7.32846715

 

 

5. 적합도 검증

 

다음은 잔차를 구해보자.

 

첫 번째 줄은 잔차를 구하는 공식인 실제 값 "y"에서 prediction에 저장된 예측 값 y를 빼주어 residuals 변수에 저장한다.

 

두 번째 줄은 pandas.DataFrame.decribe 함수를 통해 다양한 요약 통계를 생성한다. 숫자 형의 경우 전체 개수, 평균, 표준편차, 최댓값, 최솟값, 백분위 수를 보여준다.

 

다음은 적합도 검증 중 잔차에 대한 내용이다.

 

In:

 

residuals = data["y"] - prediction
residuals.describe()

Out:

 

 

 

 

 

 

 

 

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()
SST = ((data["y"]-data["y"].mean())**2).sum()
R_squared = 1 - (SSE/SST)
print('R_squared = ', R_squared)

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
plt.plot(data["x"],prediction,color="blue")

Out:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[<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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함