سؤال

أحاول إضافة دعم تنعيم لابلاسيان إلى رمز بايز الساذج في Biopython 1 لمشروع المعلومات الحيوية الخاصة بي.

لقد قرأت العديد من المستندات حول خوارزمية بايز الساذجة وتجانس لابلاسيان وأعتقد أنني حصلت على الفكرة الأساسية ، لكنني لا أستطيع دمج هذا مع هذا الرمز (في الواقع لا يمكنني رؤية الجزء الذي سأضيفه رقم 1 -laplacian).

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

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

المحلول

حاول استخدام هذا التعريف _contents() الطريقة بدلاً من ذلك:

def _contents(items, laplace=False):
    # count occurrences of values
    counts = {}
    for item in items:
        counts[item] = counts.get(item,0) + 1.0
    # normalize
    for k in counts:
        if laplace:
            counts[k] += 1.0
            counts[k] /= (len(items)+len(counts))
        else:
            counts[k] /= len(items)
    return counts

ثم قم بتغيير المكالمة Line 194 داخل:

# Estimate P(value|class,dim)
nb.p_conditional[i][j] = _contents(values, True)

استعمال True لتمكين التنعيم ، و False لتعطيلها.

فيما يلي مقارنة بين الإخراج مع/بدون تجانس:

# without
>>> carmodel.p_conditional
[[{'Red': 0.40000000000000002, 'Yellow': 0.59999999999999998},
  {'SUV': 0.59999999999999998, 'Sports': 0.40000000000000002},
  {'Domestic': 0.59999999999999998, 'Imported': 0.40000000000000002}],
 [{'Red': 0.59999999999999998, 'Yellow': 0.40000000000000002},
  {'SUV': 0.20000000000000001, 'Sports': 0.80000000000000004},
  {'Domestic': 0.40000000000000002, 'Imported': 0.59999999999999998}]]

# with
>>> carmodel.p_conditional
[[{'Red': 0.42857142857142855, 'Yellow': 0.5714285714285714},
  {'SUV': 0.5714285714285714, 'Sports': 0.42857142857142855},
  {'Domestic': 0.5714285714285714, 'Imported': 0.42857142857142855}],
 [{'Red': 0.5714285714285714, 'Yellow': 0.42857142857142855},
  {'SUV': 0.2857142857142857, 'Sports': 0.7142857142857143},
  {'Domestic': 0.42857142857142855, 'Imported': 0.5714285714285714}]]

بصرف النظر عن ما سبق ، أعتقد أنه قد يكون هناك خطأ في الكود:

يقسم الكود الحالات وفقًا لفصلها ، ثم لكل فصل ، وإعطاء كل بُعد ، فإنه يحسب عدد المرات التي تظهر فيها كل من قيم البعد هذه.

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

أعتقد أنك بحاجة إلى تتبع جميع القيم الفريدة لكل بُعد (من مجموعة البيانات بأكملها) ، وأخذ ذلك في الاعتبار أثناء عملية العد.

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