2016-05-23 48 views
0

我想用GMM分類一個測試組。我有一個帶有標籤{1,2,3}的trainset(n * 4矩陣),n表示訓練樣例的數量,它有4個屬性。我還有一個測試集(m * 4)進行分類。使用帶GMM的GMM進行分類

我的目標是爲每個測試示例提供一個概率矩陣(m * 3),給出每個標籤P(x_test|labels)。就像軟羣集一樣。首先,我在整個訓練集上創建一個具有k = 9分量的GMM。我在一些論文中知道,作者爲trainset中的每個標籤創建一個GMM。但是我想處理來自所有類的數據。

GMModel = fitgmdist(trainset,k_component,'RegularizationValue',0.1,'Start','plus'); 

我的問題是,我想確認組件和標籤之間的關係P(component|labels)。所以我寫如下代碼,但不知道這是否是正確的,

idx_ex_of_c1 = find(trainset_label==1); 
    idx_ex_of_c2 = find(trainset_label==2); 
    idx_ex_of_c3 = find(trainset_label==3); 

    [~,~,post] = cluster(GMModel,trainset); 
    cita_c_k = zeros(3,k_component); 
    for id_k = 1:k_component 
     cita_c_k(1,id_k) = sum(post(idx_ex_of_c1,id_k))/numel(idx_ex_of_c1); 
     cita_c_k(2,id_k) = sum(post(idx_ex_of_c2,id_k))/numel(idx_ex_of_c2); 
     cita_c_k(3,id_k) = sum(post(idx_ex_of_c3,id_k))/numel(idx_ex_of_c3); 
    end 

cita_c_k是(3 * 9)矩陣存儲的關係。 idx_ex_of_c1是例子的索引,在火車組中它的標籤是'1'。

用於測試過程。我首先將GMModel到測試集

[P,~] = posterior(GMModel,testset); % P is a m*9 matrix 

,然後和所有的組件,

P_testset = P*cita_c_k'; 
    [a,b] = max(P_testset,3); 
    imagesc(b); 

的結果是正確的,但還不夠好。任何人都可以給我一些提示嗎?

謝謝!

+0

你爲什麼選擇9康波你的GMM的內部?更多不一定更好,事實上我已經看到僅使用5-7個組件的極其複雜的訓練集。 – GameOfThrows

+0

我不確定有多少組件可以表現最好。也許你是對的。我要找出最佳的#組件。 –

回答

0

你可以採取以下步驟:

  1. 增加目標錯誤和/或在訓練中使用最佳網絡規模,但在訓練和網絡規模的增加通常會不由自主

  2. 最重要的是,在訓練時洗牌訓練數據並僅使用重要數據點來訓練標籤(忽略可能屬於多個標籤的數據點

分離性

驗證使用屬性使用的相關數據的可分離性。

  1. 在標籤(X)的所有數據的相關性應該是高(接近一個)
  2. 在標籤(!= X)在標籤(X)的數據的所有數據的互相關應是低(接近零)。

如果你發現在標籤數據點都具有低相關性數據點跨越標籤具有較高的相關性 - 它把一個問題,關於性能的選擇(有可能是性實際上不會使數據可分離)。如此做如下:

  1. 添加更多相關屬性的數據點,並刪除相關性較低的特性(技術來使用,這是PCA
  2. 使用得到的參數最高頻率分量等從數據點來訓練,而不是直接點
  3. 使用時間延遲網絡訓練時間序列(總是)