سؤال

بدلا من تصنيف العناصر مع درجات من 1 إلى 10 ، أود أن يكون 1 ضد 1 "المعارك".اثنين من العناصر يتم عرضها بجانب بعضها البعض و يمكنك اختيار واحد التي تريد أكثر.وبناء على هذه "المعركة" نتائج خوارزمية حساب التقييم لكل عنصر.

يمكنك أن ترى هذا النهج على Flickchart.com حيث أفلام يتم تصنيفها باستخدام هذا النهج.

يبدو مثل هذا:

Screenshot

كما يمكنك أن ترى العناصر يتم دفع صعودا إذا فازوا "المعركة".الترتيب يتغير دائما على أساس "المعركة" النتائج.ولكن هذا لا يمكن أن يكون إلا على أساس الفوز اقتباس (هنا 54%) وبما أنه من الصعب الفوز ضد "تيتانيك" ضد "25 ساعة" أو نحو ذلك.

وهناك عدد قليل من الأشياء التي هي غير واضحة تماما بالنسبة لي:- كيف يتم التقييم حسابها ؟ كيف يمكنك أن تقرر أي فيلم على المركز الأول في الترتيب ؟ يجب عليك أن تنظر كيف في كثير من الأحيان العناصر انتصارات و كيف الجيدة هي ضرب من البنود.- كيفية اختيار العناصر التي لديها "القتال" ؟

بالطبع لا يمكنك أن تقول لي كيف Flickchart بالضبط هل هذا كل شيء.ولكن ربما يمكنك أن تقول لي كيف يمكن أن يكون القيام به.شكرا مقدما!

هل كانت مفيدة؟

المحلول

قد لا يكون هذا بالضبط ما يفعله Flickchart، ولكن يمكنك استخدام متغير إيلو خوارزمية تستخدم في الشطرنج (وغيرها من الألعاب الرياضية)، لأن هذه هي في الأساس المعارك / الألعاب التي يفوزون / تخسرها.

في الأساس، تبدأ جميع الأفلام مع 0 WINS / الخسائر وفي كل مرة تحصل على فوز يحصلون على قدر معين من النقاط. عادة ما يكون لديك حوالي 20 حوالي 20 (ولكن أي رقم سيفعل) والفوز ضد فيلم بنفس التصنيف حيث سيمنح نفسك بالضبط 20. سيؤدي الفوز ضد فيلم سيء إلى حوالي 10 نقاط، مع الفوز ضد فيلم أفضل قد تعطيك 30 نقطة. في الاتجاه الآخر، تخسر فيلم جيد تفقد 10 نقاط فقط، ولكن إذا فقدت فيلم سيء، فقد تفقد 30 نقطة.

تفاصيل الخوارزمية في رابط ويكيبيديا.

نصائح أخرى

كيف يتم التقييم حسابها ؟ كيف يمكنك أن تقرر أي فيلم على المركز الأول في الترتيب ؟ يجب عليك أن تنظر كيف في كثير من الأحيان العناصر انتصارات و كيف الجيدة هي ضرب من البنود.

ما تريده هو مرجح التصنيف ، كما دعا بايزي تقدير.

أعتقد IMDB Top 250 فيلم هو أفضل نقطة انطلاق إلى جعل ترتيب الموقع.بعض الأفلام قد 300,000+ صوتا بينما آخرون أقل من 50000.IMDB يستخدم بايزي تقدير إلى رتبة أفلام ضد بعضها البعض دون ظلما الترجيح الأفلام شعبية.خوارزمية معينة في أسفل الصفحة:

weighted rating (WR) = (v ÷ (v+m)) × R + (m ÷ (v+m)) × C حيث:

  • R = متوسط فيلم (يعني) = (تصنيف)
  • v = من عدد من الأصوات فيلم = (صوتا)
  • m = الحد الأدنى من الأصوات المطلوب أن تكون في قائمة أفضل 250 (حاليا 3000)
  • ج = يعني التصويت عبر كامل التقرير (حاليا 6.9)

لأفضل 250 فقط من الأصوات العادية الناخبين تعتبر.

أنا لا أعرف كيف IMDB اختار 3000 الحد الأدنى من التصويت.أنها قد اختارت 1000 أو 10000, و قد يكون أكثر أو أقل نفس.ربما أنهم يستخدمون "متوسط عدد من الأصوات بعد 6 أسابيع في شباك التذاكر" أو ربما أنهم يستخدمون التجربة والخطأ.

