Quiero usar IsolationForestpara 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 IsolationForestno tiene scoremé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
IsolationForestque no tiene unscoremétodo incorporado. En su lugar, puede hacer uso de lascore_samplesfunció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?lambdaexpresió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