运行虚拟数据集结果
Input the name of data set: (TwoMoon or ThreeRing)
TwoMoon
iter = 5 lambda:16
Data set TwoMoon-> ACC:1.0000 NMI:1.0000 ARI:1.0000 error_cnt:0
运行真实数据集结果
iter = 6 lambda:8
100leaves
=====In iteration 1=====
ACC:0.8237 NMI:0.9292 ARI:0.4974 error_cnt:282
iter = 7 lambda:64
3sources
=====In iteration 1=====
ACC:0.6923 NMI:0.6216 ARI:0.4431 error_cnt:52
iter = 8 lambda:128
BBC
=====In iteration 1=====
ACC:0.6934 NMI:0.5628 ARI:0.4789 error_cnt:210
iter = 6 lambda:32
BBCSport
=====In iteration 1=====
ACC:0.8070 NMI:0.7600 ARI:0.7218 error_cnt:105
iter = 8 lambda:128
HW
=====In iteration 1=====
ACC:0.8820 NMI:0.9041 ARI:0.8496 error_cnt:236
iter = 6 lambda:32
HW2sources
=====In iteration 1=====
ACC:0.9940 NMI:0.9853 ARI:0.9867 error_cnt:12
iter = 6 lambda:32
NGs
=====In iteration 1=====
ACC:0.9820 NMI:0.9392 ARI:0.9554 error_cnt:9
iter = 7 lambda:64
WebKB
=====In iteration 1=====
ACC:0.7586 NMI:0.4133 ARI:0.4169 error_cnt:49
iter = 7 lambda:64
Hdigit
=====In iteration 1=====
ACC:0.9981 NMI:0.9939 ARI:0.9958 error_cnt:19
iter = 8 lambda:128
Mfeat
=====In iteration 1=====
ACC:0.8820 NMI:0.9041 ARI:0.8496 error_cnt:236
—————————— 读取虚拟数据集TwoMoon 得到1x2个200x2的X,转置得到1x2个2x200的data 调用GMC,求解
m
i
n
∑
v
∑
i
∣
∣
x
i
?
x
j
∣
∣
2
s
i
j
+
α
∣
∣
s
i
∣
∣
2
+
w
v
∣
∣
U
?
S
v
∣
∣
2
+
λ
?
t
r
a
c
e
(
F
T
L
u
F
)
min \sum_v{\sum_i{||x_i - x_j||^2s_{ij} + \alpha||s_i||^2} + w_v||U - Sv||^2 + \lambda*trace(F^TL_uF)}
min∑v?∑i?∣∣xi??xj?∣∣2sij?+α∣∣si?∣∣2+wv?∣∣U?Sv∣∣2+λ?trace(FTLu?F) s.t
S
v
>
=
0
,
1
T
S
i
v
=
1
,
U
>
=
0
,
1
T
U
i
=
1
,
F
T
F
=
I
S^v>=0, 1^TS^v_i=1, U>=0, 1^TU_i=1, F^TF=I
Sv>=0,1TSiv?=1,U>=0,1TUi?=1,FTF=I
输入:
data 多视图数据集,即两个视图
c 聚类数=2
lambda λ=1
normData =0,就不需要做z-score标准化
输出:
y 最终的聚类结果,即聚类指标向量
U 统一矩阵
S0 每个视图的相似性诱导图 (SIG) 矩阵
S0_initial
F 图拉普拉斯矩阵的特征值
evs 嵌入表示
初始化1x2的S0 遍历两个视图,调用InitializeSIGs
参考Laplacian rank algorithm for graph-based clustering
输入:
X{i} 每列都是一个数据点
pn 邻居数k=15
issymmetric 0,如果为1则S = (S+S')/2
输出:
S0{i} 相似矩阵,每一行是一个数据点
D
调用L2_distance_1,计算当前X{i}的平方欧氏距离,其实应该说是2范数
∣
∣
A
?
B
∣
∣
2
=
∣
∣
A
∣
∣
2
+
∣
∣
B
∣
∣
2
?
2
A
T
B
||A-B||^2 = ||A||^2 + ||B||^2 - 2A^TB
∣∣A?B∣∣2=∣∣A∣∣2+∣∣B∣∣2?2ATB
aa=sum(a.*a);
bb=sum(b.*b);
ab=a'*b;
d = repmat(aa',[1 size(bb,2)]) + repmat(bb,[size(aa,2) 1]) - 2*ab;
d = real(d);
d = max(d,0);
d = d - diag(diag(d));
再对得到200x200的D每行升序排列得到索引矩阵idx 取D升序每行的[2:17]这16个距离记作di,构造每行的S
S
(
i
)
=
d
i
(
16
)
?
d
i
15
d
i
(
16
)
?
∑
j
=
1
15
d
i
(
j
)
+
e
p
s
S(i)=\frac{d_i(16)-d_i}{15d_i(16)-\sum\limits_{j=1}^{15}d_i(j)+eps}
S(i)=15di?(16)?j=1∑15?di?(j)+epsdi?(16)?di??(明明论文里说是用高斯核的,但这个结果倒挺像什么插值的) 最终得到200x200的稀疏S(有元素的位置索引就是对应idx的值) 最终得到1x2的200x200的S0_initial
接下来构造200x200的U,S0的两个分块对应求平均数得到 再对应U的每行计算U(j,:) = U(j,:)/sum(U(j,:))(归一化?)
sU = (U+U')/2;
D = diag(sum(sU));
L = D - sU;
调用eig1
输入:
A =L
c =2
isMax =0
isSym =1
输出:
eigvec L最小的两个特征值对应的特征向量=F[200x2]
eigval L最小的两个特征值
eigval_full L升序的特征值=evs[200x1]
nargin=3所以令isSym = 1,从而有A = max(A,A’)(对应取A和A’的最大值) 计算A的特征向量矩阵v和特征值列向量d 再对d升序
计算i视图的X{i}的2范数得到ed[1x2x200x200]
迭代20轮,依次更新
S
v
,
w
,
U
,
F
,
λ
,
S^v,w,U,F,\lambda,
Sv,w,U,F,λ, (更新过程看不明白啊,另外这不是深度学习啊,全靠数学公式智能优化,大概这种MATLAB写的都不用看了吧;另外虽然可能可以参考一下思想,但看不懂是大问题,麻了)
生成结果图(和论文上的一样)
[clusternum, y]=graphconncomp(sparse(sU)); y = y';
if clusternum ~= c
fprintf('Can not find the correct cluster number: %d\n', c)
end;
以原论文采用的3sources数据集为例, 实例169个,视图3个,最终聚类分簇6个,每个视图的每个实例特征维度不统一三千以上,但是其实还是节点级别的!!!
|