في أي حال, لا يهم حقا.الصيغة أعلاه إلى حد كبير المعيار تطبيع الأصوات على ترتيب المواقع و أنا على يقين تقريبا Flickrchart يستخدم شيئا من هذا القبيل في الخلفية.

الصيغة يعمل بشكل جيد جدا لأنه "تسحب" التقييم نحو الوسط ، لذلك التقييم فوق المتوسط قليلا انخفض التقييم تحت يعني هي زيادة طفيفة. ومع ذلك, قوة السحب تتناسب عكسيا مع عدد من الأصوات فيلم له.حتى الأفلام مع عدد قليل من الأصوات يتم سحبها بقوة أكبر نحو يعني من الأفلام مع الكثير من الأصوات.هنا نوعان من نقاط البيانات لإثبات الملكية:

Rank  Movie            Votes            Avg Rating        Weighted Rating
----  -----            -----            ----------        ---------------
219   La Strada        15,000+          8.2               8.0
221   Pirates of the   210,000+         8.0               8.0
      Caribbean 2

كل الأفلام التقييم يتم سحبها إلى أسفل ، ولكن سحب على La Strada هو أكثر إثارة لأنه لديه عدد أقل من الأصوات وبالتالي ليست ممثلة كما تصنيفات PotC.


من أجل قضية محددة ، لديك اثنين من العناصر في "المعركة".ربما يجب عليك تصميم الجدول الخاص بك على النحو التالي:

Items
-----
ItemID (pk)
FightsWon (int)
FightsEngaged (int)

متوسط تصنيف FightsWon / FightsEngaged.مرجحة تصنيف حسابها باستخدام المعادلة أعلاه.

عندما يختار المستخدم الفائز في المعركة ، زيادة الفوز البند FightsWon مجال بنسبة 1 ، زيادة العناصر FightsEngaged الميدانية من قبل 1.

ويساعد هذا الأمل!- جولييت

لقد كنت أتعلق بمشكلة الترتيب البنود عن طريق مقارنة الزوجين ببعض الوقت بنفسي، وأردت أن أتخذ الوقت لوصف الأفكار التي توصلت إليها حتى الآن.

الآن أنا ببساطة الفرز <fights won> / <total fights>, ، الاعلى اولا. هذا يعمل بشكل جيد إذا كنت التصويت الوحيد، أو إذا كان هناك الكثير من الناس يصوتون. خلاف ذلك يمكن أن تصبح بسرعة غير دقيقة.

مشكلة واحدة هنا هي كيفية اختيار أي عنصرين يجب أن تقاتل. الشيء الوحيد الذي يبدو أنه يعمل بشكل جيد (ذاتي) هو السماح لهذا البند الذي يحتوي على أقل معارك حتى الآن، ومكافحة عنصر عشوائي. يؤدي ذلك إلى عدد موحد نسبيا من المعارك من أجل البنود (- الدقة)، بتكلفة ربما تكون مملة للناخبين. غالبا ما يقارنون أحدث عنصر ضد شيء آخر، وهو ممل كيندا. لتخفيف ذلك، يمكنك اختيار ن العناصر ذات أدنى عدد من القتال واختارت واحدة من تلك عشوائيا كأول منافسة.

لقد ذكرت أنك تريد أن تصنع انتصارات ضد المعارضين القويين العد أكثر من ضد الضعفاء. كما ذكرنا في الوظائف الأخرى أعلاه، قد تعمل أنظمة التصنيف المستخدمة في الشطرنج وما شابه ذلك (ELO، Glicko). أنا شخصيا أحب استخدام TRESKILL في Microsoft، كما يبدو أنه الأكثر دقة ويوفر أيضا طريقة جيدة لاختيار عنصرين للحفرة ضد بعضهما البعض - تلك التي تحتوي على أعلى الاحتمالات السحب كما تحسبها TrueSkill. لكن للأسف، فهم الرياضيات ليس جيدا بما يكفي لفهم تفاصيل النظام وتنفيذه، وقد يخضع لرؤس الترخيص على أي حال ...

الاختيار الجماعي: أنظمة الترتيب التنافسي لديه نظرة عامة لطيفة عن بعض أنظمة تصنيف مختلفة إذا كنت بحاجة إلى مزيد من المعلومات / الإلهام.

