Ich möchte zum IsolationForest
Auffinden von Ausreißern verwenden. Ich möchte die besten Parameter für das Modell mit finden GridSearchCV
. Das Problem ist, dass ich immer den gleichen Fehler bekomme:
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.
Es scheint ein Problem zu sein, da IsolationForest
es keine score
Methode gibt. Gibt es eine Möglichkeit, dies zu beheben? Gibt es auch eine Möglichkeit, eine Punktzahl für den Isolationswald zu finden? Das ist mein 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
quelle
quelle
Antworten:
Sie müssen Ihre eigene Bewertungsfunktion erstellen, da
IsolationForest
keinescore
Methode integriert ist. Stattdessen können Sie diescore_samples
Funktion verwenden, die in verfügbar istIsolationForest
(kann als Proxy für betrachtet werdenscore
), Ihren eigenen Scorer erstellen, wie hier beschrieben , und ihn an die übergebenGridSearchCV
. Ich habe Ihren Code dazu geändert:Hoffe das hilft!
quelle
lambda
?lambda
Ausdruck durch eine Funktion wie oben gezeigt ersetzen .Ich glaube, die Bewertung bezieht sich auf das GridSearchCV-Objekt und nicht auf das IsolationForest.
Wenn es "Keine" ist (Standard), wird versucht, die Schätzerbewertung zu verwenden, die, wie Sie angeben, nicht vorhanden ist. Versuchen Sie, eine der verfügbaren Bewertungsmetriken zu verwenden, die für Ihr Problem im GridSearchCV-Objekt geeignet sind
quelle