-
<머신러닝> 단순선형회귀 (Linear Regression with Python)데이터 분석 관련 공부 2024. 2. 2. 21:56
https://jinhyunbae.tistory.com/144
<통계학> 단순선형회귀 - 2 (with Python)
https://jinhyunbae.tistory.com/141 단순선형회귀 - 1 회귀분석(Regression)이란? 하나 혹은 그 이상의 원인(독립변수)과 종속변수가 있을 때 독립변수를 이용하여 Y를 예측하고자, 두 변수간의 관계를 가장
jinhyunbae.tistory.com
지난 번에는 Python을 통해서 통계학 모델인 단순선형회귀를 구현해보았었는데
이번에는 sklearn에서 제공하는 선형회귀 모델 학습을 구현해본다.
통계 모델과 마찬가지로 최소자승법(OLS) 방식으로 선형회귀 모델을 구현한다.
사용한 데이터는 insurance.csv 데이터이다.
https://www.kaggle.com/datasets/awaiskaggler/insurance-csv
Insurance Csv
www.kaggle.com
import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error data = pd.read_csv('../data/insurance.csv') data
나이와 의료비용 사이에 선형모델 생성해볼 것이다.
X = data['age'] y = data['charges']
모델을 생성하기에 앞서서 두 데이터의 선형성을 확인해볼 필요가있다.
plt.figure(figsize=(10,5)) plt.scatter(X, y) plt.xlabel('X') plt.ylabel('y') plt.show()
산점도 그래프를 보면 나이와 의료비용에는 일정부분 선형성이 발견되며, 우상향하는 것을 확인할 수 있다.
lr = LinearRegression() X = np.array(data['age']) y = np.array(data['charges']) lr.fit(X.reshape(-1, 1), y.reshape(-1, 1)) print('절편 : ', lr.intercept_) print('계수 : ', lr.coef_)
패키지를 불러오고 fit을 통해 데이터를 학습 시키는데 이 때 fit에 입력되는 데이터는 2차원의 array여야하기 때문에
reshape함수를 이용해서 차원을 맞추어 주었다.
그렇게 해서 구해진 결과는 아래와 같다.
절편 : [3165.88500606] 계수 : [[257.72261867]]
그리고 결정계수를 구해본다. 결정계수는 score함수를 이용하면 구할 수 있다.
print(lr.score(X, y))
0.08940589967885804
결정계수는 9%정도로 낮게 나온 것을 확인할 수 있다.
X_new = [[19], [64]] y_hat = lr.predict(X_new) print(y_hat)
학습된 모델의 결과로 19세는 8062, 64세는 19660을 지출한다고 해석할 수 있다.
[[ 8062.61476073] [19660.13260074]]
산점도 위에 회귀선을 그어 선형 모델이 데이터를 얼마나 설명할 수 있는지 시각화해볼 수 있다.
plt.figure(figsize=(10,5)) plt.plot(X, y, 'b.') plt.plot(X_new, y_hat, 'r-') plt.show()
'데이터 분석 관련 공부' 카테고리의 다른 글
<통계학> 단순선형회귀 - 2 (with Python) (0) 2024.01.31 <통계학> 단순선형회귀 - 1 (0) 2024.01.30 <통계학> 분산분석(ANOVA) - 4 (Two-way ANOVA with Python) (1) 2024.01.26 <통계학> 분산분석(ANOVA) - 3 (Two-way ANOVA) (2) 2024.01.26 <통계학> 분산분석(ANOVA) - 2 (One way ANOVA with Python) (1) 2024.01.25