بخلاف أنظمة التصنيف، يمكنك أيضا تجربة مختلف أنظمة سلم بسيطة. مثال واحد:

  1. عشوائي قائمة العناصر، لذلك يتم تصنيفها 1 إلى n
  2. اختيار عنصرين عشوائيا ودعهم يقاتلون
  3. إذا تم تصنيف الفائز فوق الخاسر: لا تفعل شيئا
  4. إذا تم تصنيف الخاسر فوق الفائز:
    • إذا كان الخاسر أعلى مباشرة للفائز: مبادلة
    • آخر: حرك الفائز بالأمر عاشر٪ نحو الخاسر من المعركة.
  5. goto 2

هذا غير مستقر نسبيا في البداية، ولكن يجب أن يتحسن مع مرور الوقت. لا يتوقف أبدا عن التذبذب رغم ذلك.

آمل أن أتمكن من المساعدة على الأقل قليلا.

أما بالنسبة ل Flickchart، لقد كنت ألعب معها قليلا، وأعتقد أن نظام التصنيف غير متطور للغاية. في كود الزائفة، تخميني هو أنه يبدو شيئا مثل هذا:

if rank(loser) == null and rank(winner) == null
    insert loser at position estimated from global rank
    insert winner at position estimated from global rank
else if rank(winner) == null or rank(winner) < rank(loser)
    then advance winner to loser's position and demote loser and all following by 1

لماذا أعتقد هذا؟ أولا، أنا مقتنع تماما بأن باري بايسيا لا يستند إلى تعدين دقيق لخياراتي السابقة. يبدو أنهم ليس لديهم طريقة لتخمين ذلك لأنني أحب عودة جدي لأنني أحب الإمبراطورية تضرب. في الواقع، لا يمكنهم معرفة ذلك بسبب رأيت المنزل وحده 2 ربما رأيته في المنزل وحده 1. بعد مئات التصنيفات، فإن الاختيار لم يأت.

ثانيا من كل شيء، إذا نظرت إلى التعليمات البرمجية أعلاه، فقد تجد علة صغيرة، والتي ستلاحظ بالتأكيد على الموقع. قد تلاحظ أنه في بعض الأحيان ستقوم باختيار الإرادة الفائز الشريحة من قبل واحد. وبعد يبدو أن هذا يحدث فقط عندما لم يضيف الخاسر سابقا. تخميني هو أن ما يحدث هو أن الخاسر يضاف أعلى من الفائز.

بخلاف ذلك، سوف تلاحظ أن التصنيفات لا تتغير على الإطلاق ما لم يدق الفيلم السفلي في المرتبة على فيلم أعلى في المرتبة مباشرة. وبعد لا أعتقد أن أي درجات حقيقية يتم الاحتفاظ بها: يبدو أن الموقع بلا مئزر تماما باستثناء المرتبة الترتيبية لكل فيلم وأحدث تصنيفك.

أو قد ترغب في استخدام البارب لرؤية Pagerank البروفيسور وصف ويلف بارد.

بعد أن اعتقدت أشياء من خلال، أفضل الحل لهذا التصنيف الأفلام هو كما يلي.

البيانات المطلوبة:

  • عدد الأصوات التي اتخذت كل الاقتران للأفلام.
    • وأيضا نسخة مرتبة من هذه البيانات مجمعة كما في راديكس فرز
  • كم مرة تم التصويت لكل فيلم في كل زوج من الأفلام

البيانات الاختيارية:

  • كم مرة شارك كل فيلم في التصويت لكل مستخدم

كيفية تحديد التصويت للمستخدم:

  • اختر اختيار التصويت من القائمة المرتبة في أدنى مجموعة Radix المستخدمة (عشوائيا)
  • اختياري: استخدم إحصائيات التصويت الشخصية للمستخدم لتصفية الأفلام التي طلب منها التصويت في كثير من الأحيان، وربما تتحرك إلى دلاء راديكس أعلى إذا لم يكن هناك شيء مناسب.

كيفية حساب درجة الترتيب لفيلم:

  • بدء النتيجة في 0
  • الذهاب من خلال كل فيلم آخر في النظام
    • يضيف voteswon / votestaken مقابل هذا الفيلم إلى النتيجة
      • إذا لم يتم التقاط أصوات بين هذين الفيلمين، أضف 0.5 بدلا من ذلك (هذا بالطبع يفترض أنك تريد أن تبدأ أفلام جديدة كمعدل في التصنيفات)

ملاحظة: الاشياء الاختيارية موجودة فقط لإيقاف المستخدم الذي يشعر بالملل، ولكن قد يكون مفيدا للإحصاءات الأخرى أيضا، خاصة إذا قمت بتضمين عدد المرات التي صوتوا بها لهذا الفيلم على آخر.

