본문 바로가기
기본소양/CODE

1. Linear Regression CODE [1] Simple Regression

by EXUPERY 2021. 2. 2.
반응형

 

Simple Regression

Linear Regression CODE 

 

 


 

0. Reference (Baseline)

## Simple Regression Reference Model (Mean or Median)

# Visualization to flind Baseline
plt.figure(figsize = (15,5))
plt.hist(df.target, bins=100,color='blue',alpha=0.5)
plt.axvline(df.target.mean(),color ='red')
plt.axvline(df.target.median(),color ='navy')
plt.xlabel('target')
plt.title('Histogram of Price')
plt.grid()
plt.show() 

# Baseline
pred_median = [df.target.median()]*len(y_test)
print(df.target.median(),len(pred_median))

# Visulization
plt.xlabel('feature')
plt.ylabel('target')
plt.grid()
plt.scatter(x = df['feature'], y = df['target'], alpha = 0.3)
plt.axhline(df.target.median(),color ='red')
plt.legend()
plt.show()

 

1. the error of the baseline

from sklearn.metrics import mean_absolute_error
def print_errors(y_true, y_hat):
  mae = mean_absolute_error(y_true, y_hat)
  rmse = np.sqrt((((y_hat - y_true)**2).sum() / len(y_true)))
  mse = sklearn.metrics.mean_squared_error(y_hat, y_true)
  print(f'mae : {mae:.2f}') # Mean Absolute Error 절대평균오차, 에러의 절대값 평균
  print(f'rmse : {rmse:.2f}') # Root Mean Squared Error 오차에 제곱해서 평균한 뒤에 루트씌운것
  print(f'mse : {mse:.2f}') # Mean Sqared Error 오차에 제곱한 것의 평균
  
print_errors(y_test, pred_median) 
# 기준모델의 오차값이며 앞으로 뒤에 새로운 모델과 비교하여 성능을 평가하는 기준입니다.

 

2. Simple Regression Model

## Make a Model
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X_train,y_train) 
#train에 모델을 fit해줍니다. X_train과 y_train을 기준으로 fit하는 것입니다. 
# 여기서 일반적으로 X를 대문자로 (행렬) y를 소문자로(벡터) 씁니다. 
# 모델은 아래와 같습니다. 
print(f'선형회귀모델 : y(price) = {int(model.coef_)}x - {abs(int(model.intercept_))}(절편)')

## Visualization
plt.scatter(x = df['featrue'], y = df['target'], alpha = 0.3)
plt.xlabel('featrue')
plt.ylabel('target')
plt.plot(X_train, X_train*model.coef_ + model.intercept_, color = '#ee6f57', label = 'Linear Regression Line')
plt.legend()
plt.grid()
plt.show()

# regplot과 비교
sns.regplot(x = df['featrue'], y = df['target'])
plt.plot(X_train, X_train*model.coef_ + model.intercept_, color = 'red', alpha=0.4)
plt.grid()
plt.show()

 

3. Model Test

## 예측
y_hat = model.predict(X_test) 
# 위에서 만든 모델 기반으로, 새로운 x값(훈련에 사용되진 x값,X_test)을가지고 y 예측값을 예측합니다 
y_true = y_test

## 비교
print('기준모델')
print_errors(y_test, pred_median)
print('선형회귀모델')
print_errors(y_true_1, y_hat_1)

 

 

4. 오차의 시각화

plt.scatter(y_test, y_hat, s=10) # 예측한 값과 실제 오차를 산점도로 표현하면 다음과 같습니다. 기준모델보다는 낫지만, 아직 퍼져있습니다.
plt.xlabel("Targets: $Y_i$")
plt.ylabel("Predicted targets: $\hat{Y}_i$")
plt.title("Prices vs Predicted targets: $Y_i$ vs $\hat{Y}_i$")
plt.grid()
plt.show()

 

 

 

 

 

반응형

댓글