這學期學資料探勘,教材是王振武的《資料探勘演算法原理與實現》,為了**一下自己的懶癌,決定開個坑,寫寫注釋(攤手
c++,stl,離散數學
這份演算法的實現,大量使用了stl的容器和迭代器,對於不熟悉c++的同學,請順便了解什麼是命名空間(using namespace std;apriori:: 之類的),稍微看一下用到的vector,map,pair容器大概是怎麼樣,了解下模版(vector
#include #include #include #include #include #include const unsigned int uint_max=0x3f3f3f3f;
using namespace std;
class apriori
//~apriori();
void getitem();
map,unsigned int>find_freitem();//求事務的頻繁項
map,unsigned int >apri_gen(unsigned int k,map,unsigned int>k_item);
//展示頻繁項集
void showaprioriitem(unsigned int k,map< vector,unsigned int >showmap);
private:
map>item; //儲存所有最開始的事務及其專案
map,unsigned int>k_item; //儲存頻繁專案集
size_t item_size; //事務數目
unsigned int min_value; //最小閾值
};void apriori::getitem()
sort(temp.begin(),temp.end());/*將事務按字典序排序*/
pair>::iterator,bool>ret=item.insert(make_pair(i+1,temp));/*對應序號和項集存入item*/
if(!ret.second)
if(mit==item.end())//事務集為空
while(1)
//判斷是否需要進行下一次尋找
map,unsigned int>pre_k_item=k_item;
size_t kitemsize=k_item.size();
//儲存應該刪除的第k級頻繁項集,不能喝其他k級頻繁項集構成k+1級頻繁項集的集合,為構成第k+1級頻繁項做準備
if(kitemsize!=1&&i!=1)
if(mit==pre_k_item.end())//未找到
i***ist=false;
if(!i***ist&&pre_k_item_it1!=pre_k_item.end())
erasevecmit.push_back(pre_k_item_it1);//該第k級頻繁項應該刪除
++pre_k_item_it1;
}size_t erasesetsize=erasevecmit.size();
if(erasesetsize==kitemsize)
break;
else}}
else
if(kitemsize==1)
break;
}cout<,unsigned int>apriori::apri_gen(unsigned int k,map,unsigned int>k_item)
}++mapit;
}map::iterator item_it=c1_itemtemp.begin();
map,unsigned int>c1_item;
while(item_it!=c1_itemtemp.end())//構造第1級頻繁項集
++item_it;
}return c1_item;
}else
else
map>::iterator base_item=item.begin();
unsigned int acount=0;
while(base_item!=item.end())//統計該k+1級候選項在原事務集出現的次數
if(acount>=min_value&&acount!=0)}}
++mit;
}++ck_item_it1;
}if(ck_item.empty())//該第k+1項集為空,說明呼叫結束,把上一集頻繁項集返回
return k_item;
else
return ck_item;
}}void apriori::showaprioriitem(unsigned int k,map,unsigned int>showmap)
cout<<"}"<<" \t ";
coutnum+=str[i]-'0';
else
return 0;
}return num;
}}int main()
資料探勘之用python實現Apriori關聯演算法
apriori演算法指導我們,如果要發現強關聯規則,就必須先找到頻繁集。所謂頻繁集,即支援度大於最小支援度的項集。如何得到資料集合d中的所有頻繁集呢?apriori演算法是挖掘布林關聯規則頻繁項集的演算法。apriori演算法利用頻繁項集性質的先驗知識,通過逐層搜尋的迭代方法,即將k 項集用於探察 ...
資料探勘學習筆記(1)
碎碎念 最近選修了聯合國教科文組織國際工程科技知識中心的電腦科學微學位,裡面包括 資料結構和演算法設計 資料探勘 理論和演算法應對大資料 計算思維和資料科學導論 使用ruby on rails的敏捷開發基礎 內容都比較基礎,很適合新手入門或者拓展自己的知識面。其中就被清華大學深圳研究生院的袁博老師圈...
資料探勘筆記(1)
1 資料探勘的一種定義 是一項通過探測大量資料以發現有意義的模式和規則的業務流程。資料探勘是一種業務流程,它以其它業務流程產生的大量資料為輸入,一般經過收集,清洗,整理,識別 分析和度量等加工,得到某種有意義的模式或規則作為輸出。而這種輸出反過來可以為其它業務流程提供度量,判斷,等作用。資料探勘的基...