파이썬 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를 어떻게 낮추나요..???ㅠㅠㅠ
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
데이터는 인터넷에 많이 있는 데이터더군요.
아래같은 식이면 0.2 정도가 됩니다.
for x_i in X: X_poly.append([ x_i[0] ** 0.4, # X_1^2 x_i[1], # X_2 x_i[0] ** 0.4 * x_i[1], # X_2 * X_3 x_i[2] # X_3 ])
MSE on train data: 0.2132098266677575 MSE on test data: 0.20428712970540414
댓글 입력