2017-10-16 6 views
0

J'ai écrit ci-dessous du code pour utiliser la régression polynomiale. Suis capable d'adapter le modèle, mais pas capable de prédire !!Ajuster un modèle en utilisant la régression polynomiale ne permet pas de prédire à cause du problème de forme

def polynomial_function(power=5, random_state=9): 
    global X_train 
    global y_train 

    X_train = X_train[['item_1','item_2','item_3','item_4']] 
    rng = np.random.RandomState(random_state) 
    poly = PolynomialFeatures(degree=power, include_bias=False) 
    linreg = LinearRegression(normalize=True) 
    new_X_train = poly.fit_transform(X_train) 
    linreg.fit(new_X_train, y_train) 
    new_x_test = np.array([4, 5, 6, 7]).reshape(1, -1) 
    print linreg.predict(new_x_test) 
    return linreg 

linreg = polynomial_function() 

reçois ci-dessous un message d'erreur:

ValueError: shapes (1,4) and (125,) not aligned: 4 (dim 1) != 125 (dim 0)  

L'erreur se produit ici,

new_x_test = np.array([4, 5, 6, 7]).reshape(1, -1) 
print linreg.predict(new_x_test) 

J'ai trouvé forme de new_X_train = (923, 125) et la forme de new_x_test = (1, 4)

Comment est-ce important?

Lorsque j'essaie de prédire l'utilisation d'une forme de (1, 4) l'algorithme essaie-t-il de la convertir en une forme différente? Cherche-t-il un polynôme de degré 5 pour les données de test?

J'essaie d'apprendre la régression polynomiale, quelqu'un peut-il expliquer ce qui se passe?

Répondre

0
from sklearn.pipeline import Pipeline 
from sklearn.linear_model import LinearRegression 
from sklearn.preprocessing import PolynomialFeatures 

pipeline = Pipeline([ 
    ('poly', PolynomialFeatures(degree=5, include_bias=False)), 
    ('linreg', LinearRegression(normalize=True)) 
    ]) 

pipeline.fit(X_train, y_train) 
pipeline.predict(np.array([4, 5, 6, 7]).reshape(1, -1)) 
+0

En fait, je retourne "linreg" après l'ajustement du modèle. D'autres appellent mon modèle en utilisant model = polynomial_function(); model.predict (np.array ([4, 5, 6, 7]). reshape (1, -1)); , Comment puis-je gérer cela dans ma fonction? Une solution pour cela? –

+0

Pourquoi 'new_x_test' est-il dans votre fonction? Et pourquoi votre exemple montre-t-il que vous prédisez à l'intérieur de votre fonction si votre objectif était de retourner le modèle pour ensuite utiliser pour prédire? – Jarad

+0

Je mets new_x_test pour plus de simplicité. Je testais la fonction. Je pensais pouvoir appliquer la solution quand "new_x_test" est en dehors de la fonction. Mais maintenant je ne peux pas. Pouvez-vous suggérer une solution si "new_x_test" vient de l'extérieur, comme: model.predict (np.array ([4, 5, 6, 7]) reshape (1, -1)) –