Quiero usar IsolationForest
para encontrar valores atípicos. Quiero encontrar los mejores parámetros para el modelo con GridSearchCV
. El problema es que siempre recibo el mismo error:
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.
Parece que es un problema porque IsolationForest
no tiene score
método. ¿Hay alguna manera de arreglar esto? ¿También hay una manera de encontrar una puntuación para el bosque de aislamiento? Este es mi código:
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
fuente
fuente
Respuestas:
Necesita crear su propia función de puntuación ya
IsolationForest
que no tiene unscore
método incorporado. En su lugar, puede hacer uso de lascore_samples
función que está disponible enIsolationForest
(puede considerarse como un proxy parascore
) y crear su propio anotador como se describe aquí y pasarlo alGridSearchCV
. He modificado tu código para hacer esto:¡Espero que esto ayude!
fuente
lambda
?lambda
expresión con una función como se muestra arriba.Creo que la puntuación se refiere al objeto GridSearchCV, y no al IsolationForest.
Si es "Ninguno" (predeterminado) intentará utilizar la puntuación de los estimadores, que como usted dice no existe. Intente utilizar una de las métricas de puntuación disponibles adecuadas para su problema dentro del objeto GridSearchCV
fuente