Lasso 및 RobustScalar를 사용하여 예측 함수를 구축하는 방법은 무엇입니까?

Sklearn에서 제공하는 .predict함수를 사용하지 않고 LASSO 회귀를 사용하여 값을 예측하는 방법을 알아보려고 합니다. 이것은 기본적으로 올가미의 내부 작동에 대한 이해를 넓히기 위한 것입니다. 올가미 회귀가 어떻게 작동하는지에 대해 Cross Validated 에 질문을 했고 , 예측 기능이 선형 회귀와 동일하게 작동한다고 언급한 의견 중 하나가 있었습니다. 그렇기 때문에 이 기능을 나만의 기능으로 해보고 싶었습니다. 존재하다

{I>cd2> 함수는 {I>다른 출력을 사용할 때 성공적으로 사용될 수 있습니다. 이 예에서 Sklearn의 예측 값은 4.33이고 내 함수는 6.18입니다. 내가 놓친 게 무엇입니까? 마지막에 예측을 올바르게 역변환하지 않았나요? 존재하다

import pandas as pd
from sklearn.preprocessing import RobustScaler
from sklearn.linear_model import Lasso
import numpy as np

df = pd.DataFrame({'Y':[5, -10, 10, .5, 2.5, 15], 'X1':[1., -2.,  2., .1, .5, 3], 'X2':[1, 1, 2, 1, 1, 1], 
              'X3':[6, 6, 6, 5, 6, 4], 'X4':[6, 5, 4, 3, 2, 1]})

X = df[['X1','X2','X3','X4']]
y = df[['Y']]

#Scaling 
transformer_x = RobustScaler().fit(X)
transformer_y = RobustScaler().fit(y) 
X_scal = transformer_x.transform(X)
y_scal = transformer_y.transform(y)

#LASSO
lasso = Lasso()
lasso = lasso.fit(X_scal, y_scal)

#LASSO info
print('Score: ', lasso.score(X_scal,y_scal))
print('Raw Intercept: ', lasso.intercept_.round(2)[0]) 
intercept = transformer_y.inverse_transform([lasso.intercept_])[0][0]
print('Unscaled Intercept: ', intercept) 
print('\nCoefficients Used: ')
coeff_array = lasso.coef_
inverse_coeff_array = transformer_x.inverse_transform(lasso.coef_.reshape(1,-1))[0]
for i,j,k in zip(X.columns, coeff_array, inverse_coeff_array):
    if j != 0:
        print(i, j.round(2), k.round(2))

#Predictions
example = [[3,1,1,1]]
pred = lasso.predict(example)
pred_scal = transformer_y.inverse_transform(pred.reshape(-1, 1))
print('\nRaw Prediction where X1 = 3: ', pred[0])
print('Unscaled Prediction where X1 = 3: ', pred_scal[0][0])

#Predictions without using the .predict function 
def lasso_predict_value_(X1,X2,X3,X4): 
    print('intercept: ', intercept)
    print('coef: ', inverse_coeff_array[0])
    print('X1: ', X1)
    preds = intercept + inverse_coeff_array[0]*X1
    print('Your predicted value is: ', preds)

lasso_predict_value_(3,1,1,1)

훈련된 ^{cd1>}에는 주어진 데이터 포인트의 크기 조정 여부에 관계없이 정보가 없습니다. 따라서 예측에 대한 수동 접근 방식에서는 확장 측면을 고려해서는 안 됩니다.

모델 효율성 처리를 제거하면 sklearn 모델의 결과를 얻을 수 있습니다.


example = [[3,1,1,1]]
lasso.predict(example)

# array([0.07533937])


#Predictions without using the .predict function 
def lasso_predict_value_(X1,X2,X3,X4): 
    x_test = np.array([X1,X2, X3, X4])
    preds = lasso.intercept_ + sum(x_test*lasso.coef_)
    print('Your predicted value is: ', preds)


lasso_predict_value_(3,1,1,1)

# Your predicted value is:  [0.07533937]

 

Guess you like

Origin blog.csdn.net/babyai996/article/details/132186654