資源簡介
利用蟻群算法得到模糊聚類的初始值,再利用FCM對樣本數據進行分類。
代碼片段和文件信息
clc;
clf;
clear;
?%?X?=?測試樣本矩陣;
X?=?load(‘data1.TXT‘);
[Nn]=size(X);??????%?N?=測試樣本數;n?=測試樣本的屬性數;
K?=?4;??????????????%?K?=?組數;?
R?=?100;????????????%?R?=?螞蟻數;?
t_max?=?1000;???????%?t_max?=最大迭代次數;???????????
%?初始化
c?=?10^-2;
tau?=?ones(NK)?*?c;????%信息素矩陣,初始值為0.01的N*K矩陣(樣本數*聚類數)
q?=?0.9;????????????????%?閾值q
rho?=?0.1;??????????????%?蒸發率
best_solution_function_value?=?inf;?%?最佳路徑度量值(初值為無窮大,該值越小聚類效果越好)
tic?????????????????????%計算程序運行時間
t?=?1;?
%=======程序終止條件(下列兩個終止條件任選其一)======
%?while?((t<=t_max))?????????????????????????????%達到最大迭代次數而終止
%?while?((best_solution_function_value>=19727))??%達到一定的聚類效果而終止
while?((best_solution_function_value>=19727))????
%=========================?
????%路徑標識字符:標識每只螞蟻的路徑
????solution_string?=?zeros(RN+1);?????
????for?i?=?1?:?R???????????????????????%以信息素為依據確定螞蟻的路徑
????????r?=?rand(1N);????%隨機產生值為0-1隨機數的1*51的數組
????????for?g?=?1?:?N
????????????if?r(g)?????????????????tau_max?=?max(tau(g:));
????????????????Cluster_number?=?find(tau(g:)==tau_max);???%聚類標識數,選擇信息素最多的路徑
????????????????solution_string(ig)?=?Cluster_number(1);???%確定第i只螞蟻對第g個樣本的路徑標識
????????????else????????????%如果r(g)大于閾值求出各路徑信息素占在總信息素的比例,按概率選擇路徑
????????????????sum_p?=?sum(tau(g:));?
????????????????p?=?tau(g:)?/?sum_p;?
????????????????for?u?=?2?:?K?
????????????????????p(u)?=?p(u)?+?p(u-1);?
????????????????end
???????????????rr?=?rand;??????????
????????????????for?s?=?1?:?K?
????????????????????if?(rr?<=?p(s))?
???????????????????????Cluster_number?=?s;
???????????????????????solution_string(ig)?=?Cluster_number;??
????????????????????break;?
????????????????end?
????????????end
????????end
????end
????%?計算聚類中心
????weight?=?zeros(NK);
???????for?h?=?1:N??????????????%給路徑做計算標識
???????????Cluster_index?=?solution_string(ih);?%類的索引編號??????????
???????????weight(hCluster_index)?=?1;??????????%對樣本選擇的類在weight數組的相應位置標1
???????end
???????cluster_center?=?zeros(Kn);??%聚類中心(聚類數K個中心)
???????for?j?=?1:K
???????????for?v?=?1:n
???????????????sum_wx?=?sum(weight(:j).*X(:v));???%各類樣本各屬性值之和
???????????????sum_w?=?sum(weight(:j));????????????%各類樣本個數
???????????????if?sum_w==0??????????????????????????%該類樣本數為0,則該類的聚類中心為0
?????????????????cluster_center(jv)?=0
??????????????????continue;
???????????????else?????????????????????????????????%該類樣本數不為0,則聚類中心的值取樣本屬性值的平均值
???????????????cluster_center(jv)?=?sum_wx/sum_w;
???????????????end
????????????end
???????end
????%?計算各樣本點各屬性到其對應的聚類中心的均方差之和,該值存入solution_string的最后一位
??????F?=?0;
??????for?j=?1:K
??????????for?ii?=?1:N
??????????????Temp=0;
??????????????if?solution_string(iii)==j;????????????????
??????????????????for?v?=?1:n
??????????????????????Temp?=?((abs(X(iiv)-cluster_center(jv))).^2)+Temp;
??????????????????end
??????????????????Temp?=?sqrt(Temp);
??????????????end
????????????F?=?(Temp)+F;
??????????end????????
??????end
???????solution_string(iend)?=?F;??????????????????????
???
- 上一篇:Matlab車牌定位源代碼
- 下一篇:目標跟蹤程序
評論
共有 條評論