파이썬 LenearRegression MSE 낮추는 법 문의

조회수 1035회

주어진 코드를 살펴보세요. 스켈레톤 코드는 다음 모델을 구현한 것입니다.

Sales = \beta_0 X_1^2 + \beta_1 X_2 + \beta_2 X_2 X_3 + \beta_3 X_3 + \beta_4Sales=β 

주어진 모델에서 변수의 조합을 더하거나 빼면서 MSE의 값을 최대한 낮춰보세요.

테스트 데이터에서의 MSE를 1 미만으로 만들어보세요. 모델을 복잡하게 만들 경우 과적합이 일어나는 점을 주의하세요.

<작성한 코드>

import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split

import csv
csvreader=csv.reader(open("data/Advertising.csv"))

x=[]
y=[]

next(csvreader)
for line in csvreader:
    x_i=[float(line[1]), float(line[2]), float(line[3])]
    y_i=[float(line[4])]

    x.append(x_i)
    y.append(y_i)

X=np.array(x)
Y=np.array(y)


X_poly = []
for x_i in X:
    X_poly.append([
        x_i[0] ** 2, # X_1^2
        x_i[1], # X_2
        x_i[1] * x_i[2], # X_2 * X_3
        x_i[2] # X_3
    ])


x_train, x_test, y_train, y_test = train_test_split(X_poly, Y, test_size=0.2, random_state=0)

lrmodel = LinearRegression()
lrmodel.fit(x_train, y_train)

predicted_y_train = lrmodel.predict(x_train)
mse_train = mean_squared_error(y_train, predicted_y_train)
print("MSE on train data: {}".format(mse_train))

predicted_y_test = lrmodel.predict(x_test)
mse_test = mean_squared_error(y_test, predicted_y_test)
print("MSE on test data: {}".format(mse_test))

이대로 하면

MSE on train data: 4.589288715884171
MSE on test data: 7.356365735074988

이렇게 나오는데 MSE on test data를 어떻게 낮추나요..???ㅠㅠㅠ

  • Advertising.csv 파일은 어디에 있을까요? 정영훈 2019.12.22 19:44
  • 해당 문제는 regularization 을 알고 있는지 묻는 겁니다. 현재 문제의 결과는 train도 4이상으로 underfitting 상태고 이것을 mse가 0에 근접하도록 만들어야 합니다. 사실 릿지나 라쏘 알고리즘을 사용하여 알파값을 조절하면 됩니다만 문제는 그것을 이해하는지 묻는 겁니다. 데이터 파일이 없으니...해볼수는 없군요. 정영훈 2019.12.23 17:39

1 답변

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)