2012-01-06 19 views
22

के साथ सबसे प्रासंगिक परिणाम प्रदान करने के लिए मुझे "प्रासंगिकता" द्वारा आदेशित 2+ कारकों पर भारित क्रम प्रदान करने की आवश्यकता है। हालांकि, कारक पूरी तरह से अलग नहीं हैं, इसमें मैं एक या अधिक कारकों को दूसरों की "तत्कालता" (वजन) को प्रभावित करने के लिए चाहता हूं।एकाधिक फैक्टर भारित सॉर्टिंग

उदाहरण: योगदान सामग्री (लेख) ऊपर/नीचे मतदान किया जा सकता है, और इस प्रकार रेटिंग हो सकती है; उनके पास एक पोस्ट डेट है, और उन्हें श्रेणियों के साथ भी टैग किया गया है। उपयोगकर्ता लेख लिखते हैं और मतदान कर सकते हैं, और हो सकता है कि उनके पास कुछ प्रकार की रैंकिंग हो (विशेषज्ञ, आदि)। शायद StackOverflow के समान, है ना?

मैं टैग के आधार पर वर्गीकृत लेखों की सूची के साथ प्रत्येक उपयोगकर्ता प्रदान करने के लिए चाहते हैं, लेकिन "प्रासंगिकता", जहाँ प्रासंगिकता लेखक की रैंकिंग द्वारा रेटिंग और लेख साल की उम्र के आधार पर गणना की जाती है, और संभवतः प्रभावित अनुसार क्रमबद्ध । अर्थात। कई साल पहले लिखा गया एक उच्च रैंकिंग लेख आवश्यक रूप से कल लिखा गया मध्यम रैंकिंग लेख के रूप में प्रासंगिक नहीं हो सकता है। और शायद अगर एक विशेषज्ञ द्वारा एक लेख लिखा गया था तो इसे "जो श्मो" द्वारा लिखे गए एक से अधिक प्रासंगिक माना जाएगा।

एक और अच्छा उदाहरण assigning hotels a "meta score" comprised of price, rating, and attractions होगा।

मेरा प्रश्न है, एकाधिक कारक सॉर्टिंग के लिए सबसे अच्छा एल्गोरिदम क्या है? यह that question का डुप्लिकेट हो सकता है, लेकिन मुझे किसी भी कारकों के लिए जेनेरिक एल्गोरिदम में दिलचस्पी है (अधिक उचित उम्मीद 2 - 4 कारक है), अधिमानतः एक "पूरी तरह से स्वचालित" फ़ंक्शन जिसे मुझे ट्विक नहीं करना है या उपयोगकर्ता इनपुट की आवश्यकता है, और मैं रैखिक बीजगणित और eigenvector wackiness पार्स नहीं कर सकते हैं।


संभावनाएं मैं अब तक मिल गया है:

नोट: S "छँटाई स्कोर"

  1. "Linearly भारित" है - की तरह एक समारोह का उपयोग करें: S = (w1 * F1) + (w2 * F2) + (w3 * F3), जहां wx मनमाने ढंग से वजन निर्धारित किए जाते हैं, और Fx कारकों के मूल्य हैं। आप F (यानी Fx_n = Fx/Fmax) सामान्य करना चाहते हैं। मुझे लगता है कि यह Lucene search works है।
  2. "बेस-एन भारित" - अधिक भार से समूहीकरण की तरह है, यह सिर्फ एक रेखीय भार जहां वजन आधार -10 (CSS selector specificity लिए एक समान सिद्धांत) के गुणकों में वृद्धि कर रहे है, ताकि और अधिक महत्वपूर्ण कारकों में काफी अधिक हैं: S = 1000 * F1 + 100 * F2 + 10 * F3 ...
  3. अनुमानित सही मूल्य (ईटीवी) - यह जाहिरा तौर पर क्या Google Analytics introduced in their reporting है, जहां एक कारक प्रभावित करती है (वजन) एक और पहलू का मूल्य - परिणाम और अधिक "सांख्यिकीय महत्वपूर्ण" मूल्यों पर सॉर्ट करने के लिए किया जा रहा है। लिंक इसे बहुत अच्छी तरह से समझाता है, इसलिए यहां समीकरण है: S = (F2/F2_max * F1) + ((1 - (F2/F2_max)) * F1_avg), जहां F1 लेख में "अधिक महत्वपूर्ण" कारक ("बाउंस दर") है, और F2 लेख में "महत्व संशोधन" कारक ("विज़िट" है)।
  4. बेयसियन अनुमान - वास्तव में ईटीवी के समान दिखता है, इस प्रकार आईएमडीबी उनकी रेटिंग की गणना करता है। this StackOverflow post for explanation देखें; समीकरण: S = (F2/(F2+F2_lim)) * F1 + (F2_lim/(F2+F2_lim)) × F1_avg, जहां Fx # 3 के समान हैं, और F2_lim "महत्व" कारक के लिए न्यूनतम दहलीज सीमा है (यानी एक्स से कम कोई मान नहीं माना जाना चाहिए)।

विकल्प # 3 या # 4 वास्तव में आशाजनक दिखते हैं, क्योंकि आपको वास्तव में एक मनमाने ढंग से वज़न योजना नहीं चुननी है जैसे आप # 1 और # 2 में करते हैं, लेकिन समस्या यह है कि आप इसे और अधिक के लिए कैसे करते हैं दो कारकों से अधिक?

