用Matlab实现apriori算法关联规则的挖掘程序,完整有详细注解

用Matlab实现apriori算法关联规则的挖掘程序,完整有详细注解,第1张

下面这段是apriori算法中由2频繁项集找k频繁项集的程序,程序中有两个问题:

1、似乎while循环的K永远都是固定的,也就是都是频繁2项集的个数。得到频繁3项集后K的个数不是要变吗?如何体现呢?

2、程序中有两个for的大循环,但是发现结果是只要找到一个频繁3项集第二个for循环就会结束,但是其实还应该有其它的频繁3项集。for循环不是应该无条件执行到参数k结束吗?当时k值是15,可是程序结束的时候i=2,j=3,然后j就不执行4以及一直到k的部分了。是什么原因呢?麻烦高手指点一下。急啊……

while( k>0)

le=length(candidate{1});

num=2;

nl=0;

for i=1:k-1

for j=i+1:k

x1=candidate{i}; %candidate初始值为频繁2项集,这个表示频繁项集的第i项

x2=candidate{j};

c = intersect(x1, x2);

M=0;

r=1;

nn=0;

l1=0;

if (length(c)==le-1) & (sum(c==x1(1:le-1))==le-1)

houxuan=union(x1(1:le),x2(le));

%树剪枝,若一个候选项的某个K-1项子集为非频繁,则剪枝掉

sub_set=subset(houxuan);

%生成该候选项的所有K-1项子集

NN=length(sub_set);

%判断这些K-1项自己是否都为频繁的

while(r & M<NN)

M=M+1;

r=in(sub_set{M},candidate);

end

if M==NN

nl=nl+1;

%候选k项集

cand{nl}=houxuan;

%记录每个候选k项集出现的次数

le=length(cand{1});

for i=1:m

s=cand{nl};

x=X(i,:);

if sum(x(s))==le

nn=nn+1;

end

end

end

end

%从候选集中找频繁项集

if nn>=th

ll=ll+1;

candmid{nl}=cand{nl};

pfxj(nl)element=cand{nl};

pfxj(nl)time=nn;

disp('得到的频繁项集为:')

result=(candmid{nl});

disp(result);

end

end

end

end

《MATLAB R2021a破解版》百度网盘资源免费下载:

yg45 

MATLAB R2021a是由美国知名企业MathWorks打造的一款非常专业且强大的商业数学软件,适合应用数学、信息与计算科、通信工程、电气工程、自动化等专业的用户使用,能够轻松创建出直观的数学建模,也可以为你更好的解决计算和仿真问题,是众多数学领域专家不可或缺的工具之一。该软件可以说是一门高级的技术计算语言以及现代数据分析神器,和我们熟悉的Java、C编程语言相比,该软件能够大大简化算法的开发过程,利用其内核还能与上述编程语言进行集成,让用户更快地执行相关设计。此外,matlab2021软件能够用来解决LAPACK、BLAS线性代数的问题,拥有用于多项式、基本统计量、微分方程数值解的函数,内置了丰富的可视化工具,让你在操作方面变得轻松许多。

在simulink中没有专门的电流互感器模型,可以通过用simpowersystem中的elements中的Saturable Transformer这个饱和变压器来模拟,初始是三个变比,你双击模块,可以选择为两个变比的变压器,然后设定变比。只是接线上注意与主变的接法相反。主变Y/D则互感器D/Y。

现在还有种互感器两侧都接为Y/Y型,若主变Y/D则三角形侧不变,而一次侧即Y型侧,对应的互感器电流则采用两项相减。i(ak)=i(a)-i(b);i(bk)=i(b)-i(c);i(ck)=i(c)-i(a);i(a,b,c)表示三相电流采样值。i(ak)表示补充后的电流。

这个方法可参考书“微型机继电保护原理”张举。P176页。这久也是在做毕业设计用到,互感器饱和对变压器的差动保护影响。

