2016-08-06 5 views
0

ich den folgenden Code verwende jedoch zu prüfen SGDClassifierValueerror unbekannt Etikettentyp Array sklearn- load_boston

import numpy as np 
from sklearn.datasets import load_boston 
from sklearn.linear_model import SGDClassifier 
from sklearn.cross_validation import cross_val_score 
from sklearn.preprocessing import StandardScaler 
from sklearn.cross_validation import train_test_split 

data = load_boston() 
x_train, x_test, y_train, y_test = train_test_split(data.data, data.target) 

x_scalar = StandardScaler() 
y_scalar = StandardScaler() 

x_train = x_scalar.fit_transform(x_train) 
y_train = y_scalar.fit_transform(y_train) 
x_test = x_scalar.transform(x_test) 
y_test = y_scalar.transform(y_test) 

regressor = SGDClassifier(loss='squared_loss') 
scores = cross_val_score(regressor, x_train, y_train, cv=5) 
print 'cross validation r scores ', scores 
print 'average score ', np.mean(scores) 
regressor.fit_transform(x_train, y_train) 
print 'test set r score ', regressor.score(x_test,y_test) 

wenn ich es benutze ich deprecation Warnungen erhalten neu zu gestalten und der folgende Wert Fehler

ValueError        Traceback (most recent call last) 
<ipython-input-55-4d64d112f5db> in <module>() 
    18 
    19 regressor = SGDClassifier(loss='squared_loss') 
---> 20 scores = cross_val_score(regressor, x_train, y_train, cv=5) 

ValueError: Unknown label type: (array([ -1.89568750e+00, -1.75715217e+00, -1.68255622e+00, 
     -1.66124309e+00, -1.62927339e+00, -1.54402088e+00, 
     -1.49073806e+00, -1.41614211e+00, -1.40548554e+00, 
     -1.34154616e+00, -1.32023303e+00, -1.30957647e+00, 
     -1.27760677e+00, -1.26695021e+00, -1.25629365e+00, 
     -1.20301082e+00, -1.17104113e+00, -1.16038457e+00,....]),) 

Was könnte der wahrscheinliche Fehler im Code sein?

Antwort

3

In Klassifizierungsaufgaben ist die abhängige Variable (oder das Ziel) kategorisch. Wir versuchen beispielsweise vorherzusagen, ob eine Forderung betrügerisch ist oder nicht. In der Regression hingegen ist die abhängige Variable numerisch. Es kann gemessen werden.

Im Boston Housing-Datensatz ist die abhängige Variable „Median-Wert von Eigenheimen in dem $ 1000“ (Sie die Beschreibung print(data.DESCR) durch die Ausführung sehen). Es ist eine kontinuierliche Variable und kann nicht mit einem Klassifikator vorhergesagt werden.

Wenn Sie den Klassifikator testen möchten, können Sie einen anderen Datensatz verwenden. Ändern Sie beispielsweise load_boston() in load_iris(). Beachten Sie, dass Sie auch die Transformation für die Zielvariable entfernen müssen - dies gilt für numerische Variablen. Mit diesen Änderungen sollte es korrekt funktionieren.

import numpy as np 
from sklearn.datasets import load_iris 
from sklearn.linear_model import SGDClassifier 
from sklearn.cross_validation import cross_val_score 
from sklearn.preprocessing import StandardScaler 
from sklearn.cross_validation import train_test_split 

data = load_iris() 
x_train, x_test, y_train, y_test = train_test_split(data.data, data.target) 

x_scalar = StandardScaler() 

x_train = x_scalar.fit_transform(x_train) 
x_test = x_scalar.transform(x_test) 

classifier = SGDClassifier(loss='squared_loss') 
scores = cross_val_score(classifier, x_train, y_train, cv=5) 


scores 
Out: array([ 0.33333333, 0.2173913 , 0.31818182, 0.  , 0.19047619]) 
+0

das Beispiel usedhere verwendet Boston-Datensatz und führt ohne Fehler [Link] (https://books.google.co.in/books?id=fZQeBQAAQBAJ&pg=PT97&dq=mastering+machine+learning+with+scikit+ SGd & hl = de & sa = X & ved = 0ahUKEwjwzpz916zOAhWMK48KHamrAQkQ6AEIMDAA # v = eine Seite & q = mastering% 20machine% 20learning% 20with% 20scikit% 20SGd & f = false) – aradhyamathur

+0

Aber es verwendet [SGDRegressor] (http://scikit-learn.org/stable/modules/generated/ sklearn.linear_model.SGDRegressor.html), nicht [SGDClassifier] (http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.SGDClassifier.html). – ayhan

Verwandte Themen