एक क्लासिफायर के लिए आरओसी वक्र की गणना करने के लिए कुशल एल्गोरिथ्म जिसमें असंतुष्ट सहपाठियों का एक समूह शामिल है


13

मान लीजिए कि मेरे पास क्लासिफायर सी 1 है ... C_n इस मायने में असहमति जताता है कि कोई भी एक ही इनपुट पर सही नहीं लौटेगा (जैसे कि डिसीजन ट्री में नोड्स)। मैं एक नए क्लासिफायर का निर्माण करना चाहता हूं जो कि इनमें से कुछ सबसेट का मिलन है (जैसे मैं यह निर्णय लेना चाहता हूं कि सकारात्मक वर्गीकरण देने के लिए निर्णय वृक्ष की कौन सी पत्तियां)। बेशक, ऐसा करने में संवेदनशीलता और सकारात्मक भविष्य कहनेवाला मूल्य के बीच एक व्यापार बंद हो जाएगा। इसलिए मैं एक आरओसी वक्र देखना चाहूंगा। सिद्धांत रूप में मैं क्लासिफायर के सभी सबसेट को समाहित करके और परिणामी संवेदनशीलता और पीपीवी की गणना करके ऐसा कर सकता था। हालाँकि, यह निषेधात्मक रूप से महंगा है यदि n 30 या उससे अधिक है। दूसरी ओर, लगभग निश्चित रूप से कुछ संयोजन हैं जो परेतो इष्टतम नहीं हैं, इसलिए कुछ शाखा और बाध्य रणनीति, या कुछ और हो सकती है,

मैं इस बारे में सलाह लेना चाहूंगा कि क्या यह दृष्टिकोण फलदायी होने की संभावना है और क्या कोई काम है या यदि आपके पास उपरोक्त स्थिति में आरओसी वक्र की कुशलता से गणना करने के बारे में कोई विचार है।


क्या आप प्रत्येक इनपुट मामले को सही या गलत होने के लिए वर्गीकृत कर रहे हैं?
image_doctor 7


मैं "इस पर स्पष्ट नहीं हूँ," ... इस मायने में असहमति है कि कोई भी एक ही इनपुट पर सच नहीं लौटेगा ... "और आप बाइनरी आउटपुट में वर्गीकृत कर रहे हैं, आप अपने दो से अधिक क्लासिफायर कैसे कर सकते हैं पहनावा, मुझे शायद कुछ याद आ रहा है?
छवि_दोपहर

@image_doctor: आप सोच रहे होंगे कि मैं कह रहा हूं कि कोई भी दो क्लासिफायर एक ही इनपुट पर एक ही आउटपुट नहीं देता है। मैं कह रहा हूं कि कोई भी दो सच नहीं होगा। वे दोनों झूठे लौट सकते हैं।
जोश ब्राउन क्रेमर

1
हो सकता है कि यह पेपर सैद्धांतिक रूप से इष्टतम तरीके पर आरओसी (या इसका हवाला देने वाले कागजात) के लिए क्लासिफायर के संयोजन के लिए आपको कला की स्थिति को समझने में मदद कर सकता है: एम। बेरेनो, ए। कर्डेनस, जेडी टायगर, क्लासिफ़ के संयोजन के लिए इष्टतम आरओसी वक्र। तंत्रिका सूचना प्रसंस्करण प्रणाली, 2008 में अग्रिम।
वैलेंटाइन

जवाबों:


1

यदि मैंने प्रश्न को सही ढंग से समझा है, तो आपने एक एल्गोरिथ्म को प्रशिक्षित किया है जो आपके डेटा को डिसऑर्डर क्लस्टर में विभाजित करता है । अब आप समूहों के कुछ सबसेट के लिए , और बाकी के को भविष्यवाणी असाइन करना चाहते हैं। और उन सबमेट्स के बीच में, आप पेरेटो-इष्टतम वाले को ढूंढना चाहते हैं, अर्थात जो लोग सकारात्मक सकारात्मक दर देते हैं जो निश्चित संख्या में सकारात्मक भविष्यवाणियां करते हैं (यह पीपीवी को ठीक करने के बराबर है)। क्या यह सही है?N10

यह बहुत समस्या की तरह लग रहा है ! क्लस्टर आकार "वेट" हैं और एक क्लस्टर में सकारात्मक नमूनों की संख्या "मान" हैं, और आप अपनी क्षमता के अनुसार निश्चित क्षमता के अपने बक्स को भरना चाहते हैं।

