clc;
clear;
%最小支援度設定
min_sup=2;
%最小置信度
min_conf=0.7;
%讀取檔案,當前的檔案型別是txt檔案,事務資料用數字來表示的,測試資料可以用《資料探勘概念與技術》第三版中的資料為樣本
fid=fopen('d:\matlabfile\apriori\dataapriori.txt','r');
%記錄讀取的行號,與實際的事務數相對應,同時為了分配儲存空間
numevent=1;
%新建事務資料集,由於各個事務的長短不一致,所以採用cell型別
dataset=cell(1,1);
%迴圈讀取檔案,按行讀取
while(~feof(fid))
lineinfo=fgetl(fid);
%將字元轉換為數字組成的陣列
c=str2num(lineinfo);
%空行,重新讀下一行
if (isempty(lineinfo))
continue;
end
%將一條(一行)事務資料新增到事務資料集中
dataset=c;
%行號加1
numevent=numevent+1;
end%將行號減1,上述的迴圈在結束時多加了1
numevent=numevent-1;
%結束檔案讀取,關閉檔案
fclose(fid);
%臨時事務資料集,用於運算操作
dataset_temp=dataset;
%%%第一次掃瞄dataset,統計每乙個候選項,並存在二維陣列中
%用來控制迴圈結束的標記
flag=1;
%統計每條事務中包含『項』的個數
count=1;
%儲存頻繁項
c_result=;
%儲存頻繁項,包含支援度計數,
c1_result=;
%儲存所有臨時的頻繁項
c=;while flag==1
%單項資料集,用來存放事務中包含的所有的單項,不包含其個數
c_temp=zeros(1,1);
%對所有單項進行統計,注意第一次迴圈與後面的迴圈用的陣列有所區別
if count==1
%獲取臨時事務集中事務的個數
numevent=length(dataset_temp);
for i=1:numevent
%獲得第i條事務中單項的個數
for j=1:length(dataset_temp)
%檢視第i條事務第j個單項是否已經存在於單項資料集中,如存在則繼續迴圈,否則增加新的單項
result=find(c_temp==dataset_temp(1,j));
%如果查詢的結果為空,則增加新的單項
if isempty(result)
c_temp=cat(1,c_temp,dataset_temp(1,j));
endend
endelse
numevent=size(c,1);
for i=1:numevent
%獲得第i條事務中單項的個數
for j=1:length(c(i,:))
%檢視第i條事務第j個單項是否已經存在於單項資料集中,如存在則繼續迴圈,否則增加新的單項
result=find(c_temp==c(i,j));
%如果查詢的結果為空,則增加新的單項
if isempty(result)
c_temp=cat(1,c_temp,c(i,j));
endend
endend
%刪除第一行空值,此時所有的單項都已經被統計出來
c_temp(1,:)=;
%對所有單項按照單項的個數進行組合
c=nchoosek(1:1:length(c_temp),count);
c1=c;
%建立乙個零值矩陣,
cc=zeros(size(c1,1),1);
%在c1矩陣的右側增加一列零值
c1=cat(2,c1,cc);
%將候選項與事務集進行比較,並統計個數
for i=1:size(c,1)
num=0;
%獲得事務資料集中事務的個數
for j=1:length(dataset)
%設定迴圈結束標記
flag_1=1;
for m=1:size(c,2)
a=num2str(c(i,m));
%將事務資料集中的第j條事務轉變為字串
b=num2str(dataset);
b(find(isspace(b)))=;
%判斷字串a是否存在於字串b中
n=strfind(b,a);
if length(n)==0
flag_1=0;
break;
endend
if flag_1==1
num=num+1;
endend
c1(i,size(c1,2))=num;
end%把item數量小於支援度的項刪除
col=size(c1,2);
%尋找小於最小支援度的行號
result=find(c1(:,col)=min_conf
%將組合的item放置在關聯規則結果中
association=c;
%將差值放入第二欄中
association=buf;
association=conf;
n_conf=n_conf+1;
endend
endend
1 2 5
2 42 3
1 2 4
1 32 3
1 31 2 3 5
1 2 3
matlab 實現基本apriori演算法
剛剛學了資料探勘的這個演算法,馬上實現下,怕忘掉了。感覺matlab的好處就是矩陣可以一起進行邏輯運算,不過我沒有進行預處理,輸入的資料集儲存在txt檔案裡,且都是以0 1矩陣構成的,不考慮出現次數。輸出只實現了得到k 頻繁項集,沒有計算最終的關聯規則。那個感覺要遍歷什麼的,用矩陣列舉?還沒想到怎麼...
Apriori演算法小結
1 apriori演算法是一種挖掘關聯規則的頻繁項集演算法,其核心思想是通過候選集生成挖掘頻繁項集。2 步驟 3 概念 對於a b 支援度 support p a b 既有a又有b 的概率 置信度 p b a p ab p a 在a 發生的事件中同時發生 b的概率 例如購物籃分析 牛奶 麵包例子 支...
Apriori演算法整理
首先兩個基本概念 支援度 a事件和b事件同時發生的概率 置信度 在a發生的事件中同時發生b的概率,p b a p ab p a 例子 支援度 3 置信度 40 支援度3 意味著 3 顧客同時購買牛奶和麵包 置信度40 意味著購買牛奶的顧客 40 也購買麵包 智慧型商場模型 目標是找到經常一起購買的物...