Jak mogę poradzić sobie z stopniem wielomiczni, gdy chcę zapisać model wielomianowy, Sicne Ta informacja nie jest zapisywana!

import pandas as pd
import numpy as np
import joblib
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

df = pd.DataFrame({
        "a": np.random.uniform(0.0, 1.0, 1000),
        "b": np.random.uniform(10.0, 14.0, 1000),
        "c": np.random.uniform(100.0, 1000.0, 1000)})



def data():
    X_train, X_val, y_train, y_val  = train_test_split(df.iloc[:, :2].values,
                                                       df.iloc[:, 2].values,
                                                       test_size=0.2,
                                                       random_state=1340)
       
    return X_train, X_val, y_train, y_val


X_train, X_val, y_train, y_val = data()


poly_reg = PolynomialFeatures(degree = 2)
X_poly = poly_reg.fit_transform(X_train)

poly_reg_model = LinearRegression().fit(X_poly, y_train)



poly_model = joblib.dump(poly_reg_model, 'themodel')

y_pred = poly_reg_model.predict(poly_reg.fit_transform(X_val))

themodel = joblib.load('themodel')

Teraz, jeśli spróbuję przewidzieć:

themodel.predict(X_val), otrzymuję:

ValueError: matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 6 is different from 2)

Muszę zrobić:

pol_feat = PolynomialFeatures(degree=2) themodel.predict(pol_feat.fit_transform(X_val))

Żeby pracować. Jak mogę przechowywać te informacje, aby móc korzystać z modelu do przewidywania?

0
George 23 lipiec 2020, 12:07

1 odpowiedź

Najlepsza odpowiedź

Musisz także marynować wyszkolonych wielomialifeatures:

# train and pickle
poly_reg = PolynomialFeatures(degree = 2)
X_poly = poly_reg.fit_transform(X_train)
poly_reg_model = LinearRegression().fit(X_poly, y_train)

joblib.dump(poly_reg_model, 'themodel')
joblib.dump(poly_reg, 'poilynomia_features_model')

# load and predict
poilynomia_features_model = joblib.load('poilynomia_features_model')
themodel = joblib.load('themodel')

X_val_prep = poilynomia_features_model.transform(X_val)
predictions = themodel.predict(X_val_prep)

Ale lepiej owinąć wszystkie schody w pojedynczej Rurociągu :

pipeline = Pipeline(steps=[('poilynomia', PolynomialFeatures()), 
                           ('lr', LinearRegression())])

pipeline.fit(X_train, y_train)
pipeline.predict(X_val)
2
Danylo Baibak 23 lipiec 2020, 09:50