我正在尝试开发一个用于数据挖掘算法的java代码,即k-apriori算法,它提高了apriori算法的性能。因为我已经开发了1)apriori&2)基于布尔矩阵的apriori。我不能理解的是wiener函数如何帮助转换数据为什么我们在这个算法中使用它。我试图在google上搜索k-apriori算法的例子,但是没有找到任何例子。我知道K-均值算法的工作原理如果有任何一个例子K-apriori特别是它的工作原理将是有帮助的。
Here是我引用k-apriori算法的链接。

最佳答案

我自己从未实现过k-apriori,但如果我是对的,那就是apriori在k-means发现的k个集群中工作。
如你所知,k-means是基于簇质心的概念。通常二进制数据聚类是以0和1为数值进行的。但当从数据中计算质心时,这是非常有问题的。如果有二进制数据,两点之间的距离就是两点之间不同的位数您可以在this link
为了得到任何有意义的聚类,K-means应该对实际值进行操作这就是为什么你使用维纳函数把二进制值转换成实数,这有助于K-means得到令人满意的结果
维纳函数-它们对每个二进制向量执行如下操作:
计算每个元素周围的输入向量xi的平均μ
计算每个元素的方差σ^2
利用基于邻域的方程y对向量中的每个元素进行wiener变换
假设您有大小为pxq的二进制矩阵x和向量v,向量v是该矩阵的第n行。让我们选择邻里窗口3。对于v向量的第n个位置
μ=1/3*(V[n-1]+V[n]+V[n+1])
σ^2=1/3*((v[n-1]-μ)^2+(v[n]-μ)^2+(v[n+1]-μ)^2)
y[n]=μ+(σ^2-λ^2)/σ^2*(v[n]-μ)
式中,λ^2是所有局部估计方差的平均值,因此f.e.假设向量v=5的长度:
λ^2=(σ^2[0]+σ^21+σ^2[2]+σ^2[3]+σ^2[4])/5

10-06 09:28