Я хочу использовать IsolationForest
для обнаружения выбросов. Я хочу найти лучшие параметры для модели с GridSearchCV
. Проблема в том, что я всегда получаю одну и ту же ошибку:
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.
Кажется, это проблема, потому IsolationForest
что нет score
метода. Есть ли способ это исправить? Также есть ли способ найти счет для изоляции леса? Это мой код:
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
Тага
источник
источник
Ответы:
Вам необходимо создать свою собственную функцию оценки, поскольку метод
IsolationForest
не имеетscore
встроенного метода. Вместо этого вы можете использоватьscore_samples
функцию, которая доступна вIsolationForest
(может рассматриваться как прокси дляscore
) и создать свой собственный счетчик, как описано здесь, и передать его вGridSearchCV
. Я изменил ваш код, чтобы сделать это:Надеюсь это поможет!
источник
lambda
?lambda
выражение функцией, как показано выше.Я считаю, что оценка относится к объекту GridSearchCV, а не к IsolationForest.
Если это значение «Нет» (по умолчанию), оно будет пытаться использовать оценку оценщиков, которая, как вы заявляете, не существует. Попробуйте использовать одну из доступных метрик оценки, подходящих для вашей проблемы, в объекте GridSearchCV
источник