सटीक समाधान खोजने के लिए नैकपैक समस्या में कई अल्गोरिम्स हैं (जैसे गतिशील प्रोग्रामिंग द्वारा)। लेकिन एक उपयोगी लालची समाधान अपने समूहों को (यानी, सकारात्मक नमूनों का हिस्सा) के घटते क्रम में क्रमबद्ध करना है , और पहले । यदि आप से तक लेते हैं , तो आप अपने ROC वक्र को बहुत सस्ते में स्केच कर सकते हैं। kk0Nvalueweightkk0N

और अगर आप आवंटित करता है, तो पहले को समूहों और यादृच्छिक अंश के लिए में नमूने के वें क्लस्टर, आप करने के ऊपरी बाध्य नेप्सेक समस्या है। इसके साथ, आप अपने आरओसी वक्र के लिए ऊपरी सीमा खींच सकते हैं।के - 1 पी [ 0 , 1 ] के1k1p[0,1]k

यहाँ एक अजगर उदाहरण दिया गया है:

import numpy as np
from itertools import combinations, chain
import matplotlib.pyplot as plt
np.random.seed(1)
n_obs = 1000
n = 10

# generate clusters as indices of tree leaves
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_predict
X, target = make_classification(n_samples=n_obs)
raw_clusters = DecisionTreeClassifier(max_leaf_nodes=n).fit(X, target).apply(X)
recoding = {x:i for i, x in enumerate(np.unique(raw_clusters))}
clusters = np.array([recoding[x] for x in raw_clusters])

def powerset(xs):
    """ Get set of all subsets """
    return chain.from_iterable(combinations(xs,n) for n in range(len(xs)+1))

def subset_to_metrics(subset, clusters, target):
    """ Calculate TPR and FPR for a subset of clusters """
    prediction = np.zeros(n_obs)
    prediction[np.isin(clusters, subset)] = 1
    tpr = sum(target*prediction) / sum(target) if sum(target) > 0 else 1
    fpr = sum((1-target)*prediction) / sum(1-target) if sum(1-target) > 0 else 1
    return fpr, tpr

# evaluate all subsets
all_tpr = []
all_fpr = []
for subset in powerset(range(n)):
    tpr, fpr = subset_to_metrics(subset, clusters, target)
    all_tpr.append(tpr)
    all_fpr.append(fpr)

# evaluate only the upper bound, using knapsack greedy solution
ratios = [target[clusters==i].mean() for i in range(n)]
order = np.argsort(ratios)[::-1]
new_tpr = []
new_fpr = []
for i in range(n):
    subset = order[0:(i+1)]
    tpr, fpr = subset_to_metrics(subset, clusters, target)
    new_tpr.append(tpr)
    new_fpr.append(fpr)

plt.figure(figsize=(5,5))
plt.scatter(all_tpr, all_fpr, s=3)
plt.plot(new_tpr, new_fpr, c='red', lw=1)
plt.xlabel('TPR')
plt.ylabel('FPR')
plt.title('All and Pareto-optimal subsets')
plt.show();

यह कोड आपके लिए एक अच्छी तस्वीर खींचेगा:

TPR, FPR और इष्टतम वक्र

नीले डॉट्स सभी सबसेट के लिए (एफपीआर, टीपीआर) ट्यूपल्स हैं और पेरेटो-इष्टतम सबसेट के लिए रेड लाइन कनेक्ट (एफपीआर, टीपीआर) हैं।210

और अब नमक का थोड़ा सा: आपको सबसेट के बारे में परेशान करने की ज़रूरत नहीं है ! मैंने जो किया वह प्रत्येक में सकारात्मक नमूनों के अंश द्वारा पेड़ की पत्तियों को छांटा गया। लेकिन मुझे जो मिला वह पेड़ की संभाव्य भविष्यवाणी के लिए आरओसी वक्र है। इसका मतलब है, आप प्रशिक्षण सेट में लक्ष्य आवृत्तियों के आधार पर इसके पत्तों को हाथ से उठाकर पेड़ से बाहर नहीं निकल सकते।

आप आराम कर सकते हैं और साधारण संभाव्य भविष्यवाणी का उपयोग कर सकते हैं :)


