2017-11-28 2 views
-2

Ich lerne Python/ML und sind auf diese Fehler gestoßen. Ich habe keine Ahnung, da der Code gut ist.Fehler von Sklearn, Python

-Code

from sklearn import datasets 
from sklearn.neighbors import KNeighborsRegressor 
from sklearn.model_selection import train_test_split 
X, y = mglearn.datasets.make_forge() 
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0) 
fig, axes = plt.subplots(1, 3, figsize=(15, 4)) 
line = np.linspace(-3, 3, 1000).reshape(-1, 1) 
for n_neighbors, ax in zip ([1,3,9], axes): 
    reg = KNeighborsRegressor(n_neighbors=n_neighbors) 
    reg.fit(X_train, y_train) 
    ax.plot(line, reg.predict(line)) 
    ax.plot(X_train, y_train, '^', c=mglearn.cm2(0), markersize=8) 
    ax.plot(X_test, y_test, 'v', c=mglearn.cm2(1), markersize=8) 

    ax1.set_title(
     "{} neighour(s)\n train score: {:.2f} test score: {:.2f}".format(
      n_neighbors, reg.score(X_train, y_train), 
      reg.score(X_test, y_test))) 
    ax.set_xlabel("feature") 
    ax.set_ylabel("target") 
axes[0].legend(['model predictions', 'training data/target', 
    'test data/target'], loc='best') 

Fehler

Traceback (most recent call last): 
    File "ch2.py", line 161, in <module> 
    ax.plot(line, reg.predict(line)) 
    File "C:\Program Files (x86)\Python36-32\lib\site-packages\sklearn\neighbors\regression.py", line 144, in predict 
    neigh_dist, neigh_ind = self.kneighbors(X) 
    File "C:\Program Files (x86)\Python36-32\lib\site-packages\sklearn\neighbors\base.py", line 385, in kneighbors 
    for s in gen_even_slices(X.shape[0], n_jobs) 
    File "C:\Program Files (x86)\Python36-32\lib\site-packages\sklearn\externals\joblib\parallel.py", line 779, in __call__ 
    while self.dispatch_one_batch(iterator): 
    File "C:\Program Files (x86)\Python36-32\lib\site-packages\sklearn\externals\joblib\parallel.py", line 625, in dispatch_one_batch 
    self._dispatch(tasks) 
    File "C:\Program Files (x86)\Python36-32\lib\site-packages\sklearn\externals\joblib\parallel.py", line 588, in _dispatch 
    job = self._backend.apply_async(batch, callback=cb) 
    File "C:\Program Files (x86)\Python36-32\lib\site-packages\sklearn\externals\joblib\_parallel_backends.py", line 111, in apply_async 
    result = ImmediateResult(func) 
    File "C:\Program Files (x86)\Python36-32\lib\site-packages\sklearn\externals\joblib\_parallel_backends.py", line 332, in __init__ 
    self.results = batch() 
    File "C:\Program Files (x86)\Python36-32\lib\site-packages\sklearn\externals\joblib\parallel.py", line 131, in __call__ 
    return [func(*args, **kwargs) for func, args, kwargs in self.items] 
    File "C:\Program Files (x86)\Python36-32\lib\site-packages\sklearn\externals\joblib\parallel.py", line 131, in <listcomp> 
    return [func(*args, **kwargs) for func, args, kwargs in self.items] 
    File "sklearn\neighbors\binary_tree.pxi", line 1294, in sklearn.neighbors.kd_tree.BinaryTree.query 
ValueError: query data dimension must match training data dimension 

Ich kann nicht scheinen, um herauszufinden, was der Fehler ist, wäre jede Hilfe dankbar.

+0

Was ist mglearn? Ich bekomme "NameError: Name 'mglearn' ist nicht definiert" –

+1

'X_train' ist (wahrscheinlich) N von 2 Dimensionen, während' line' ist M von 1 Dimensionen. Du möchtest, dass es M in 2 Dimensionen ist, um 'X_train', deine Trainingsdaten, zu entsprechen. – Evert

Antwort

1

Wie andere bemerkt haben, haben X und Zeile unterschiedliche Anzahlen von Features. Dies ist ein Beispiel aus meinem Buch, voller Code here.

X, y = mglearn.datasets.make_wave() 

geben Sie den 1D-Datensatz, der in dem Buch und den Notebooks verwendet wird, die ich verknüpfte.