1-1. df = pd.read_csv('')
1-2. df = head()
1-3. 사용할 특성 select
target = df[['Happiness']]
df = df[['Nation', 'GDP', 'Happiness']]
df_t = df[['Nation', 'GDP']]
1-4. df['Happiness].describe()
1-5(추가) 확률밀도함수, 평균과, 수직선 확인하여 평균 시각적으로 확인
import matplotlib.pyplot as plt
import seaborn as sns
SalePrice의 확률밀도함수를 그려보겠습니다
sns.displot(df['SalePrice'], kde=True)
평균과, 중간값으로 수직선을 그려보겠습니다.
plt.axvline(df['SalePrice'].mean(), color='blue')
plt.axvline(df['SalePrice'].median(), color='red');
참고: 분류 문제 = 타겟의 최빈 클래스, 회귀 문제 = 타겟의 평균값, 시계열회귀문제 = 이전 타임스탬프의 값
2-1. predict: 기준 모델인 평균으로 예측
predict = df['Happiness'].mean()
2-2. 평균값으로 예측할 때 샘플 별 평균값과의 차이(error)저장
errors = predict - df['Happiness']
2-3. Mean Absolute Error, error에 절대값을 취한 후 평균 계산
MAE(평균절대오차)는 예측 error의 절대값 평균
mean_absolute_error = errors.abs().mean()
평균 에러가 상당히 크다는 것을 확인할 수 있음. 평균으로 하면 MAE가 너무 크다는 뜻.
Scatter plot에 가장 잘 맞는 best fit 직선을 그려주면 그것이 회귀 예측 모델이 됨
예측값 = 만들어진 모델이 추정하는 값
잔차 = 예측값과 관측값 차이
오차 = 모집단에서의 예측값과 관측값 차이
회귀선은 잔차 제곱들의 합인 RSS(Residual sum of squares)를 최소하 하는 직선. RSS는 SSE(Sum of Square Error)라고도 말하며, 이 값이 회귀모델의 비용함수(Cost Function)이 된다. 머신러닝에서는 이렇게 비용함수를 최소화 하는 모델을 찾는 과정을 학습하는 것.
여기서 ∂와 beta는 RSS를 최소화 하는 값으로 모델 학습을 통해서 얻어지는 값. 이렇게 잔차제곱합을 최소화하는 방법을 최소제곱회귀 혹은 Ordinary least squares(OLS)라고 부른다.
from sklearn.linear_model import LinearRegression
3-3. X특성 테이블과, y 타겟 백터를 만듭니다
feature = ['GDP']
target = ['Happiness']
X_train = df[feature]
y_train = df[target]
3-4. 모델을 학습fit한다.
model.fit(X_train, y_train)
LinearRegression()
3-5. 새로운 데이터 샘플을 선택해 학습한 모델을 통해 예측
X_test = [[4000]]
y_pred = model.predict(X_test)
3-6. 전체 테스트 데이터를 모델을 통해 예측
X_test = [[x] for x in df_t['GDP']]
y_pred = model.predict(X_test)
3-7. 선형회귀모델의 계수 Coefficients
모델이 GDP와 Happiness 사이에 어떤 관계를 학습했을까?
이 질문에 대한 답을 하기 위해 LinearRegression 객체의 coef, intercept 속성을 확인
계수 Coefficient
model.coef_
절편 intercept
: 좌표 평면상의 직선이 x축과 만나는 점의 x좌표 및 y축과 만나는 점의 y좌표를 통틀어 이르는 말.
modelintercept_
3-8. 예측함수를 만들어 새로운 데이터를 반복해서 예측하고 coefficient의 영향에 대하여 설명
def explain_prediction(usd):
y_pred = model.predict([[usd]])
pred = f"{int(sqft)} sqft 주택 가격 예측: ${int(y_pred[0])} (1 usd당 추가 GDP: ${int(model.coef_[0])
return pred
3-9. gdp_usd = 4000 인 테스트 데이터로 예측
print(explain_prediction(4000))
4000 USD 행복 예측: $447090 (1 USD당 추가 행복: $107)
번외
from ipywidgets import interact
데코레이터 interact를 추가합니다.
@interact
def explain_prediction(sqft=(500,10000)):
y_pred = model.predict([[sqft]])
pred = f"{int(sqft)} sqft 주택 가격 예측: ${int(y_pred[0])} (1 sqft당 추가금: ${int(model.coef_[0]
return pred
interactive(children=(IntSlider(value=5250, description='sqft', max=10000, min=500), Output())