महान विचार। सिद्धांत रूप में "सकारात्मक कॉल" के कई संभावित संख्या में अभी भी हो सकता है, लेकिन व्यवहार में यह संभवतः एक समस्या नहीं है।
वैलेंटाइन

कॉल की घातीय संख्या क्यों? मैं प्रत्येक क्लस्टर के लिए मूल्य / वजन की गणना करता हूं (रैखिक समय लेता है), उन्हें (एन * लॉग (एन)) क्रमबद्ध करें, और प्रत्येक पहले के समूहों के लिए टीपीआर और एफपीआर का मूल्यांकन करें (इसे भी रैखिक बनाया जा सकता है)।
डेविड डेल

आप सकारात्मक भविष्यवाणियों के प्रत्येक संभावित मूल्य के लिए नैकसेप को हल करते हैं, और सबसेट की एक घातीय संख्या है। लेकिन यह एक सैद्धांतिक तकनीकीता है यदि आप विशेष रूप से उत्तल पतवार के अंदर के बिंदुओं के लिए पूछते हैं, जो दिलचस्प नहीं है - यह स्वीकृत उत्तर होना चाहिए।
वैलेंटाइन्स

@Valentas, ठीक है, मैं आपकी बात देखता हूं। लेकिन फिर भी, यदि आप कुछ पत्तियों में यादृच्छिक भविष्यवाणी देते हैं, तो आप उत्तल पतवार के किसी भी बिंदु पर पहुंच सकते हैं। तो इस मामले में पतवार ही आरओसी है।
डेविड डेल

@DavidDale, सारांशित करने के लिए: 1) प्रत्येक रणनीति जो (संवेदनशीलता, पीपीवी) के संबंध में अधिकतम है, वह सकारात्मक भविष्यवाणियों की संख्या के साथ रणनीतियों के बीच वास्तविक सकारात्मकता की संख्या को अधिकतम करती है। 2) यह समस्या है। 3) पॉजिटिव उदाहरणों की संख्या / उदाहरणों की संख्या के आधार पर नोड्स को चुनना नैकपैक समस्या का एक अच्छा अनुमानित समाधान माना जाता है। 4) लेकिन यह संभावनाओं पर एक सीमा लेने के समान है।
जोश ब्राउन क्रेमर

0

मेरा सुझाव है कि आप एक लालची तरीकों का उपयोग कर सकते हैं। शुरू करने के लिए एक क्लासिफायरियर दें, आप उस क्लासिफायर को शामिल करेंगे जो पहनावा को बेहतरीन प्रदर्शन में सुधार लाए। यदि कोई सुधार अधिक क्लासिफायरियर शामिल करने के माध्यम से नहीं मिल सकता है, तो रुकें। आप हर क्लासिफायर के साथ शुरुआत करेंगे। जटिलता सबसे अधिक एन * एन पर होगी।

मेरे पास एक और सवाल है, "पेरेटो इष्टतम" से आपका क्या मतलब है, खासकर आपके संदर्भ में? मुझे यह स्पष्टीकरण विकी से मिला, https://en.wikipedia.org/wiki/Pareto_efficiency

वास्तविककरण के माध्यम से, किसी अन्य प्रतिभागी की भलाई को कम किए बिना, कम से कम एक प्रतिभागी की भलाई में सुधार किया जा सकता है।

पारेटो दक्षता के लिए सुधार प्रत्येक प्रतिभागी के लिए है, जो प्रत्येक वर्गीकरण के अनुरूप हो सकता है। आप एक से अधिक वर्गीकरण को कैसे परिभाषित करते हैं?


1
मेरा मतलब यह है: यदि मेरे पास 1 और 2 हैं, (संवेदनशीलता, सकारात्मक भविष्य कहनेवाला मूल्य) = (.90, .80) और (.97, .93) क्रमशः, तो 1 पारेटो इष्टतम नहीं है, क्योंकि वहाँ। एक और पहनावा, अर्थात् 2, जो इसे हर तरह से धड़कता है। आपके प्रस्तावित एल्गोरिदम के बारे में: संवेदनशीलता और पीपीवी के बीच एक व्यापार है, इसलिए "कलाकारों की टुकड़ी को सबसे अच्छा प्रदर्शन सुधार मिलता है" अच्छी तरह से परिभाषित नहीं है।
जोश ब्राउन क्रेमर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.