Je veux utiliser IsolationForest
pour trouver des valeurs aberrantes. Je veux trouver les meilleurs paramètres pour le modèle avec GridSearchCV
. Le problème est que j'obtiens toujours la même erreur:
TypeError: If no scoring is specified, the estimator passed should have a 'score' method. The estimator IsolationForest(behaviour='old', bootstrap=False, contamination='legacy',
max_features=1.0, max_samples='auto', n_estimators=100,
n_jobs=None, random_state=None, verbose=0, warm_start=False) does not.
Il semble que ce soit un problème car il IsolationForest
n'a pas de score
méthode. Y'a t'il un moyen d'arranger cela? Existe-t-il également un moyen de trouver un score pour la forêt d'isolement? Voici mon code:
import pandas as pd
from sklearn.ensemble import IsolationForest
from sklearn.model_selection import GridSearchCV
df = pd.DataFrame({'first': [-112,0,1,28,5,6,3,5,4,2,7,5,1,3,2,2,5,2,42,84,13,43,13],
'second': [42,1,2,85,2,4,6,8,3,5,7,3,64,1,4,1,2,4,13,1,0,40,9],
'third': [3,4,7,74,3,8,2,4,7,1,53,6,5,5,59,0,5,12,65,4,3,4,11],
'result': [5,2,3,0.04,3,4,3,125,6,6,0.8,9,1,4,59,12,1,4,0,8,5,4,1]})
x = df.iloc[:,:-1]
tuned = {'n_estimators':[70,80,100,120,150,200], 'max_samples':['auto', 1,3,5,7,10],
'contamination':['legacy', 'outo'], 'max_features':[1,2,3,4,5,6,7,8,9,10,13,15],
'bootstrap':[True,False], 'n_jobs':[None,1,2,3,4,5,6,7,8,10,15,20,25,30], 'behaviour':['old', 'new'],
'random_state':[None,1,5,10,42], 'verbose':[0,1,2,3,4,5,6,7,8,9,10], 'warm_start':[True,False]}
isolation_forest = GridSearchCV(IsolationForest(), tuned)
model = isolation_forest.fit(x)
list_of_val = [[1,35,3], [3,4,5], [1,4,66], [4,6,1], [135,5,0]]
df['outliers'] = model.predict(x)
df['outliers'] = df['outliers'].map({-1: 'outlier', 1: 'good'})
print(model.best_params_)
print(df)
python
scikit-learn
taga
la source
la source
Réponses:
Vous devez créer votre propre fonction de notation car
IsolationForest
aucunescore
méthode n'est intégrée. Au lieu de cela, vous pouvez utiliser lascore_samples
fonction disponible dansIsolationForest
(peut être considérée comme un proxy pourscore
) et créer votre propre scoreur comme décrit ici et le transmettre auGridSearchCV
. J'ai modifié votre code pour ce faire:J'espère que cela t'aides!
la source
lambda
?lambda
expression par une fonction comme indiqué ci-dessus.Je pense que le score fait référence à l'objet GridSearchCV, et non à IsolationForest.
S'il est "Aucun" (par défaut), il essaiera d'utiliser le score des estimateurs qui, comme vous le dites, n'existe pas. Essayez d'utiliser l'une des métriques de notation disponibles adaptées à votre problème dans l'objet GridSearchCV
la source