2016-07-19 18 views
2

Ich versuche, einige grundlegende Machine Learning-Algorithmen auf numerische Daten (floats) zu laufen und habe Probleme, die Daten einzulesen. Ich benutze Python 2.7, Sklearn, Pandas und arbeite durch Jupyter (Ipython Notebook). Als ersten Durchlauf habe ich versucht, eine einfache zufällige Gesamtstruktursuche zu verwenden, aber wenn ich die Funktionen verwende, bekomme ich immer ValueError.Ich kann nicht einen Weg finden, einen Wert Fehler mit Daten aus Datenrahmen in Sklearn Pandas zu umgehen

Die Daten wurden in einen Datenrahmen gelesen

df = pd.read_table("p12.dat", delim_whitespace=True) 

screenshot of data

enter image description here

df.dtypes zeigt, dass alle Werte von Interesse float64 sind.

einen grundlegenden Ausdruck verwenden:

def classification_model(model, data, predictors, outcome): 
    model.fit(data[predictors],data[outcome]) 
    predictions = model.predict(data[predictors]) 
    accuracy = metrics.accuracy_score(predictions,data[outcome]) 
    print "Accuracy : %s" % "{0:.3%}".format(accuracy) 
    print "Cross-Validation Score : %s" % "{0:.3%}".format(np.mean(error)) 
    model.fit(data[predictors],data[outcome]) 

und dann die Variablen Einstellung und Ausführung:

outcome_var = 'ki' 
predictor_var = ['Etot','TSs','Eww-nbr'] 
model = RandomForestClassifier(n_estimators=100) 
classification_model(model, df,predictor_var,outcome_var) 

Der Fehler ist:

ValueError        Traceback (most recent call last) 
<ipython-input-9-7dd611cce611> in <module>() 
----> 1 classification_model(model, df,predictor_var,outcome_var) 

<ipython-input-8-956e572db2f4> in classification_model(model, data, predictors, outcome) 
     1 def classification_model(model, data, predictors, outcome): 
     2 #Fit the model: 
----> 3 model.fit(data[predictors],data[outcome].values) 
     4 
     5 #Make predictions on training set: 

/Users/jonathangough/anaconda/lib/python2.7/site-packages/sklearn/ensemble/forest.pyc in fit(self, X, y, sample_weight) 
    233   self.n_outputs_ = y.shape[1] 
    234 
--> 235   y, expanded_class_weight = self._validate_y_class_weight(y) 
    236 
    237   if getattr(y, "dtype", None) != DOUBLE or not y.flags.contiguous: 

/Users/jonathangough/anaconda/lib/python2.7/site-packages/sklearn/ensemble/forest.pyc in _validate_y_class_weight(self, y) 
    419 
    420  def _validate_y_class_weight(self, y): 
--> 421   check_classification_targets(y) 
    422 
    423   y = np.copy(y) 

/Users/jonathangough/anaconda/lib/python2.7/site-packages/sklearn/utils/multiclass.pyc in check_classification_targets(y) 
    171  if y_type not in ['binary', 'multiclass', 'multiclass-multioutput', 
    172    'multilabel-indicator', 'multilabel-sequences']: 
--> 173   raise ValueError("Unknown label type: %r" % y) 
    174 
    175 

ValueError: Unknown label type: array([[ 2.72000000e+00], 
     [ 4.60000000e+00], 
     [ 6.70000000e+00], 
     [ 2.30000000e+00], 
     [ 1.70000000e+00], 
     [ 2.20000000e+00], 
     [ 3.60000000e+00], 
     [ 9.10000000e+00], 

ich gesucht und gegoogelt, aber ich kann nicht herausfinden, was zu tun ist. Mein Verständnis war, dass man Gleitkommazahlen in einem zufälligen Waldalgorithmus verwenden könnte (also glaubte ich nicht, dass das der Fehler war).

Jeder Einblick wäre willkommen.

+0

Sie können versuchen, die numpy Arrays zu verwenden, die Pandas als Eingabe für das Sklearn-Modell zugrunde liegen. Ich sehe in Ihrem Code nicht. Werte für Daten [Prädiktoren], Daten [Ergebnis], während in Ihrem Stacktrace haben Sie Daten [Ergebnis] .Values. Stellen Sie sicher, dass alle Eingaben '.values' enthalten. – DataSwede

Antwort

1

In scikit-learn sagt ein Classifier eine diskrete Variable voraus, d. H. Der Datentyp der Zielvariablen muss entweder Integer oder String sein. Wenn Sie versuchen, eine kontinuierliche Variable zu modellieren, müssen Sie ein "Regressor" -Modell verwenden, in Ihrem Fall ist das entsprechende Modell RandomForestRegresser.