¿Cómo construir una función de predicción con Lasso y RobustScalar?

.predictEstoy tratando de descubrir cómo predecir valores usando la regresión LASSO sin usar las funciones proporcionadas por Sklearn . Básicamente, esto es solo para ampliar mi comprensión del funcionamiento interno del lazo. Hice una pregunta en Cross Validated sobre cómo funciona la regresión de lazo y uno de los comentarios mencionó que la función de predicción funciona igual que en la regresión lineal. Por eso, quería intentar hacer esto con mi propia función. existir

{I>La función cd2> se puede utilizar con éxito {I>cuando se utilizan diferentes salidas. En este ejemplo, el valor previsto de Sklearn es 4,33 y mi propia función es 6,18. ¿Qué me perdí? ¿No transformé correctamente la predicción al final? existir

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)

El ^{cd1>} entrenado no tiene información, ya sea que un punto de datos determinado esté escalado o no. Por lo tanto, su enfoque manual de predicción no debe tener en cuenta el aspecto de escala.

Si elimino su manejo de la eficiencia del modelo, podemos obtener los resultados del modelo 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]

 

Supongo que te gusta

Origin blog.csdn.net/babyai996/article/details/132186654
Recomendado
Clasificación