বহিরাগতদের সন্ধানের জন্য আইসোলেশনফোরস্টের সাথে গ্রিড অনুসন্ধানসিভি ব্যবহার করা


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)

একটি স্কোর জন্য আপনার পছন্দ কি হবে ? সঠিকতা? MSE? এছাড়াও, দয়া করে রিপোর্ট করা ত্রুটির পরে উপস্থিত সমস্ত কোড সরিয়ে ফেলুন (এটি কখনই কার্যকর করা হয় না, সুতরাং প্রশ্নের সাথে অপ্রাসঙ্গিক - এটি কেবল অপ্রয়োজনীয় বিশৃঙ্খলা সৃষ্টি করে)।
মরুভূমি থেকে

আমি চাই সঠিকতা স্কোর, আমি কোডে প্রশ্ন অপ্রাসঙ্গিক সরিয়ে দিয়েছি
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/…
ট্যাগ

-1

আমি বিশ্বাস করি যে স্কোরিংটি গ্রিডসার্কসিভি অবজেক্টকে উল্লেখ করছে, আইসোলেশনফোরস্টকে নয়।

যদি এটি "কিছুই নয়" (ডিফল্ট) হয় তবে এটি অনুমানকারীদের স্কোরিং ব্যবহার করার চেষ্টা করবে, যা আপনি বলেছিলেন যে বিদ্যমান নেই। গ্রিডসন্ধান সিভি অবজেক্টের মধ্যে আপনার সমস্যার জন্য উপযুক্ত একটি উপলভ্য স্কোরিং মেট্রিক ব্যবহার করার চেষ্টা করুন


আপনি কি কোড দেখাচ্ছে পোস্ট করতে পারেন? আপনার বর্তমান সমাধানটিতে এটি নেই
ConorL

সমস্যা আমি মনে করি যে বিচ্ছিন্নতা বন তত্ত্বাবধান ছাড়াই, তাই সেখানে y_true করা কোন উপায় এবং y_pred হয়
taga
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.