web-dev-qa-db-fra.com

Erreur continue non prise en charge dans RandomForestRegressor

J'essaie juste de faire un simple exemple RandomForestRegressor. Mais en testant la précision, j'obtiens cette erreur

/Users/noppanit/anaconda/lib/python2.7/site-packages/sklearn/metrics/classification.pyc

en precision_score (y_true, y_pred, normaliser, sample_weight) 177 178 # Précision de calcul pour chaque représentation possible -> 179 y_type, y_true, y_pred = _check_targets (y_true, y_pred) 180 si y_type.startswith ('multilabel'): 181 differenting_labels = count_nonzero (y_true - y_pred, axe = 1)

/Users/noppanit/anaconda/lib/python2.7/site-packages/sklearn/metrics/classification.pyc

dans _check_targets (y_true, y_pred) 90 if (y_type not in ["binary", "multiclass", "multilabel-indicator", 91 "multilabel-sequence"])): ---> 92 raise ValueError ("{0} is non pris en charge ".format (y_type)) 93 94 si y_type dans [" binaire "," multiclasse "]:

ValueError: continuous is not supported

Ceci est l'échantillon des données. Je ne peux pas montrer les vraies données.

target, func_1, func_2, func_2, ... func_200
float, float, float, float, ... float

Voici mon code.

import pandas as pd
import numpy as np
from sklearn.preprocessing import Imputer
from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor, ExtraTreesRegressor, GradientBoostingRegressor
from sklearn.cross_validation import train_test_split
from sklearn.metrics import accuracy_score
from sklearn import tree

train = pd.read_csv('data.txt', sep='\t')

labels = train.target
train.drop('target', axis=1, inplace=True)
cat = ['cat']
train_cat = pd.get_dummies(train[cat])

train.drop(train[cat], axis=1, inplace=True)
train = np.hstack((train, train_cat))

imp = Imputer(missing_values='NaN', strategy='mean', axis=0)
imp.fit(train)
train = imp.transform(train)

x_train, x_test, y_train, y_test = train_test_split(train, labels.values, test_size = 0.2)

clf = RandomForestRegressor(n_estimators=10)

clf.fit(x_train, y_train)
y_pred = clf.predict(x_test)
accuracy_score(y_test, y_pred) # This is where I get the error.
13
toy

C'est parce que precision_score est uniquement pour les tâches de classification. Pour la régression, vous devez utiliser quelque chose de différent, par exemple:

clf.score(X_test, y_test)

Lorsque X_test est un échantillon, y_test est une valeur de vérité terrain correspondante. Il calculera les prédictions à l'intérieur.

32
Ibraim Ganiev

Puisque vous effectuez une tâche de classification, vous devez utiliser la métrique R au carré (co-efficace de détermination) = au lieu de score de précision (le score de précision est utilisé à des fins de classification).

Pour éviter toute confusion, je vous suggère d'utiliser un nom de variable différent comme reg/rfr.

Le R au carré peut être calculé en appelant la fonction score fournie par RandomForestRegressor, par exemple:

rfr.score(X_test,Y_test)
1
ThReSholD