आउटलाइयर खोजने के लिए आइसोलेशनफोरेस्ट के साथ ग्रिडसर्च सीवी का उपयोग करना


10

मैं 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)

स्कोर के लिए आपकी पसंद क्या होगी ? शुद्धता? एमएसई? इसके अलावा, कृपया रिपोर्ट की गई त्रुटि के बाद आने वाले सभी कोड को हटा दें (यह कभी निष्पादित नहीं होता है, इसलिए प्रश्न के लिए अप्रासंगिक है - यह सिर्फ अनावश्यक अव्यवस्था पैदा करता है)।
०५ पर डेजर्टनॉट

मैं चाहता हूँ सटीकता स्कोर, मैं कोड के लिए सवाल अप्रासंगिक को हटा दिया है
Taga

जवाबों:


9

आपको अपना स्वयं का स्कोरिंग फ़ंक्शन बनाने की आवश्यकता है क्योंकि IsolationForestइसमें scoreइनबिल्ट विधि नहीं है । इसके बजाय आप का उपयोग कर सकते score_samplesसमारोह है कि में उपलब्ध है IsolationForest(के लिए एक प्रॉक्सी के रूप में माना जा सकता है score) और के रूप में वर्णित अपनी खुद की गणक बनाने यहाँ और यह करने के लिए पारित GridSearchCV। मैंने ऐसा करने के लिए आपके कोड को संशोधित कर दिया है:

import pandas as pd
import numpy as np
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], 'max_samples':['auto'],
     'contamination':['legacy'], 'max_features':[1],
     'bootstrap':[True], 'n_jobs':[None,1,2], 'behaviour':['old'],
     'random_state':[None,1,], 'verbose':[0,1,2], 'warm_start':[True]}  

def scorer_f(estimator, X):   #your own scorer
      return np.mean(estimator.score_samples(X))

#or you could use a lambda aexpression as shown below
#scorer = lambda est, data: np.mean(est.score_samples(data)) 

isolation_forest = GridSearchCV(IsolationForest(), tuned, scoring=scorer_f)
model = isolation_forest.fit(x)

नमूना बाहर

print(model.best_params_)

{'behaviour': 'old',
 'bootstrap': True,
 'contamination': 'legacy',
 'max_features': 1,
 'max_samples': 'auto',
 'n_estimators': 70,
 'n_jobs': None,
 'random_state': None,
 'verbose': 1,
 'warm_start': True}

उम्मीद है की यह मदद करेगा!


और क्या इसके बिना ऐसा करने का कोई तरीका है lambda?
तागा

आप lambdaएक फ़ंक्शन के साथ अभिव्यक्ति को बदल सकते हैं जैसा कि ऊपर दिखाया गया है।
पार्थसारथी सुब्बुराज

धन्यवाद मेरे दोस्त, क्या आप कृपया इस सवाल में मेरी मदद कर सकते हैं? stackoverflow.com/questions/58214457/...
Taga

-1

मेरा मानना ​​है कि स्कोरिंग GridSearchCV ऑब्जेक्ट का उल्लेख कर रहा है, न कि आइसोलेशन फ़ोरेस्ट का।

यदि यह "कोई नहीं" (डिफ़ॉल्ट) है, तो यह स्कोरिंग स्कोरिंग का उपयोग करने की कोशिश करेगा, जो कि आपके पास मौजूद नहीं है। GridSearchCV ऑब्जेक्ट के भीतर आपकी समस्या के लिए उपयुक्त उपलब्ध स्कोरिंग मीट्रिक में से एक का उपयोग करने का प्रयास करें


क्या आप यह दिखाते हुए कोड पोस्ट कर सकते हैं? आपके वर्तमान समाधान में यह नहीं है
ConorL

समस्या मुझे लगता है कि है कि अलगाव वन के चलते किसी है, इसलिए वहाँ y_true डाल करने के लिए कोई रास्ता नहीं है और y_pred है
Taga
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.