با افزایش سیستمهای کامپیوتر و گسترش تکنولوژی اطلاعات , بحث اصلی در علم کامپیوتر از چگونگی جمع آوری اطلاعات به نحوه استفاده از اطلاعات منتقل شده است .
سیستمهای داده کاوی ,این امکان را به کاربر می دهند که بتواند انبوه داده های جمع آوری شده را تفسیر کنند و دانش نهفته در آن را استخراج نمایند .
داده کاوی به هر نوع کشف دانش و یا الگوی پنهان در پایگاه داده ها اطلاق می شود .
امروزه داده کاوی به عنوان یکی از مهمترین مسائل هوش مصنوعی و پایگاه داده ، محققان بسیاری را به خود جذب کرده است .
در این تحقیق ابتدا نگاه کلی بر داده کاوی ، استراتژیهای داده کاوی و...
داریم ، سپس مسأله کشف قوانین وابستگی در پایگاه داده را به تفضیل بررسی کردیم و نگاهی به الگوریتمهای موجود برای آن داشتیم .
سپس مسأله کشف قوانین وابستگی در پایگاه داده های پویا را مورد بحث قرار دادیم و الگوریتم های ارائه شده مربوطه را مطرح کردیم .
هدف از این اراِئه و تحقیق بررسی روشهای مطرح داده کاوی است .داده کاوی هر نوع استخراج دانش و یا الگواز داده های موجود در پایگاه داده است که این دانشها و الگوها ضمنی و مستتر در داده ها هستند ,از داده کاوی می توان جهت امور رده بندی (Classification ) و تخمین (Estimation) ,پیش بینی (Prediction) و خوشه بندی (Clustering)استفاده کرد .داده کاوی دارای محاسن فراوانی است .
از مهمترین آن محاسن کشف کردن دانش نهفته در سیستم است که به شناخت بهتر سیستم کمک می کند .به عنوان مثال می توان به استفاده ترکیبی از روش خوشه بندی جهت تخصیص بودجه به دسته های مختلف از کتب اشاره کرد .
سیستمهای داده کاوی تقریبا از اوایل دهه 1990 مورد توجه قرار گرفتند .
علت این امر نیز آن بود که تا آن زمان سازمانها بیشتر در پی ایجاد سیستمهای عملیاتی کامپیوتری بودند که به وسیله آنها بتوانند داده های موجود در سازمان خود را سازماندهی کنند .
پس از ایجاد این سیستمها ,روزانه حجم زیادی از اطلاعات جمع آوری میشد که تفسیر کردن آنها از عهده انسان خارج بود .
به همین دلیل , نیاز به تکنیکی بود که از میان انبوه داده معنی استخراج کند و داده کاوی به همین منظور ایجاد و رشد یافت .
بنابر این هدف اصلی از داده کاوی ,کشف دانش نهفته در محیط مورد بررسی است که این دانش می تواند شکلهای گوناگونی داسته باشد .
دانش استخراج شده می تواند به فرم الگوهای موجود در داده ها باشد که کشف این الگوها منجر به شناخت بهتر سیستم نیز می شود .
الگوهای استخراجی عموما بیانگر روابط بین ویژگیهای سیستم هستند بعنوان مثال در سیستم تجاری یک الگو می تواند بیانگر رابطه بین نوع کالا و میزان تقاضای آن باشد .
در این تحقیق داده کاوی مورد بحث قرار می گیرد .
علل استفاده از داده کاوی و منابعی که داده کاوی بر روی آنها اعمال می شود ,علاوه بر این خلاصه ای از روشهای رایج داده کاوی ارائه شده است .
تکنیکهای داده کاوی و قوانین وابستگی و الگوریتمهای موجود (Apriori , Aprior TID, Partition, Eclat ,Max Eclat , Vector ) و الگوریتم با ساختار Trie وfp grow و الگوریتمهای کاهشی مورد بررسی قرار می گیرند و در هر مورد مثالها , موارد کاربرد ,تکنیکها و نقاط قوت و ضعف مورد بررسی قرار گرفته اند .
داده کاوی فرآیند بکارگیری یک یا چند تکنیک آموزش کامپیوتر، برای تحلیل و استخراج داده های یک پایگاه داده می باشد.در واقع هدف داده کاوی یافتن الگوهایی در داده هاست.
دانش کسب شده از فرآیند داده کاوی بصورت مدل یا تعمیمی از داده ها نشان داده می شود.
چندین روش داده کاوی وجود دارد با این وجود همه روشها “ آموزش بر مبنای استنتاج “ را بکار می برند.
آموزش بر مبنای استنتاج، فرآیند شکل گیری تعاریف مفهوم عمومی از طریق مشاهده مثالهای خاص از مفاهیمی که آموزش داده شده اند، است.
مثال زیر نمونه ای از دانش بدست امده از طریق فرایند اموزش بر مبنای استنتاج است:
آیا تا کنون فکر کرده اید، فروشگاههای بزرگ اینترنتی در mail های خود به مشتریان از چه تبلیغاتی استفاده می کنند؟
و آیا این تبلیغات برای همه مشتریان یکسان است؟
پاسخ این است که از روی دانش کسب شده از اطلاعات خرید افراد و نتیجه گیری از این دانش، این کار را انجام می دهند.مثلا در نظر بگیرید یک قانون در پایگاه داده بصورت زیر استخراج می شود:
دقت = 80% : سیگار می خرند ^ نان می خرند کسانی که شیر می خرند
از روی این قانون فروشگاه می تواند به تمام کسانی که شیر می خرند تبلیغات سیگار و انواع نان را نیز بفرستد.همچنین این قانون در چیدن قفسه های فروشگاه نیز بی تاثیر نخواهد بود.
{شیر و نان و سیگار در قفسه های کنار هم چیده شوند}
کشف دانش در پایگاه داده 1
KDD یا کشف دانش در پایگاه داده اصطلاحی است که مکررا بجای داده کاوی بکار می رود.
از نظر تکنیکی، KDD کاربردی از روشهای علمی داده کاوی است.
بعلاوه برای انجام داده کاوی فرایند KDD شامل :
1- یک روش برای تهیه داده ها و استخراج داده ها ،
2- تصمیم گیری درباره عملی که پس از داده کاوی باید انجام شود ، می باشد.
آیا داده کاوی برای حل مسائل ما مناسب است؟
تصمیم گیری در مورد اینکه آیا داده کاوی را به عنوان استراتژی حل مساله بکار ببریم یا نه، یک مساله دشوار است.
اما به عنوان نقطه شروع چهار سؤال عمومی را باید در نظر بگیریم :
1.
آیا به وضوح می توانیم مساله را تعریف کنیم ؟
2.
آیا بطور بالقوه داده با معنی وجود دارد ؟
3.
آیا داده ها شامل “ دانش پنهان” هستند یا فقط برای هدف گزارشگری مناسبند ؟
4.
آیا هزینه پردازش داده (برای داده کاوی) کمتر از سود حاصل از دانش پنهان بدست آمده از پروژه داده کاوی است ؟
یک مدل پردازش داده کاوی ساده :
در یک دید کلی ، ما می توانیم داده کاوی را به عنوان یک فرآیند چهار مرحله ای تعریف کنیم :
1.
جمع آوری یک مجموعه از داده ها برای تحلیل
2.
ارائه این داده ها به برنامه نرم افزاری داده کاوی
3.
تفسیر نتایج
4.
بکارگیری نتایج برای مساله یا موقعیتهای جدید
شکل فوق یک دیاگرام از فرآیند داده کاوی را نشان می دهد.
- جمع آوری داده ها : فرآیند داده کاوی احتیاج به دسترسی به داده ها دارد.
داده ممکن است در تعدادی رکورد، در چندین فایل پایگاه داده ذخیره شود و یا ممکن است داده فقط شامل چند صد رکورد در یک فایل ساده باشد.
با توجه به اینکه معمولا داده های واقعی شامل چندین هزار رکورد می باشند، اولین گام در داده کاوی تهیه زیر مجموعه مناسبی از داده برای پردازش است.
گاهی این مرحله احتیاج به تلاش انسانهای بسیاری دارد.
در کل سه راه متداول برای دستیابی فرآیند داده کاوی به داده وجود دارد : ذخیره داده در “ انبار داده 1 ” ذخیره داده در پایگاه داده رابطه ای ذخیره داده در فایل ساده - داده کاوی : همانطور که در شکل مشخص است مرحله بعد داده کاوی است.
با این حال قبل از ارائه داده به ابزار داده کاوی ، چندین انتخاب داریم: یادگیری باید تحت کنترل باشد یا بدون کنترل ؟
کدام نمونه ها در داده ها ی جمع آوری شده برای ساخت مدل بکار میروند و کدامها برای تست مدل ؟
کدام صفتها از صفتهای موجود انتخاب می شوند ؟
و ....
- تفسیر نتایج : در این مرحله خروجیهای مرحله داده کاوی آزمایش می شوند تا مشخص شود که آیا این نتایج قابل استفاده و جالب هستند یا نه؟
همانطور که در شکل می بینیم اگر نتایج بهینه نباشد می توانیم فرآیند داده کاوی را با صفات و نمونه های جدید تکرار کنیم.
همچنین ما می توانیم به” انبار داده “ مراجعه کنیم و فرآیند استخراج دانش را تکرار کنیم.
ـ بکارگیری نتایج : هدف نهایی ما بکارگیری نتایج برای موقعیتهای جدید است.
به عنوان مثال دانشی که در یک پایگاه داده فروشگاه بیان می کند کسانی که مجله ورزشی می خرند همچنین سیگار هم می خرند؛ در شکل گیری استراتژیهای فروشگاه در چیدن قفسه ها ، تهیه کاتالوگ ها و ...
تاثیر می گذارد.
استراتژیهای داده کاوی : همانطور که در شکل زیر می بینیم استراتژیهای داده کاوی بطور کلی می توانند به دو دسته “ تحت کنترل ” یا “ بدون کنترل ” تقسیم می شوند.
آموزش تحت کنترل مدلهایی را با بکارگیری صفات ورودی برای تشخیص مقدار صفت خروجی می سازد.
حتی برخی از الگوریتمهای ” آموزش تحت کنترل” امکان تشخیص چندین صفت خروجی را به ما می دهند.
به صفات خروجی ، صفات وابسته نیز می گوییم.
زیرا مقدار آنها به مقدار یک یا چند صفت ورودی بستگی دارد.
به همین ترتیب به صفات ورودی، صفات مستقل نیز می گوییم.
هنگامی که “ آموزش بدون کنترل ” را بکار می بریم تمامی صفات ورودی هستند و صفت خروجی نداریم.
آموزش تحت کنترل با توجه به اینکه صفات خروجی مقوله ای هستند یا عددی و آیا مدلهای ایجاد شده برای مشخص کردن موقعیت کنونی ایجاد شدند یا پیش بینی خروجیهای آینده ، به چندین قسمت تقسیم می شوند.
(منظور از صفات مقوله ای ، صفاتی هستند که مقدار آنها تعداد محدود و مشخصی است، مثل صفاتی که مقدار آنها Boolean است که دو مقدار {true, false} دارد).
طبقه بندی1 : طبقه بندی احتمالا از همه استراتژیهای داده کاوی قابل درک تر است.
طبقه بندی سه خصوصیت دارد : آموزش تحت کنترل است.
متغیر وابسته ، مقوله ای است.
تاکید بر روی ساخت مدلهایی است که قادر به اختصاص نمونه های جدید به یکی از کلاسهای تعریف شده باشند.
تخمین2 : مشابه طبقه بندی ، هدف یک مدل تخمین نیز مشخص کردن مقدار برای یک صفت خروجی است؛ اما بر خلاف طبقه بندی صفات خروجی برای مساله تخمین، عددی است بجای مقوله ای .
بعنوان یک مثال برای تخمین ، پایگاه داده ای را در نظر بگیرید که هر رکورد آن اطلاعاتی را راجع به شخصی دارد مثل : محل زندگی، غذای روزانه در اغلب روزها، نوع ماشین شخصی ، درآمد ماهانه و ....
هدف الگوریتم تخمین در این مثال ایجاد مدلی برای تشخیص درآمد ماهانه نمونه های جدید (رکوردهای جدید) می باشد.{که بقیه صفات آنها بجز درآمد ماهانه مشخص است}.
بیشترتکنیکهای تحت کنترل قادرند که یا مسائل طبقه بندی را حل کنند یا تخمین ، اما نه هردورا.
پیش گویی Perdiction : تشخیص تفاوت بین پیش گویی و طبقه بند ی یا تخمین کار ساده ای نیست.
با این حال هدف یک مدل پیش گویی ، برخلاف طبقه بندی یا تخمین، بجای مشخص کردن رفتار کنونی، مشخص کردن خروجیهای آینده است.
بیشتر روشهای داده کاوی که برای طبقه بندی یا تخمین مناسبند، برای ساخت مدلهای پیش گویی نیز بکار میروند.
عملا این طبیعت داده است که مشخص می کند یک مدل برای تخمین مناست است یا طبقه بندی ویا پیش گویی.
:Unsupervised Clustering دسته بندی بدون کنترل در دسته بندی بدون کنترل، ما دیگر صفات خروجی نداریم که ما را در فرآیند یادگیری راهنمایی کند، در عوض برنامه مربوطه ساختارهای دانش را با بکارگیری معیارهای “ کیفیت دسته” برای گروه بندی داده ها به دو یا چند کلاس (دسته)، بدست می آورد.
.
یک هدف اساسی دسته بندی بدون کنترل، کشف ساختارهای مفهومی در داده است.
کاربردهای متداول دسته بندی بدون نظارت عبارتند از : مشخص می کند که آیا ارتباطات با معنی در شکل مفاهیم می تواند در داده ما پیدا شود یا نه ؟
کارآیی روش آموزش تحت کنترل را مشخص می کند.
بهترین صفات ورودی برای آموزش تحت کنترل را مشخص می کند.
شناسایی از حد خارج شده ها (outlier) تحلیل سبد بازاری Market Basket Analyse : هدف این مرحله پیدا کردن ارتباطات جالب میان محصولات (خرده فروشی) است.
خروجی این مرحله به فروشندگان کمک می کند تا بهتر بتوانند قفسه ها را بچینند یا کاتالوگها را تنظیم کنندو نیز در ایجاد استراتژیهای فروشگاه نیز کارا است.
مثالی از دانش این مرحله به فرم زیر است (در یک فروشگاه) سیگار می خرند کسانی که قهوه می خرند :Supervised Data Mining تکنیکهای داده کاوی تحت کنترل تکنیکهای داده کاوی برای بکارگیری استراتژی داده کاوی برای یک مجموعه داده بکار می رود.
یک تکنیک داده کاوی از دو قسمت تشکیل شده است: الگوریتم.
ساختار دانش مربوطه مثل درخت یا یک مجموعه قوانین درخت تصمیم که در قسمتهای قبلی توضیح دادیم.
در اینجا چندین روش دیگر برای داده کاوی نظارت شده ارائه می دهیم : 1.
شبکه عصبی : یک شبکه عصبی مجموعه ای از نودهای به هم پیوسته است که طراحی می شوند تا رفتار مغز انسان را شبیه سازی کنند.
چون مغز انسان از بیلیونها عصب تشکیل شده و شبکه های عصبی کمتر از صد نود دارند مقایسه یک شبکه عصبی و رفتار مغز کمی غیر متعارف است.
با این وجود شبکه های عصبی با موفقیت ، برای حل مسائل بکار برده می شوندو برای داده کاوی نیز کاملا ابزار مناسبی است .
شبکه های عصبی در شکلها و فرمهای گوناگونی وجود دارند و هم برای آموزش تحت کنترل و هم دسته بندی بدون کنترل بکار می روند.
درهمه موارد ، مقادیر ورودی برای شبکه عصبی باید عددی باشند.
شبکه feed-forward یک نوع شبکه عصبی مناسب برای مسائل آموزش تحت کنترل می باشد.
2.
برگشت آماری1 : برگشت آماری یکی از روشهای آموزش تحت کنترل است که یک مجموعه از داده های عددی را توسط ایجاد معادلات ریاضی مرتبط با یک یا چند صفت ورودی به یک صفت خروجی عددی نسبت می دهد.
یک مدل “ برگشت خطی ” توسط یک صفت خروجی که مقدارش بوسیله : “ جمع مقادیر صفت های ورودی × یک وزن مشخص “ مشخص می شود.
مثلا اگر یک پایگاه داده شامل صفات ورودی A , B, C , D و صفت خروجی E باشد، رابطه زیر می تواند یک مدل برگشت خطی باشد : E = 0.5 C – 0.2 B + A + 0.32 میبینیم که E صفت خروجی است که مقدارش توسط ترکیب خطی صفات A , B , C تعیین می گردد.
همانند شبکه عصبی ، در این روش نیز همه ورودیها باید عددی باشند و در صورتیکه داده ها در پایگاه داده مقوله ای باشند باید آنها را به داده های عددی تبدیل کنیم.
3.
قوانین وابستگی2 : به تفصیل در بخشهای بعد مورد بحث قرار می گیرد.
قوانین پیوستگی: یکی از مهمترین بخشهای داده کاوی، کشف قوانین وابستگی در پایگاه داده است.این قوانین، لزوم وقوع برخی صفات(آیتم ها) را در صورت وقوع برخی دیگر از آیتمها، تضمین می کند.
برای روشن شدن مطلب یک فروشگاه خرده فروشی را در نظر بگیرید.
مشخصات اجناس خریده شده توسط هر مشتری در یک رکورد پایگاه داده ذخیره می شود.به هر رکورد یک شناسه (TID) نسبت داده می شود.فرض کنید که مجموعه I شامل تمام آیتمها(اجناس) فروشگاه باشد.
اگر I x,y و x∩y=ø آنگاه x=>y یک قانون وابستگی است که بیان میکند اگریک مشتری اجناس مجموعه x را بخرد، اجناس مجموعه y را هم می خرد.
این چنین قوانین، تأثیر مهمی در تایین استراتژیهای فروش، بخش بندی مشتریان، تنظیم کاتالوگها و...
دارد.
همچنین کشف قوانین وابستگی، کاربردهای بسیاری در علوم مختلف نیز دارد.
تعریف مسأله: مجموعه آیتم: به هر زیر مجموعه از مجموعه آیتمها I)) ' یک مجموعه آیتم ' میگوییم.
در بیشتر الگوریتمها مساله کشف قوانین پیوستگی به دو زیر مساله تقسیم می شود: 1.پیدا کردن تمامی زیر مجموعه های مجموعه I [مجموعه آیتمها] که تکرار (وقوع) آنها در پایگاه بیشتر از یک حد تایین شده است.
به مجموعه آیتمهایی که تعداد وقوع آنها در پایگاه بزرگتر(یا مساوی)حد تایین شده است ' مجموعه آیتمهای بزرگ'، وبه بقیه' مجموعه آیتمهای کوچک' می گوییم.
2.بکارگیری مجموعه آیتمهای بزرگ برای تولید قوانین مطلوب.
تعریف: پوشش2: مجموعه I شامل تمام آیتمها و مجموعه آیتم x را در نظر بگیرید ، می گوییم پوشش x در پایگاه داده برابر است با ℓ اگر و فقط اگر تعداد وقوع مجموعه آیتم x در پایگاه داده برابر با ℓ باشد.
Support(x)=ℓ درجه اطمینان:3 مجموعه I شامل تمامی اقلام و مجموعه آیتمهای x و y مفروضند.
درجه اطمینان قانون x=>yبرابر است با : x∩y=ø Conf(x=>y) = support(xUy) support(x) الگوریتم : Apriori این الگوریتم(Agrawal & Srikant ,1994) برای تولید مجموعه اقلام بزرگ به این ترتیب عمل می کند: ابتدا با یک دور خواندن پایگاه داده مجموعه اقلام بزرگ یک عضوی ((1-itemsetرا مشخص می کنیم.[مجموعه اقلام 1 عضوی که تعداد تکرار آنها در DB از حد تایین شده(minsup) بیشتر است.] سپس با استفاده ازمجموعه اقلام بزرگ یک عضوی، مجموعه اقلام دو عضوی را ایجاد می کنیم و برای تایین پوشش مجموعه اقلام دو عضوی یک بار دیگر کل پایگاه داده را می خوانیم تا مجموعه اقلام بزرگ دو عضوی را تایین کنیم.
به همین ترتیب با استفاده از مجموعه اقلام بزرگ دو عضوی مجموعه اقلام سه عضوی را ایجاد کرده و با خواندن دوباره پایگاه داده پوشش هر مجموعه قلم سه عضوی را مشخص کرده و مجموعه اقلام بزرگ سه عضوی تولید می شوند و این کار را برای مجموعه های 4عضوی و ...
انجام میدهیم تا مرحله ای که هیچ مجموعه آیتم بزر الگوریتم: L1= { larg-1-itemset } for ( k=2; Lk-1 ≠0;k+1 ) do begin C k=apriori – gen(Lk-1 ) //عضوی k عضوی با استفاده از اقلام بزرگ1-k ساخت زیر مجموعه های for all transaction lεD do begin C t=subset(Ck,l); // رخ دادند.
عضوی در تراکنش k تست اینکها کدام مجموعه آیتمهای for all candidate cεCt do c.count++; end Lk={ cεCk l c.count ≥minsup} end; Answer= Lk (تبصره : اگر یک مجموعه آیتم بزرگ باشد[تکرارش درپایگاه داده بیشتر از minsupباشد] تمامی زیرمجموعه های آن نیز بزرگ هستند.) چون هدف، تولید مجموعه اقلام بزرگ است، در الگوریتم aprioriدر هر مرحله پس از ایجاد مجموعه اقلامk عضوی از مجموعه اقلام بزرگ k-1 عضوی قبل از خواندن پایگاه داده برای تشخیص پوشش مجموعه اقلام k عضوی، ابتدا باید برای هر مجموعه قلم ببینبم آیا زیر مجموعه k-1 عضوی اش بزرگ هستند یا نه، اگر حتی یک زیر مجموعه k-1 عضوی اش هم بزرگ نباشد، آن مجموعه قلم k عضوی نمی تواند بزرگ باشد.(طبق قضیه) و آن را حذف می کنیم.
برای روشن تر شدن الگوریتم به مثال زیر توجه کنید: minsup=3 Database: گام1:ایجاد مجموعه اقلام 1 عضوی: L 1مجموعه آیتمهای بزرگ: مجموعه آیتمهای 1 عضوی: {1}=3 {1}=3 {2}=3 {2}=3 {3}=4 → {3}=4 {5}=5 {4}=2 {5}=4 گام2: ایجاد مجموعه آیتمهای دو عضوی با استفاده از مجموعه آیتمهای بزرگ 1 عضوی: L2مجموعه آیتمهای بزرگ دو عضوی: مجموعه آیتمهای 2 عضوی: {1,3}=3 {1,2}=1 {2,5}=3 {1,3}=3 {3,5}=3 → {1,5}=3 {1,5}=3 {2,3}=2 {2,5}=3 {3,5}=4 گام3:ایجاد مجموعه آیتمهای سه عضوی با استفاده از مجموعه آیتمهای بزرگ دو عضوی: مجموعه آیتمهای بزرگ سه عضوی: مجموعه آیتمهای 3عضوی:L3 {1,3,5}=3 {1,3,5}=3 → Answer=L1 U L2 U L3={{1} {2} {3} {5} {1,3} {2,5} {3,5} {1,5} {1,3,5}} الگوریتم : Aprior TID در این الگوریتم (Agrawal & Srikant ,1994)در ابتدا فضای جستجو پایگاه داده اولیه است که هر تراکنش آن را به عنوان مجموعه ای از مجموعه قلم های تک عضوی می بینیم: به این معنی که تراکنش ((100 l 1,2,3 به صورت (100 l{1}{2}{3})در نظر گرفته می شود سپس همانند الگوریتم aprioriمجموعه اقلام 1 عضوی را ایجاد کرده و تعداد تکرار آنها را در پایگاه می شماریم و مجموعه اقلام بزرگ 1 عضوی را مشخص می کنیم.
همانند الگوریتمapriori با استفاده ازعناصر مجموعه آیتمهای 1عضوی بزرگ، مجموعه آیتمهای دو عضوی را ایجاد می کنیم.(چون هر مجموعه آیتم k عضوی از ترکیب دو مجموعه k-1 عضوی تشکیل شده است برای شمردن تعداد تکرار یک مجموعه kعضوی در پایگاه می توان در هر تراکنش به دنبال مجموعه آیتمهایk-1 عضوی تولید کننده آن مجموعه آیتم، گشت.
یعنی مثلا برای شمردن تکرار مجموعه آیتم {1,2,3}در هر تراکنش باید ببینیم آیا (1,2)و(1,3)در مجموعه هست یا نه.) سپس برای هر تراکنش TIDمربوطه را به همراه تمامی مجموعه آیتمهای kعضوی که در تراکنش هست[تولید کننده های k-1عضوی اش در تراکنش هست] به عنوان تراکنش پایگاه جدید اضافه می کنیم.(برای ا ستفاده مجموعه آیتمهای k+1) پایگاه جدید Ĉk → وتراکنشهایی که هیچ مجموعه آیتم kعضوی را پوشش ندهند به پایگاه جدید راه پیدا نمی کنند.سپس مجموعه اقلام k+1عضوی را با استفاذه از مجموعه اقلام kعضوی بزرگ ایجاد می کنیم ودر پایگاه داده جدید به دنبال تعداد تکرارهای این مجموعه اقلام می گردیم.[در واقع برای هر مجموعه آیتمk+1عضوی در هر تراکنش جستجو می کنیم ببینیم آیا دو مجموعه kعضوی تولید کننده اش در تراکنش است یا نه.] سپس TIDاین تراکنش به همراه تمامی مجموعه آیتمهای k+1عضوی که پوشش میدهد به پایگاه داده جدید دیگری اضافه می کنیم، پایگاه داده جدید → Ĉk+1 و این کار را به ازای تمامی تراکنشها تکرار می کنیم.
عملیات بالا را زمانی که پایگاه داده جدید ایجاد شده (Ĉk )تهی نباشد ادامه می دهیم.
الگوریتم partition : این الگوریتم) Savasere &Navathe & Omiecinski,1995) برای بدست آوردن مجموعه آیتمهای بزرگ از دو قسمت تشکیل شده است.
در قسمت اول این الگوریتم پایگاه داده را به چندین بخش مجزا از نظر منطقی تقسیم می کند وهمهً مجموعه آیتمهای بزرگ محلی (مجموعه آیتمهایی که تعداد تکرار آنها از minsupp محلی که برای هر بخش در نظر گرفته شده بیشتر است) برای هر بخش بطور مجزا تولید می شود .
سپس در انتهای مرحله یک ، همه مجموعه اقلام بزرگ در هر بخش باهم مجموعه اقلام بزرگ بالقوه در سطح کل پایگاه داده را تشکیل می دهند (مجموعه Σ).
درقسمت دوم، پوشش (تعداد تکرار ) هر مجموعه آیتم در مجموعه اقلام بالقوه (Σ) در کل پایگاه داده شمارش می شود و مجموعه اقلام بزرگ واقعی محاسبه می شوند .
توجه: برای هر بخش یک minsupp محلی در نظر گرفته می شود و یک minsupp کلی برای کل پایگاه داده نیز داریم.
نحوه تولید مجموعه اقلام بزرگ در هر بخش به صورت زیر است: ابتدا به ازای هر آیتم a در مجموعه I ( آیتم ها ) ، ID تراکنش هایی در بخش مربوطه از DB که شامل آیتم a می باشند را مشخص می کنیم.
بخش2 t(a)={400,500,601} بخش1t(a)={100,300} سپس همانند الگوریتم apriori ، ابتدا مجموعه اقلام یک عضوی بزرگ را ایجاد می کنیم .
سپس از روی آنها مجموعه اقلام بزرگ دو عضوی را ایجاد میکنیم و … با این تفاوت که در این الگوریتم برای محاسبه پوشش (تعداد وقوع ) هر مجموعه آیتم مثل A={i1,i3,i5} i1,i3,i5 I تعداد اعضای مجموعه t(A)=t(i1)t(i3)t(i5)را می شماریم (به جای خواندن دوبارهDB )، که t(x) مجموعه ID تراکنش های شامل x است (در همان بخش).
پس از اینکه تمام مجموعه اقلام بزرگ(مجموعه اقلامی که تعداد تکرار آنها در این بخش از DB بزرگتر از minsupp محلی است ) را بدست آوردیم همین کار را برای بخش های دیگر تکرار می کنیم .
در صورتیکه مجموعه اقلام بزرگ برای بخش i را ، i بنامیم، مجموعه به صورت زیر ایجاد می شود: =12…n حال مجموعه Σشامل مجموعه اقلام بزرگ بالقوه است .اکنون یک بار دیگر پایگاه داده را می خوانیم وپوشش هر کدام از مجموعه اقلام کاندید را در کل پایگاه داده مشخص می کنیم.
در صورتیکه پوشش A ازminsup،عمومی بزرگتر باشد .یک مجموعه اقلام بزرگ است.
تعداد بخش ها در پایگاه به گونه ای تعیین شده که هر بخش به همراه ساختمان داده های مورد نیاز در حافظه جای گیرد .
الگوریتم های MaxEclat,Eclat : در این الگوریتم ها(Zaki,1997) نیز همانند partition ابتدا مجموعهt(ai) به ازای هر ai متعلق I (مجموعه اقلام کلی)تولید می شود.(t(ai) شناسه تراکنشهایی را دارد که شامل ai هستند.) ولذا پس از ایجاد هر مجموعه آیتم k عضوی (از مجموعه های k-1 عضوی) مثل A={a1,a2,a3} برای محاسبه پوشش A در پایگاه داده تعداد اعضای مجموعه ∩ t(a2) ∩ t(a3) t(A)=t(a1) را شمارش می کنیم.
با توجه به اینکه تعداد مقادیر میانی با انجام این کار (اشتراک ها) بسیار زیاد می شود، فضای حافظه اصلی جوابگو نیست و لذا راه حل زیر ارائه شد.
با توجه به تعاریف ریاضی، مجموعه تمام زیر مجموعه های یک مجموعه (مجموعه توانی) ، یک شبکه را تشکیل میدهند.این الگوریتم ، این شبکه را به چندین زیر شبکه تقسیم میکند و برای هر زیر شبکه بطور مجزا مجموعه آیتمهای بزرگ را تولید می کند.
در این صورت ساختمان داده های هر زیر شبکه به راحتی در حافظه اصلی جای می گیرد .
در شکل زیر ، زیر شبکه مربوط به آیتم [A] را مشاهده می کنیم که شامل اعضایی است که با A شروع می شوند.
به نودهایی که مستقیما با [A] در ارتباطند ’اتم’ها می گوییم.
درهرزیرشبکه با داشتن اتمهای مربوطه میتوان استراتژیهای پایین به بالا (partition,apriori ) ویا بالا به پایین را برای جستجوی مجموعه اقلام بزرگ بکار برد.(در شکل جستجوی پایین به بالا را مشاهده می کنیم).
S در الگوریتم فوق مجموعه اتمهای زیر شبکه است و F مجموعه اقلام بزرگ نهایی است و Tiمجموعه اقلام بزرگ جدید هستند.(یک سطح بالاتر).
در روش بالا به پایین در هر زیر شبکه از بزرگترین مجموعه آیتم در آن زیرشبکه شروع می کنیم و به سمت اتمها پیش می رویم.
هر گاه یک نود مجموعه قلم بزرگ را مشخص کند دیگر برای آن نود فرزندانش چک نمی شوند زیرا مطابق قضیه قبلی (زیر مجموعه های بزرگ هم بزرگند)، تمام زیر مجموعه هایش مجموعه اتم های بزرگ هستند .
بجز روش بالا به پایین و پایین به بالا روش دیگری به نام hybrid که ترکیب دو روش بالا به پایین و پایین به بالا می باشد نیز وجود دارد که این روش را در شکل زیر نشان دادیم.
ابتداAWو AC ترکیب می شوند(.
(ACWاگر(ACW)مجموعه آیتم بزرگ باشد با عنصر اتم بعدی (AT) ترکیب میشود و(ACTW)را ایجاد می کند.دوباره اگر این مجموعه آیتم بزرگ باشد با اتم بعدی (AD) ترکیب میشود و تشکیل (ACDTW) را می دهد و چون این مجموعه آیتم بزرگ نیست مجموعه آیتم قبلی (ACTW) یک مجموعه آیتم maximal است.
حال اگر مجموعه تمام اتم هایی که دراین مرحله شرکت داشتند را S1 بنامیم و بقیه اتم ها را, S2 به ازای اولین عضو S2 مثل ai,ai را با تمام اتم های S1 ترکیب کرده و اتم های جدید را به دست می اوریم و برای آنها جستجوی پایین به بالا را تکرار می کنیم و مجموعه آیتم های بزرگ را به دست می آوریم .سپس ai هم به S1 رفته و از S2 خارج میشود .حال دوباره به ازای اولین عنصر S2 کارهای قبل را تکرار می کنیم.(ترکیب اولین عنصرS2 با اتم های S1 و فراخوانی جستجو پایین به بالا برای آنها) با توجه به استراتژیهای بالا الگوریتم های زیر را داریم: Eclat: روش پایین به بالا را برای هر زیر شبکه اعمال می کند.
Maxeclat : روش ترکیب hybrid را برای هرزیر شبکه اعمال می کند.
الگوریتم با ساختار trie : در این الگوریتم(Amir & Feldman & Kashi,1998) از یک ساختار داده بنام trie برای تولید مجموعه اقلام بزرگ استفاده می کنیم .
به کار گیری این ساختارها ما را قادر می سازد تا مجموعه اقلام بزرگ را به طور کارا تولید کنیم.( حتی با وجود minsupp های بسیار کوچک) رشته S=S[1]...S [n] را در نظر بگیرید برای افزودن این رشته به درخت trie ابتدا از ریشه درخت trie شروع می کنیم (current-node= root) و نگاه می کنیم , بینیم آیا یالی از current-node با بر چسپ S [1] وجود دارد یا خیر .
اگر چنین یالی وجود داشت , از طریق آن یال به نود فرزند می رویم و ) نود فرزند=(current node سپس دوباره اعمال بالا را برای current-node جدید و کاراکتر بعدی (S[2]) تکرار می کنیم.
در غیر این صورت ( یالی با بر چسب S[1] وجود نداشت ) , یالی با برچسب S[1] از current-node ایجاد می کنیم و فرزند ایجاد شده از طریق این یال , current-node مرحله بعدی است .
حال باید کار را برای S[2] و current-node جدید تکرار کنیم .
این کار را آنقدر تکرارکنیم تا رشته تمام شود, در صورتیکه تمام رشته را چک کردیم و کار را برای S[n] و current-node مربو طه اش چک کردیم شمارنده مربوط به نود فرزند ( Currentنود آخر از طریق یال S[n] ) رامی افزاییم.
الگوریتم مربوطه: در این الگوریتم فقط یک دور پایگاه داده را می خوانیم و به ازای هر تراکنش مثل ,T تمام زیر مجموعه های T را به درخت (trie) می افزاییم .
مثلا برای {1,2,5} زیر مجموعه های {1,2,5},{2,5},{1,5},{1,2},{5},{2},{1} یکی یکی به درخت trie افزوده می شوند.
در نهایت شمارنده مربوطه به هر نود در درخت (trie) تعداد وقوع مجموعه آیتم نود مربوطه را در بر دارد.
نکته :این الگوریتم برای حالات خاصی که طول هر تراکنش بسیار کم است در نظر گرفته شده است و در هنگامی که طول تراکنش ها کم باشد , می توان نتیجه گرفت که طول مجموعه اقلام بزرگ نیز از یک حدی ( طول M ) بیشتر نخواهد بود,لذا برای هر تراکنش فقط زیر مجموعه های 1 تا M عضوی را تولید وبه درخت اضافه می کنیم.
الگوریتم fp-grow : در این الگوریتم (Han &Pei &Yin,2000)با استفاده از ساختاری فشرده به نام frequent pattern tree(fp-tree) کل فضای پایگاه داده را به فضای کمی در حافظه اصلی نگاشت می کنیم و موقع شمردن پوشش مجموعه آیتم ها درپایگاه داده از fp- tree استفاده می کنیم.به این ترتیب زمان ناشی از خواندن پایگاه داده (DB) در دفعات کاهش می یابد.
تعریف: 1_ یک fp- tree یک درخت است که ریشه آن null است و یک مجموعه از زیر درخت های پیشوندی آیتم به عنوان فرزندان ریشه هستند, یک جدول سرایند آیتم های بزرگ هم وجود دارد.
2_هر نود در درخت fp- tree شامل سه مولفه است: الف: نام آیتم: آ یتمی که نود مشخص می کند.
ب: تعداد : تعداد تراکنش در پایگاه داده, که شامل بخشی از شاخه درخت از ریشه تا آن نود هستند.
ج: link : اشاره گری به نود بعدی در درخت که شامل همین آیتم است , یا مقدارnull دارد.
3 _ هر ورودی در جدول سرایند از دو فیلد تشکیل شده: 1-نام آیتم 2- اشاره گری به اولین نود حامل آیتم ساخت fp- tree : برای ساخت fp tree ازپایگاه داده , ابتدا یک دور پایگاه داده را می خوانیم تا پوشش هر آیتم مشخص شود .
(Supp (a)) سپس قبل از افزودن هر تراکنش به درخت fp tree , مجموعه آیتم های آن تراکنش را, ابتدا بر اساس supp (پوشش) مرتب می کنیم و سپس به درخت می افزاییم.
الگوریتم ساخت fp- tree : ورودی : یک پایگاه داده شامل تراکنش ها و یک حد مینیمم برای پوشش )( خروجی : درخت fp tree مربوطه.
الگوریتم : 1- یکبار پایگاه داده را بخوانید.مجموعه F شامل آیتم های بزرگ( با تکرار کافی در پایگاه داده) و پوشش هر یک را بدست آورید.سپس F مرتب کنید و L بنامید.
2_ ریشه fp-tree (T)را null بگذارید و برای هر تراکنش در پایگاه داده , به ترتیب زیر عمل کنید: ابتدا آیتم های بزرگ در تراکنش را انتخاب نمایید و مطابق مجموعه L مرتب کنید( به ترتیب پوشش) فرض کنید مجموعه آیتم های بزرگ مرتب شده حاصل از این تراکنش به صورت [p|P] که p اولین آیتم در این مجموعه است و P بقیه آیتم هاست , تابع insert tree ( [p|P] ,T) را فراخوانی کنید.