用hash桶求频繁一二三项集

(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
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值