(1)读取给定的交易数据库test3.txt,将整个交易数据库表示为一个矩阵,将每个元组表示成一个行向量,
向量长度为项目的个数。其中,一个项目出现在这个元组中,则相应位置设为1,否则为0。
(2)根据给定的最小支持度阈值,确定频繁1项集。
(3)尝试把交易数据矩阵进行缩减,去掉不频繁的项集所在的列。
(4)设计Hash函数,把每个元组散列到Hash桶中。采用HASH桶进行频繁2项集的计算。
(5)计算其余长度的频繁项集,直到Lk为空。
test3.txt的内容如下:项集I={1,2,…,10},支持度阈值为4。
TID 交易记录
1 6 3 7 8 5 1 2
2 6 1 7 4 9
3 2 10 8 9 1 5
4 2 10 4 5
5 5 2 1 7 6 8 9 10
6 5 4 10 1 3 2 7
7 8 9 2 10 3 7
clear
clc
ffid = fopen('text3.txt','r');%打开一个特定的文件,并把一个流和这个文件相关联 r读,该文件必须存在;
disp(ffid);
tline = fgetl(ffid); %title 从文件中读取一行数据,并去掉行末的换行符。
%disp(tline) %TID 浜ゆ槗璁板綍 输出第一行个
i = 0;
MAXn = 20;
data = []; % 创建个data空矩阵
while feof(ffid) == 0 %文件指针 fid 到达文件末尾时返回“真”值;否则返回“假”;
i = i+1;
tline1{
i,1} = fgetl(ffid);
newdata = zeros(1,MAXn); %生成一个1*20的零矩阵
line = str2num(tline1{
i,1}); %把字符串->数值转, 转换后可以使用fprintf或disp函数进行输出
% disp(line);
line(1) = []; %删除矩阵第一列
% disp(line); %输出去掉序号后的数组
newdata(line) = 1;
% disp(strcat('ss',num2str(i))); %ss6 字符拼接 我strcat(str,ptr) ptr连接到str 组成一个新的
%disp(newdata);%输出变化后的数据
data = [data;newdata];
end
disp(data);
aa = sum(data,1); % 按列求和
%disp(aa);
data(:,find(aa<4))=[]; %找到支持度小于4的并删除所在列
disp(data); %确定频繁1项集
% datasum=sum(data);
% datasum(datasum<4)=0;
% [,col]=find(datasum==0);
% data