就sym('3')与sym(3)而言,二者没有区别:

>> sym('3')==sym(3)

ans =

     1

 但如果不是整数,结果可能不一样:

>> sym('sqrt(2)-1')

ans =

sqrt(2)-1

>> sym(sqrt(2)-1) 

ans = 

74618081806211082^(-54)

前者以字符串的形式传给符号运算内核,可以保留完整的精度;而后者经过浮点数运算之后再转换为符号类型,存在精度损失。

Matlab是科学计算语言,一般用来跑科学计算的实验的,像模式识别、图像处理、机器学习、密码学、计算数学、信号处理等都会大量用到,去公司据我了解没有要求掌握Matlab的,做研究是神器,集成了大量代数运算,不会编程都能很快上手的。

并不是所有的代码都需要追求极致速度。使用 profile 命令来查看代码运行的瓶颈,找出最需要优化的点。

减少不必要的循环。

不过,使用 arrayfun/cellfun/structfun

通常并不会提高代码运行速度,它只是帮你把代码压缩成一行,以及消除一段缩进。你需要真正的矢量化你的代码。在代码矢量化技巧中,除了用类似

bsxfun/cumsum/accumarray 这类「神器」外,其实更多情况下,只依靠点系列运算符(如:)、矩阵乘法、冒号(:)运算符、逻辑索引,以及 Matlab 内建的许多天生支持矢量化操作的函数,如 sin/sum/max/filter 等,就已经足够应付了。

做到 0 warning。许多影响代码运行性能的问题,Matlab 能够提前帮你预见到,并以 warning 的方式提醒你,例如:循环中大小不断增长的矩阵,不必要的 find 调用,或者 disp(sprintf('Hello world!')) 等等……

使用 mex 函数。通常我不推荐使用 mex 函数,因为太多人用它只是因为他们对 C/C++ 更熟悉,用 Matlab 却只会玩玩 plot(而且是连坐标轴标签都不画的那种)。但若真的有需求,mex 就是你最后的希望。详细情况,还是咨询文档吧。

《MATLAB R2021a破解版》百度网盘资源免费下载:

yg45 

MATLAB R2021a是由美国知名企业MathWorks打造的一款非常专业且强大的商业数学软件,适合应用数学、信息与计算科、通信工程、电气工程、自动化等专业的用户使用,能够轻松创建出直观的数学建模,也可以为你更好的解决计算和仿真问题,是众多数学领域专家不可或缺的工具之一。该软件可以说是一门高级的技术计算语言以及现代数据分析神器,和我们熟悉的Java、C编程语言相比,该软件能够大大简化算法的开发过程,利用其内核还能与上述编程语言进行集成,让用户更快地执行相关设计。此外,matlab2021软件能够用来解决LAPACK、BLAS线性代数的问题,拥有用于多项式、基本统计量、微分方程数值解的函数,内置了丰富的可视化工具,让你在操作方面变得轻松许多。

学习编程语言,包括你说的API和MFC这些用于做界面的软件,都是为了你以后能更好的从事遥感领域,遥感现在是从研究阶段开始进入实用阶段,这样我们就需要根据成熟的理论,把一些想法变成现实,而遥感领域很多东西都没做出来,或者说做的都不是很成熟,也可以说别人做的一些软件什么的并不能很好的完成你的想法,或者使用上有局限性,这时如果你在做一些大的项目你很可能就需要自己去编程实现,当然也不是你说的用VC编写界面,那麻烦了去了,可以用Qt,API,MFC等等很多在编写界面领域更实用的软件,但是很多甚至绝大部分都已c 为基础,学了c,再学那些可能学的会快一些,C语言仍然是也仍将是全世界最为成功的编程语言之一

欢迎分享,转载请注明来源:表白网

原文地址:https://h5.hunlipic.com/biaobai/4110937.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2024-04-16
下一篇2024-04-16

发表评论

登录后才能评论

评论列表(0条)

    保存