- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Prefixspan算法设计与实现
摘要:序列模式挖掘算法有AprioriAll、GSP、FreeSpan、Prefixspan,本文将对PrefixSpan算法进行研究,来对序列模式挖掘有更深入的剖析。
关键字:序列模式挖掘,Prefixspan算法
一. Prefixspan算法思想:
采用分治的思想,不断产生序列数据库的多个更小的投影数据库,然后在各个投影数据库上进行序列模式挖掘。PrefixSpan算法就是基于序列投影的一种模式增长算法。
PrefixSpan算法是一种深度优先搜索算法,其基本思想是使用频繁前缀划分搜索空间和投影序列数据库,并搜索相关的序列。首先检查前缀子序列,只将其相应的后缀子序列投影到数据库中。该算法同时采用分治(divide and conquer)的策略,不断产生序列数据库的多个更小的投影数据库,然后在各个投影数据库上进行序列模式挖掘。
二.算法描述:
(1)扫描序列数据库,生成所有长度为1的序列模式。
(2)根据长度为1的序列模式,构造不同前缀所对应的投影数据库。
(3)在相应的投影数据库上重复上述步骤,直到在相应的投影数据库上不能产生长度为1的序列模式为止。
三、Prefixspan算法的具体实现
完整算法实现程序见附录。
用程序实现理论过程:
以下是程序各模块的实现:
a.数据的读取和存储:
本程序数据信息存放在ccc.txt中。读入到两个数据结构中: transaction 相当于一个二维数组保存了所有数据,按照字符形式读入;record里保存的是序列中每一个元素包含项的个数,例如a(abc)(ac)d(cf),在record 中保存形式为:1 3 2 1 2。
b.提取长度为1 的序列模式:
对每一行进行扫描,用counter向量保存每一个项和其出现的位置。数据的格式为’a’,[4] (1,0) (2,0) (3,1) (4,1) ,表明a的支持度为4,在向量中出现的位置为第1行的第0个,和第2行的第0个数据等。
c.扫描所包含的所有字符,并记录所有字符在每一行第一次出现的位置(行号,位置号):
for (unsigned int i = 0; i projected.size(); i++)
{
int pos = projected[i].second; //root 值为-1,每一个都是从-1开始起始。
unsigned int id = projected[i].first; //行号
unsigned int size = transaction[id].size(); //所在行长度
map string, int tmp;
for (unsigned int j = pos + 1; j size; j++)
{
char item = transaction[id][j]; //读取本行每个字符
string mine;
int low=0,high=0;
for(int tt=0;ttrecord[id].size();tt++)
{
low=high;
high+=record[id][tt];
if(jhighj=lowpos=lowposhigh)
{
mine+=_;
break;
}
}
mine+=transaction[id][j]; //这里形成比较项集。
if (tmp.find (mine) == tmp.end())
tmp[mine] = j ; //提取出所有出现的字符,记录每个字符第一次出现的字符及位置。
}
for (map string, int::iterator k = tmp.begin(); k != tmp.end(); ++k) //counter中存入的是每个字母出现的频率和位置。值:{行号,行中位置;行号,行中位置 }
counter[k-first].push_back (make_pair unsigned int, int (id,
您可能关注的文档
最近下载
- 日语入门第一课(课件).ppt VIP
- 心内科进修汇报ppt.pptx
- 2014年10月自考《英语一》讲义-Unit-11-(含课文、生词表、课后练习及答案).doc VIP
- 7.2各民族谁也离不开谁教学设计.docx VIP
- 七年级生物上册 第二单元 第二章 第四节 单细胞生物教案课件 .ppt VIP
- 《条形统计图》教学设计.docx VIP
- 2014年10月自考《英语一》讲义-Unit-09-(含课文、生词表、课后练习及答案).doc VIP
- 部编版语文六年级上册夏天里的成长 第2课时-优课件.ppt VIP
- 浙江省台州市玉环市2023-2024学年六年级上学期期末科学试卷.docx VIP
- Python金融数据分析与应用课件 第5章 数据建模:有监督学习.pptx VIP
文档评论(0)