التأكد من أن الأفلام المضافة حديثا لها إحصاءات نولت عليها في اسرع وقت ممكن والتصويت الموزعة بالتساوي في جميع الأفلام الموجودة أمر حيوي لإبقاء الإحصائيات الصحيحة لبقية الأفلام. قد يكون من المستحق إدخال مجموعة من الأفلام الجديدة للنظام لتجنب مواطن الخلل المؤقت في التصنيفات (رغم أنها ليست فورية ولا شديدة).

=== هذا هو الإجابة الأصلية ===

المشكلة هي في الواقع سهلة للغاية. أفترض أن أرغب هنا في الطلب من خلال التفضيل بالتصويت لصالح الفيلم أي الفيلم المرتبة الأولى هو الفيلم الذي من المرجح أن يتم اختياره في التصويت. إذا قمت بإنجاح ذلك، فستكون في كل صوت، فستختار فيلما تماما بشكل عشوائي يمكنك حساب هذا مع الرياضيات البسيطة.

أولا، من المحتمل أن يكون كل مجموعة مختارة من أفلامين للتصويت على قدم المساواة، لذلك يمكن إضافة النتائج من كل تصويت معا من أجل درجة (يحفظ الضرب عن طريق 1 / NC2 على كل شيء). ومن الواضح أن احتمال تصويت شخص يصوت فيلم واحد محدد ضد فيلم محدد آخر هو مجرد votesforthisfilm / numberofvotes.

لذا لحساب النتيجة لفيلم واحد، أنت فقط مبلغ votesforthisfilm / numberofvotes لكل فيلم يمكن مطابقته ضد.

هناك مشكلة صغيرة هنا إذا قمت بإضافة فيلم جديد لم يكن لديه عدد كبير من الأصوات ضد جميع الأفلام الأخرى، لذلك ربما ترغب في تركها من التصنيفات حتى يتم بناء عدد من الأصوات.

=== ما يلي خطأ في الغالب وهو أساسا هنا للسياق التاريخي ===

يتم اشتقاق طريقة التسجيل هذه من سلسلة Markov لنظام التصويت الخاص بك، على افتراض أن جميع أسئلة التصويت الممكنة على الأرجح بنفس القدر. هذه الجملة الأولى خاطئة لأن اتخاذ جميع أسئلة التصويت يجب أن تكون على قدم المساواة في سلسلة Markov للحصول على نتائج ذات مغزى بالطبع، هذا ليس هو الحال، وفي الواقع يمكنك إصلاح هذا أيضا، لأنك تعرف مدى احتمال أن يكون كل سؤال التصويت، فهذا مجرد عدد الأصوات التي تم إجراؤها على هذا السؤال! احتمال الحصول على سؤال تصويت معين غير ذي صلة في الواقع حتى لا يساعد هذا بهذه الطريقة، باستخدام نفس الرسم البياني ولكن مع الحواف المرجحة من قبل الأصوات القيام به ...

احتمال الحصول على كل فيلم بالنظر إلى أنه تم تضمينه في التصويت هو نفس احتمال الحصول على كل فيلم ويجري في التصويت مقسوما على احتمال إدراجه في التصويت. هذا يأتي إلى sumoverallvotes((votesforthisfilm / numberofvotes) * numberofvotes) / totalnumberofvotes مقسوما على sumoverallvotes(numberofvotes) / totalnumberofvotes. وبعد مع الكثير من إلغاء هذا يأتي إلى votesforthisfilmoverallvotes / numberofvotesinvolvingthisfilm. وبعد وهو بسيط حقا!

أعتقد أن هذا النوع من سيناريو 1 مقابل 1 قد يكون نوعا من التحليل الموحد يسمى اختيار منفصل. وبعد أرى هذه في كثير من الأحيان في دراسات استقصائية على الويب لأبحاث السوق. يطلب من العميل بشكل عام الاختيار بين اثنين من مجموعات مختلفة من الميزات التي يفضلونها أكثر. لسوء الحظ، إنه معقد إلى حد ما (لشخص غير إحصاء مثلي)، لذلك قد تواجه صعوبة في فهمه.

أوصي بحرارة الكتاب الذكاء الجماعي البرمجة لجميع أنواع الخوارزميات المثيرة للاهتمام وتحليل البيانات على طول هذه الخطوط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top