q = 2;
k= 2^q;
x1 = [0.0975000000000000, 0.980987500000000, -0.924672950312500, -0.710040130079246];
for i = 1 : length(x1)
[idx_centers,location] = kmeans(x1',q);
end
temp = idx_centers;
for i = 1 : length(x1)
if temp(i)== 2
idx_centers(i) = 0;
end
BinaryCode_KMeans(i) = idx_centers(i); % output is say [0,0,1,1];
end
strng = num2str(BinaryCode_KMeans);
DecX = bin2dec(strng);
符號在上面的代碼段十進制的轉換,我想表達的二進制串,其中從kmeans
聚類得到的二進制串的十進制數。十進制等效值應爲1,2,3或4,即當q=2
時爲k = 2^q
。Matlab的:二進制使用來自聚類算法
但有時在轉換後,十進制等效值是12,因爲對於4位二進制代碼,我們可以得到1到16或0到15的十進制數。x1
中元素的數量可以變化,可以小於或大於比k
。我應該怎麼做才能使k
內的二進制代碼的十進制等於q
的任何值?
您是否注意到您將'q'而不是'k'作爲簇的數量?這意味着你只有2個簇而不是4個,在你的答案中,你指出十進制值可以是1,2,3或4,它表示簇的數目爲4.另外,小數到二進制轉換工作精細。我認爲這很模糊,你需要改變你想編碼kmeans結果的方式! – hmofrad
@hmofrad:因爲有2個簇或2個符號,所以我通過'q'。 'x1'數組中的每個元素將屬於聚類1或聚類2.結果,將產生包含符號1,2的4個元素的數組。這是變量'idx_centers'。我將這個數組作爲一個字符串處理,並用'0'替換符號'2'以得到一個二進制字符串'BinaryCode_KMeans'。我將這個字符串轉換爲它的十進制等效值,它應該是1,2,3或4.基本上,我希望十進制數字在'k'的範圍內。爲此,我應該如何聚類,'kmeans'應該是什麼'q' – SKM
鑑於你無法控制'kmeans'中簇名的順序,它可以產生'idx_centers = [1 2 2 2]'或' idx_centers = [2 1 1 1]',那麼二進制字符串將是'string = [1 0 0 0]'或'string = [0 1 1 1]',十進制值將是'8'或'7' 。你如何解釋這些結果,因爲你不能在這裏有1到4之間的小數值? – hmofrad