2017-12-16 24 views
0

ich die folgenden Variablen:Regression mit Python

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
from sklearn.model_selection import train_test_split 


np.random.seed(0) 
n = 15 
x = np.linspace(0,10,n) + np.random.randn(n)/5 
y = np.sin(x)+x/6 + np.random.randn(n)/10 


X_train, X_test, y_train, y_test = train_test_split(x, y, random_state=0) 


def part1_scatter(): 
    %matplotlib notebook 
    plt.figure() 
    plt.scatter(X_train, y_train, label='training data') 
    plt.scatter(X_test, y_test, label='test data') 
    plt.legend(loc=4); 

Und die folgende Frage:

Schreiben Sie eine Funktion, die 6 für Grad 1, 3, ein Polynom Lineare Regression Modell auf den Trainingsdaten X_train passt, und 9. (Verwenden Sie PolynomialFeatures in sklearn.preprocessing, um die Polynomeigenschaften zu erstellen und dann ein lineares Regressionsmodell anzupassen.) Suchen Sie für jedes Modell 100 vorhergesagte Werte über das Intervall x = 0 bis 10 (z. B. np.linspace (0,10,100)). und speichern Sie dies in einem numply-Array. Die erste Reihe dieser Anordnung sollte der Ausgabe von dem Modell entsprechen, das auf Grad 1, dem zweiten Reihengrad 3, dem dritten Reihengrad 6 und dem vierten Reihengrad 9 trainiert wurde ‚t ausrechnen:

def answer_one(): 
    from sklearn.linear_model import LinearRegression 
    from sklearn.preprocessing import PolynomialFeatures 

    np.random.seed(0) 
n = 15 
x = np.linspace(0,10,n) + np.random.randn(n)/5 
y = np.sin(x)+x/6 + np.random.randn(n)/10 

X_train, X_test, y_train, y_test = train_test_split(x, y, random_state=0) 
results = [] 
pred_data = np.linspace(0,10,100) 
degree = [1,3,6,9] 
y_train1 = y_train.reshape(-1,1) 

for i in degree: 
    poly = PolynomialFeatures(degree=i) 
    pred_poly1 = poly.fit_transform(pred_data[:,np.newaxis]) 
    X_F1_poly = poly.fit_transform(X_train[:,np.newaxis]) 
    linreg = LinearRegression().fit(X_F1_poly, y_train1) 
    pred = linreg.predict(pred_poly1) 
    results.append(pred) 

    dataArray = np.array(results).reshape(4, 100) 

    return dataArray 

erhalte ich diesen Fehler:

line 58  for i 
in degree: ^IndentationError: unexpected 
indent 

Können Sie mir sagen, wo das Problem ist?

Antwort

0

Die return Anweisung sollte nach den for erfolgt durchgeführt werden, so sollte es in unter den for, nicht weiter vertieft werden.

+0

Ich habe versucht, mit „return“ rechts unter „für“, aber es funktioniert nicht .. –

+0

Wenn Rückkehr unter für, nun erhalte ich folgende Fehlermeldung: Zeile 58 für i in Grad:^IndentationError: unerwartetes indent –

0

Zu Beginn Ihrer Linie

n = 15 

Sie mit identing gestoppt . Dieser Teil wird also nicht als Funktion erkannt. Dies kann durch Setzen von 4 Leerzeichen auf allen Zeilen ab n = 15 gelöst werden.