편집 기록

편집 기록
  • 프로필 알 수 없는 사용자님의 편집
    날짜2019.12.23

    파이썬 LenearRegression MSE 낮추는 법 문의


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

    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를 어떻게 낮추나요..???ㅠㅠㅠ

  • 프로필 nowp님의 편집
    날짜2019.12.22

    파이썬 LenearRegression MSE 낮추는 법 문의


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

    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를 어떻게 낮추나요..???ㅠㅠㅠ

  • 프로필 알 수 없는 사용자님의 편집
    날짜2019.12.22

    파이썬 MSE 낮추는 법 문의


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

    Sales = \beta_0 X_12 + \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_12 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를 어떻게 낮추나요..???ㅠㅠㅠ