मैं भी SQL implementation for a two-factor weighting algorithm पर आया, जो मूल रूप से मुझे अंततः लिखने की आवश्यकता होगी।

+0

सिर्फ स्पष्टता के लिए, आप किस कारक को अपने उदाहरण में अन्य कारकों के वजन को बदल देंगे? क्या उनमें से एक दूसरों के मुकाबले ज्यादा महत्वपूर्ण है, या क्या आप मैन्युअल रूप से वजन स्थापित करने से बचना चाहते हैं? – gankoji

+1

@gankoji मैं ईमानदारी से याद नहीं करता (2+ साल पहले); मैं शायद मैन्युअल रूप से वजन स्थापित करने से बचना चाहता था, क्योंकि किसी भी समय हमने महत्व के बारे में अपना मन बदल दिया था, हमें कोड को तैनात करना होगा, साथ ही सही जगहों को सही जगह पर लेना होगा। – drzaus

+3

क्षमा करें मुझे एहसास हुआ कि यह टिप्पणी के बाद 2 साल पुरानी पोस्ट थी। मैं सुझाव देने जा रहा था कि आप ऑप्टिमाइज़ेशन लिंगो में 'समझौता समाधान' कहलाते हैं। असल में, आप अपने समाधान स्थान (उच्चतम रैंक पोस्टर, नवीनतम तिथि इत्यादि) में पूर्ण आदर्श 'बिंदु' चुनते हैं और फिर उस बिंदु से यूक्लिडियन दूरी के विपरीत आपका स्कोर होगा। यानी एस = 1/(वर्ग ((रैंक - रैंक_डाइडल)^2 + (आयु - आयु_ideal)^2 ... (xn - xn_ideal)^2); वैसे भी, आशा है कि आपको यह पता चला है। – gankoji

उत्तर

0

वजन की श्रृंखला पर विचार करें। जैसे आपके पास 3 कारक हैं: एक्स, वाई और जेड। आप प्रत्येक रिकॉर्ड के लिए ETVyzW = (Z/Zmax * Y) + (1 - Z/Zmax) * Yavg के रूप में गणना कर सकते हैं और फिर ETVxwS = (W/Wmax * X) + (1 - W/Wmax) * Xavg के रूप में गणना कर सकते हैं। आप सिमिलरी के अधिक कारकों को चेन कर सकते हैं।

+2

अधिक आसानी से मिलेगा लेकिन आप ** ETVxw ** के लिए फ़ंक्शन में 'W' ('W' बनाम' Wmax') को सामान्य नहीं कर सकते हैं, क्योंकि यह पहले से ही है आंतरिक रूप से सामान्यीकृत कारकों का परिणाम – drzaus

4

जैसा कि टिप्पणियों में बताया गया है, मैं सुझाव दूंगा कि किसी भी समस्या के साथ किसी भी व्यक्ति को 'समझौता समाधान' कहा जाता है, जो कि एक मानदंड को दूसरों के मुकाबले ज्यादा भारित करने के बजाय वजन निर्धारित करने के लिए अधिक चिंतित नहीं है।

असल में, आप अपने प्रत्येक मानदंड को समन्वय के रूप में मानते हैं (सामान्य रूप से, सामान्य रूप से)। आपके फैसले के आधार पर, आप पूर्ण इष्टतम बिंदु चुनते हैं, उदा। इस मामले में, उच्चतम रैंक लेखक, नवीनतम लेख इत्यादि। एक बार जब आप इष्टतम समाधान चुनते हैं, तो एक दूसरे का 'समाधान' उस इष्टतम से इसकी दूरी के आधार पर मूल्यांकन किया जाता है। एक नमूना सूत्र प्रत्येक लेख के स्कोर के लिए यूक्लिडियन दूरी के विपरीत होगा: एस = 1/(वर्ग ((रैंक - रैंक_डाइडल)^2 + (आयु - आयु_ideal)^2 + ... + (xn - xn_ideal)^2))।

यह सभी मानदंडों को बराबर मानता है, इसलिए इसे ध्यान में रखें।

+0

यह शून्य से एक विभाजन नहीं होगा यदि यह सटीक उसी मैच को हिट करता है? – Gokigooooks

+0

हां, यदि आपके पास एक गैर-अद्वितीय सेट है, तो शून्य से विभाजन संभव है। कोड में संभाल करने के लिए यह छोटा है (गणना करें पहले विभाजक, "छोटीपन" की जांच करें, यदि आवश्यक हो तो त्रुटि/फेंक दें)। उन्होंने कहा, इस उपयोग के मामले में, गैर विशिष्टता ए) को बाधा के रूप में नहीं बताया गया था और बी) डेटासेट के प्रकार को देखते हुए असंभव लगता है, आयामों की संख्या। – gankoji

+0

आपको परेशान करने के लिए खेद है सर, लेकिन मेरे पास एक और सवाल है! क्या होगा यदि प्रत्येक मानदंड के मानों में मानदंड # 1 से 1-30 से लेकर बहुत अंतर होता है और मानदंड # 2 1000+ पर है? वजन # 2 मानदंडों से भारी रूप से खींचा जाएगा? मैं इसे कैसे सामान्य कर सकता हूं? – Gokigooooks

संबंधित मुद्दे