📄 fclustering.m
字号:
Clear[u, r];
xiangsi[u0_, c0_] := Module[{m, u = u0, c = c0, r, i, j, k, len},
m = Length[u[[1]]];
len = Length[u];
r = Table[0, {i, len}, {j, len}];
For[i = 1, i <= len, i++,
For[j = 1, j <= len, j++,
If[i == j, r[[i, j]] = 1,
r[[i, j]] = 1 - c*Sum[Abs[u[[i, k]] - u[[j, k]]], {k, 1, m}]; ]
];
];
r
](*设U={u1,u2,\[Ellipsis]\[Ellipsis],un}为待分类的全体,其中某一待分类对象由一组数据表征如下:
ui=(xi1,xi2,\[Ellipsis]\[Ellipsis],xim) (i=1,2,\[Ellipsis]\[Ellipsis],n)
ui与uj的相似关系 的建立方法很多,以上为绝对值减数法建立相似关系*)
pingfangbao[r20_] := Module[{r = r20, len, i, j, k, r2, s0, s},
len = Length[r];
r2 = Table[0, {i, len}, {j, len}];
For[i = 1, i <= len, i++,
For[j = 1, j <= len, j++, s0 = {};
For[k = 1, k <= len, k++,
s = If[r[[i, k]] > r[[k, j]], r[[k, j]], r[[i, k]]];
AppendTo[s0, s];
];
r2[[i, j]] = Max[s0];
];
];
r2
](*建立等价关系\:ff08求等价矩阵\:ff09:r*)
julei[r0_, \[Lambda]_] :=
Module[{r = r0, Lambda = \[Lambda], len, i, j, t, lei, rLambda},
len = Length[r];
rLambda = Table[0, {i, len}, {j, len}];
For[i = 1, i <= len, i++,
For[j = 1, j <= len, j++,
rLambda[[i, j]] = If[r[[i, j]] >= Lambda, 1, 0];
];
];
t = Union[{Flatten[Position[rLambda, rLambda[[1]]], 1],
Flatten[Position[rLambda, rLambda[[2]]], 1],
Flatten[Position[rLambda, rLambda[[3]]], 1],
Flatten[Position[rLambda, rLambda[[4]]], 1],
Flatten[Position[rLambda, rLambda[[5]]], 1]}]; lei = Length[t];
Print["U可以分为", lei, "类: ", t];
](*聚类*)
u = {{5, 5, 3, 2}, {2, 3, 4, 5}, {5, 5, 2, 3}, {1, 5, 3, 1}, {2, 4, 5,
1}};(*要分类的数据*)
r = xiangsi[u, 0.1];
While[pingfangbao[r] != r, r = pingfangbao[r]]
r;
julei[r, 0.4]
julei[r, 0.5]
julei[r, 0.6]
julei[r, 0.8]
julei[r, 1]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -