-
<머신러닝> 단순선형회귀 (Linear Regression with Python)데이터 분석 관련 공부 2024. 2. 2. 21:56
https://jinhyunbae.tistory.com/144
지난 번에는 Python을 통해서 통계학 모델인 단순선형회귀를 구현해보았었는데
이번에는 sklearn에서 제공하는 선형회귀 모델 학습을 구현해본다.
통계 모델과 마찬가지로 최소자승법(OLS) 방식으로 선형회귀 모델을 구현한다.
사용한 데이터는 insurance.csv 데이터이다.
https://www.kaggle.com/datasets/awaiskaggler/insurance-csv
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