Chcę użyć IsolationForest
do znalezienia wartości odstających. Chcę znaleźć najlepsze parametry dla modelu GridSearchCV
. Problem polega na tym, że zawsze pojawia się ten sam błąd:
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.
Wydaje się, że jest to problem, ponieważ IsolationForest
nie ma score
metody. Czy istnieje sposób, aby to naprawić? Czy jest też sposób na znalezienie wyniku dla lasu izolacji? To jest mój kod:
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
źródło
źródło
Odpowiedzi:
Musisz stworzyć własną funkcję oceniania, ponieważ
IsolationForest
nie mascore
wbudowanej metody. Zamiast tego możesz skorzystać zscore_samples
funkcji, która jest dostępna wIsolationForest
(może być traktowana jako proxy dlascore
) i stworzyć własnego strzelca, jak opisano tutaj i przekazać go doGridSearchCV
. Zmodyfikowałem twój kod, aby to zrobić:Mam nadzieję że to pomoże!
źródło
lambda
?lambda
wyrażenie funkcją jak pokazano powyżej.Uważam, że ocena odnosi się do obiektu GridSearchCV, a nie do IsolationForest.
Jeśli jest to „Brak” (domyślnie), spróbuje użyć oceny estymatorów, która jak twierdzisz nie istnieje. Spróbuj użyć jednego z dostępnych wskaźników oceny odpowiednich dla Twojego problemu w obiekcie GridSearchCV
źródło