
수치형데이터를 예측하기 위한 대표적인 지도 학습(Supervised Learning) 방법론

w : 기울기(가중치), b : y 절편(편향=bias))회귀 계수 혹은 가중치를 알면 X가 주어졌을 때 Y를 알 수 있다.
가중치(w)를 구하는 방법?
데이터가 충분히 있다면 가중치를추정할 수 있다.
이부분은 그래프를 수도 없이 그려서 에러를최소화하는 직선을 구하는 것을 최우선으로 한다.
# 라이브러리 불러오기
import matplotlib.pylab as plt
import seaborn as sns
import numpy as np
import pandas as pd
# 선형회귀 훈련(적합)
from sklearn.linear_model import LinearRegression # 설계도
tips_df = sns.load_dataset('tips')
tips_df.head()

💁🏼♂️ "식당에서 파트타임으로 일하고 있는 머신이는 이번에는 tip 데이터를 가지고 적용해보기로 했습니다.
돈을 많이 벌고 싶었던 머신이는 전체 금액(X)를 알면 받을 수 있는 팁(Y)에 대한 회귀분석을 진행해볼 예정입니다."
X : total_bill, y = tipmodel_lr2 = LinearRegression()
X = tips_df[['total_bill']] ## [[]]괄호 두번 꼭꼭!
y = tips_df[['tip']]
model_lr2.fit(X,y)

이렇게 나오면 훈련 성공(?)
sns.scatterplot(data = tips_df, x = 'total_bill', y = 'tip')

# y(tip) = w1*x(total_bill) + w0
w1_tip = model_lr2.coef_[0][0]
w0_tip = model_lr2.intercept_[0]
print('y = {}x + {}'.format(w1_tip.round(2), w0_tip.round(2)))

전체 결제금액이 1$ 오를 때, 팁은 0.11$ 오른다.
--> 결제금액이 100$ 오를 때, 팁은 11$ 오른다.
# 예측값
y_true_tip = tips_df['tip']
y_pred_tip = model_lr2.predict(tips_df[['total_bill']])


(잠깐.. 이 pred_tip은 어디서 나온거지)
# 데이터프레임에 pred 컬럼으로 새로 추가
tips_df['pred'] = y_pred_tip
tips_df.head()


실제 값과 예측 값 간의 차이를 제곱하고, 그 평균을 계산하여 모델의 성능을 나타내는 지표
값이 작을수록 모델의 예측이 실제 값과 가깝다고 볼 수 있음
mean_squared_error(y_true_tip, y_pred_tip)



r2_score(y_true_tip, y_pred_tip)
# 사회문화, 경제에 따라 r score 는 기준이 다름

해당 값에 대한 설명력 = 45%
sns.scatterplot(data = tips_df, x = 'total_bill', y = 'tip')
sns.lineplot(data= tips_df, x= 'total_bill', y='pred', color='red')

- 데이터가 선을 기준으로 좌우 크게 퍼져있음
- 왼쪽에 밀집되어있는 데이터로 인해 예상 기울기보다 낮아져 있음
- R score가 낮음
'total_bill'이 아닌 다른 변수와의 비교분석 추가로 필요** **- x 변수를 여러개(젠더, 요일)로 시도해 볼 가치가 있음 = 다항다중선형회귀