English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

استخدام خوارزمية Apriori في بايثون لتحليل الترابط

يُسمى البحث عن العلاقات الخفية بين الأصناف في مجموعة بيانات كبيرة بتحليل الترابط أو تعلم قواعد الترابط. يتكون العملية من خطوتين: 1. استخراج المجموعات المتكررة. 2. استخراج قواعد الترابط من المجموعات المتكررة.

تُعتبر المجموعات المتكررة مجموعات من الأصناف التي تظهر معًا بشكل متكرر.
تُعتبر قواعد الترابط إشارات لتوفر علاقة قوية بين صنفين.
تُعرف دعم مجموعة بأنها نسبة السجلات التي تحتوي على هذه المجموعة في مجموعة البيانات، ويُستخدم لتمثيل تكرار المجموعة. يتم تعريف الدعم على مجموعة.
تُعرف الثقة أو الثقة بأنها موجهة نحو قاعدة ترابط مثل {مواليد -> خمور}. يتم تعريف ثقة هذه القاعدة بأنها "دعم ({مواليد، خمور}) / دعم ({مواليد})".

البحث عن المجموعات المتكررة

مبدأ Apriori: إذا كانت مجموعة ما متكررة، فإن جميع مجموعات الفرعيات الخاصة بها أيضًا متكررة. والعكس صحيح، إذا كانت مجموعة ما غير متكررة، فإن جميع مجموعات الأعلى الخاصة بها أيضًا غير متكررة.

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

عندما يكون عدد العناصر في القائمة أكبر من 0:
    فحص البيانات لتحديد أن كل مجموعة هي متكررة
    تخزين المجموعات المتكررة وإنشاء قائمة بال候ادات المكونة من k+1 عنصر

استخراج قواعد الترابط من المجموعات المتكررة

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

كل مجموعة شائعة:
    while(len(L)>1):
        (قائمة القواعد k)
        التوافق مع الحد الأدنى من الثقة
        إنشاء قواعد k+1

الكود الكلي:

استيراد numpy كـ np
تعريف loadDataSet():
  الرجوع لـ [[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]]
تعريف createC1(dateSet):
  c1 = []
  لجولة في line في dateSet:
    لجولة في item في line:
      إذا لم يكن [item] في c1:
        إضافة [item] إلى c1
  ترتيب c1
  الرجوع لـ list(map(frozenset,c1))
تعريف scanData(data,ck,minSupport):#البحث عن مجموعات عنصرية تفي بحد أدنى من الدعم
  ssCnt = {}
  لجولة في tid في data:
    لجولة في can في ck:
      إذا كان can.issubset(tid):
        إذا كان can ليس في أزمنة ssCnt.keys():
          ssCnt[can] = 0
        ssCnt[can] += 1
  numItems = len(data)
  retList = []
  supportData = {}
  لجولة في أزمنة ssCnt.keys():
    support = ssCnt[key]/numItems
    إذا support >= minSupport:
      إضافة key إلى retList
    supportData[key] = support
  الرجوع لـ retList,supportData
تعريف aprioriGen(Lk,k): #إنشاء مجموعة k من خلال مجموعة k-1
  retList = []
  lenLk = len(Lk)
  لجولة في مجال lenLk
    لجولة في مجال i+1 إلى lenLk
      l1 = list(Lk[i])[:k-2]
      l2 = قائمة(Lk[j])[:k-2]
      ترتيب l1
      ترتيب l2
      إذا كان l1 == l2:
        retList.append(Lk[i] | Lk[j])
  العودة retList
تعريف apriori(dataSet,minSupport = 0.5):#إنشاء مجموعة المشاريع المتكررة
  c1 = createC1(dataSet)
  D = list(map(set,dataSet))
  l1,supportData = scanData(D,c1,minSupport)
  L = [l1]
  k = 2
  بينما (طول(L[k-2])>0):
    ck = aprioriGen(L[k-2],k)
    lk,supk = scanData(D,ck,minSupport)
    k = k + 1
    L.append(lk)
    update(supk)
  العودة L,supportData
تعريف generaterRules(L,supportData,minConf=0.7):#إنشاء قواعد
  bigRuleList = []
  للمتابعة i في نطاق(1,طول(L)):
    للمتابعة freqSet في L[i]:
      H1 = [frozenset([item]) for item in freqSet]
      إذا كان i>1:
        rulesFromConseq(freqSet,H1,supportData,bigRuleList,minConf)
      الآخر:
        calcConf(freqSet,H1,supportData,bigRuleList,minConf)
  العودة bigRuleList
تعريف calcConf(freqSet,H,suppurtData,brl,minConf = 0.7):#حساب القواعد التي تفي بدرجة الثقة
  prunedH = []
  للمتابعة في H:
    conf = suppurtData[freqSet]/suppurtData[freqSet-conseq]
    إذا كان conf > minConf:
      brl.append((freqSet-conseq,conseq,conf))
      prunedH.append(conseq)
  return prunedH
def rulesFromConseq(freqSet,H,supportData,brl,minConf=0.7):#تحليل النصوص لإنشاء القواعد
  m = len(H[0])
  if len(freqSet)>= (m+1):
    Hmp1 = calcConf(freqSet,H,supportData,brl,minConf)
    if (len(Hmp1) > 1):
      Hmp1 = aprioriGen(Hmp1,m+1)
      rulesFromConseq(freqSet,Hmp1,supportData,brl,minConf)
data = [line.split() for line in open('mushroom.dat').readlines()]
L,support = apriori(data,minSupport=0.3)
for i in range(len(L)):
  for item in L[i]:
    if item & {'2'}:
      print(item)

تحميل الكود ومجموعة البيانات:Apriori

هذا هو نهاية محتوى هذا المقال، آمل أن يكون قد ساعد في تعلمكم، وأتمنى أن تشجعوا على دعم تعليمات النطق.

البيان: محتوى هذا المقال تم جمعه من الإنترنت، حقوق النشر مملوكة للمالك الأصلي، المحتوى تم إضافته من قبل مستخدمي الإنترنت بذاتهم، هذا الموقع لا يملك حقوق الملكية، لم يتم تعديل المحتوى بشكل يدوي، ولا يتحمل أي مسؤولية قانونية متعلقة بذلك. إذا وجدت محتوى يشتبه في حقوق النسخ، يرجى إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال '#' بـ '@') لإبلاغنا، وقدم الدليل على ذلك، إذا تم التحقق من ذلك، سيتم حذف المحتوى المزعوم بشكل فوري.

أنت قد تستخدمه