matlab 實現基本apriori演算法

2021-06-14 08:54:44 字數 2659 閱讀 6913

剛剛學了資料探勘的這個演算法,馬上實現下,怕忘掉了。。感覺matlab的好處就是矩陣可以一起進行邏輯運算,不過我沒有進行預處理,輸入的資料集儲存在txt檔案裡,且都是以0-1矩陣構成的,不考慮出現次數。輸出只實現了得到k-頻繁項集,沒有計算最終的關聯規則。。那個感覺要遍歷什麼的,用矩陣列舉???還沒想到怎麼弄。。。。

現在就貼貼**,可能存在很多地方沒有考慮到,,希望各位大神指點。。。。。謝謝。。

從k頻繁項集得到k+1頻繁項集,通過兩個k頻繁項向量進行或運算得到。。

剪枝判斷k+1-候選項的子串是否在k頻繁項集中存在,通過向量 異或 xor來判斷

統計支援度   提取資料集中指定列   進行與運算    再通過 sum 求和計算 支援度。。

%修改    原來判斷兩向量是否相等  matlab可以直接用==來判斷      如向量 a,b   若用 a==b   等到新的向量  其中若對應位置相等 則為1  否則為0   。。所以好像可以改下下(  

%   求真子集 matlab可以用combntns函式   等改 。。

1、init.m

初始化函式,得到1-頻繁項集及支援度,輸入資料集和最小支援度

function [l a]=init(d,min_sup) %d表示資料集  min_sup 最小支援度

[m n]=size(d);

a=eye(m,n);

b=(sum(d))';

i=1;

while(i<=m)

if b(i)2、apriori_gen.m 

function [c]=apriori_gen(a,k)%產生ck(實現組內連線及剪枝 )

%a表示第k-1次的頻繁項集 k表示第k-頻繁項集

[m n]=size(a);

c=zeros(0,n);

%組內連線

for i=1:1:m

for j=i+1:1:m

flag=1;

for t=1:1:k-1

if ~(a(i,t)==a(j,t))

flag=0;

break;

endend

if flag==0 break;

endc=a(i,:)|a(j,:);

flag=i***it(c,a); %剪枝

if(flag==1)c=[c;c];

endend

end

3、 i***it.m

function flag=i***it(c,a)%判斷c串的子串在a中是否存在

[m n]=size(a);

b=c;

for i=1:1:n

c=b;

if c(i)==0 continue

endc(i)=0;

flag=0;

for j=1:1:m

a(j,:);

a=sum(xor(c,a(j,:)));

if a==0

flag=1;

break;

endend

if flag==0 return

endend

4、get_k_itemset.m

function [l c]=get_k_itemset(d,c,min_sup)%d為資料集  c為第k次剪枝後的候選集 獲得第k次的頻繁項集

m=size(c,1);

m=zeros(m,1);

t=size(d,1);

i=1;

while i<=m

c(i,:);

h=ones(t,1);

ind=find(c(i,:)==1);

n=size(ind,2);

for j=1:1:n

d(:,ind(j));

h=h&d(:,ind(j));

endx=sum(h');

if x

5、主函式   apriori.m

function [l]=apriori(d,min_sup)

[l a]=init(d,min_sup)%a為1-頻繁項集 l中為包含1-頻繁項集以及對應的支援度

k=1;

c=apriori_gen(a,k) %產生2項的集合

while ~(size(c,1)==0)

[m c]=get_k_itemset(d,c,min_sup)%產生k-頻繁項集 m是帶支援度 c不帶

if ~(size(m,1)==0)l=[l;m]

endk=k+1;

c=apriori_gen(c,k)%產生組合及剪枝後的候選集

end

舉例資料集

abc =

1     1     1     1     0

0     1     1     0     1

1     1     1     0     1

0     1     0     1     1

1     1     1     1     0

輸入:apriori(abc,3)

輸出:

頻繁項集+支援度

matlab實現基本離群點檢測

運用matlab實現最基本的離群點診斷,採用歐式距離,並輸出兩點離群因子的比較的視覺化 clc,close all sdata xlsread data.xlsx of2 7,10,2,sdata function of2 x,y,k,data 比較兩點離群因子 x,y 需要比較的兩點的id k 定...

Matlab基本函式

conndef 建立連通矩陣 imbothat 執行bottom hat濾波 imclearborder 抑制邊緣亮結構 imclose 灰度影象或二值影象的閉運算 imdilate 灰度影象或二值影象的膨脹運算 imerode 灰度影象或二值影象的腐蝕運算 imextendedmax 擴充套件極大...

Matlab基本運算

一.基本矩陣指令 reshape a,m,n 將a變成m n型矩陣 rot90 a 將a逆時針旋轉90度 fliplr a 左右翻轉 flipud a 上下翻轉 size a 求矩陣a的尺寸大小,返回值為a的行數和列數,故前面的返回值應為兩個。另外,a a m,選出a的第m行 b a n 選出a的第...