本文作者原创,如需转载,请注明原作者和地址,谢谢合作!
一、问题描述
(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函数对矩阵的每一列的元素进行求和,结果是一个横向量。
%调用格式&