Saya ingin menggunakan IsolationForest
untuk mencari outlier. Saya ingin mencari parameter terbaik untuk model GridSearchCV
. Masalahnya adalah saya selalu mendapatkan kesalahan yang sama:
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.
Sepertinya ini masalah karena IsolationForest
tidak punya score
metode. Apakah ada cara untuk memperbaikinya? Juga adakah cara untuk menemukan skor untuk hutan isolasi? Ini kode saya:
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
sumber
sumber
Jawaban:
Anda perlu membuat fungsi penilaian sendiri karena
IsolationForest
tidak memilikiscore
metode inbuilt. Alih-alih, Anda dapat menggunakanscore_samples
fungsi yang tersedia diIsolationForest
(dapat dianggap sebagai proxy untukscore
) dan membuat skor Anda sendiri seperti yang dijelaskan di sini dan meneruskannya keGridSearchCV
. Saya telah memodifikasi kode Anda untuk melakukan ini:Semoga ini membantu!
sumber
lambda
?lambda
ekspresi dengan fungsi seperti yang ditunjukkan di atas.Saya percaya penilaian mengacu pada objek GridSearchCV, dan bukan IsolationForest.
Jika "Tidak Ada" (default) akan mencoba menggunakan penaksir penilaian, yang seperti yang Anda nyatakan tidak ada. Coba gunakan salah satu metrik penilaian yang tersedia yang sesuai dengan masalah Anda dalam objek GridSearchCV
sumber