我有一个关于 KNN 训练的问题。我想像CM Bishop的《模式识别和机器学习》一书中那样实现 KNN 。我们需要找到条件密度*p(x|C_k)=K_k\N_kV*、无条件密度p(x)=K\NV和类先验*p(C_k)=N_k\N*。然后,代入贝叶斯定理会得到后验概率。
我的问题在于编程。假设我有 5 个类,在这些类中,我的特征向量长度不同。所以1级有100
,2级有344
,3级有541
……5级有n
。并且所有这些加起来的全维数为 100(数量特征向量)和数量为 FV 1 的标签向量。
现在我的问题是:当我现在想实现我的先验知识时,我不能只for loop
对所有类进行迭代,因为我所有的类(不同长度)都存储在一个带有特征向量的矩阵中
%% Code fragment out of ML-KNN: A lazy learning approach to multilabel learning Min-Ling Zhang, Zhi-Hua Zhou
for i=nclass
temp_Ci=sum(train_target(i,:)==ones(1,num_training));
Prior(i,1)=(Smooth+temp_Ci)/(Smooth*2+num_training);
PriorN(i,1)=1-Prior(i,1);
end
那么,如何在 Matlab 中实现先验?