使用Matlab对频繁2项集和频繁3项集的求取

本文作者原创,如需转载,请注明原作者和地址,谢谢合作!

一、问题描述

(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

二、实验目的

根据购买数据库中的记录,对数据库中的元素进行连接和剪枝,并采用HASH桶来计算频繁2项集和频繁3项集。

三、实验内容

程序实现(详细代码)

ffid = fopen('test3.txt','r');%以只读的形式打开
 tline = fgetl(ffid);  %title  读取文件的第一行
 %tline1=fget1(ffid)  读取文件的第二行
 i = 0;
 MAXn = 20;
 data = [];  %data为一个矩阵
 %1)读取给定的交易数据库test3.txt,将整个交易数据库表示为一个矩阵,将每个元组表示成一个行向量, 
 %向量长度为项目的个数。其中,一个项目出现在这个元组中,则相应位置设为1,否则为0(完成)
while feof(ffid) == 0  %循环读取矩阵中的每一行数据
    i = i+1;
    tline1{
   i,1} = fgetl(ffid);    %可以考虑一行一行来读带有字符串的文件。使用fgetl命令。tline1{
   i,1}:结果是一个字符串   tline1{
   i,1}单元数组(可以放任意类型的数值) i表示第i行(看表tline1)
    newdata = zeros(1,MAXn);%行为1长度为20的零矩阵
    line = str2num(tline1{
   i,1});% 字符串矩阵被转换成一个数值矩阵
    line(1) = [];%把第一列数据(TID)去掉
    newdata(line) = 1;%统计每个人的买了哪个商品 如果卖了商品6  则为newdata(6=1
    data = [data;newdata];%所有人的购买商品的记录  判断谁买了哪个商品(1号商品下的1 判断总的1的个数是否小于最小支持度)
end
%2)根据给定的最小支持度阈值,确定频繁1项集。
%生成一个矩阵以及使用sum函数对矩阵进行操作。在MATLAB默认的情况下,sum函数对矩阵的每一列的元素进行求和,结果是一个横向量。
%调用格式&
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值