PDA

查看完整版本 : MATLAB函数矩阵参数


poster
2019-12-14, 20:13
我看过一篇 (http://blog.its.ac.id/bsant/knn/)有关计算K近邻的博客文章 (http://blog.its.ac.id/bsant/knn/) ,如下所示:

function test_targets = knn(train_patterns, train_targets, test_patterns, K) % Hubungi budi santosa di [email protected] % untuk laporan kesalahan (bug). % Implementasi the Nearest neighbor algorithm % Inputs: % train_patterns - Train patterns (obs x dim) D x N % train_targets - Train targets 1 x N (classes) % test_patterns - Test patterns D x M (M testing) % K - jumlah nearest neighbors % % Outputs % test_targets - Predicted targets L = length(train_targets); Uc = unique(train_targets); if (L < K), error(鈥檛etangga lebih banyak dari jumlah titik training鈥? end N = size(test_patterns, 1); test_targets = zeros(N,1); for i = 1:N, jar=(train_patterns - repmat(test_patterns(i,:),L,1)).^2; dist = sum(jar,2);%jarak tiap titik data test terhadap data training [m, indices] = sort(dist);%urutkan jarak dr yg terkecil yt=train_targets(indices(1:K));%ambil K jarak terkecil dan periksa labelnya n = hist(yt, Uc);%menempatkan data testing ke kelas mana (tergantung Uc) [m, best] = max(n);%mencari frekuensi maksimum kelas mana paling banyak dari K tetangga terdekat test_targets(i) = Uc(best); end 我的问题是我不断收到以下MATLAB消息:

??? Error using ==> minus Matrix dimensions must agree. 我有2个矩阵:

A is NxD A = 670.00 1630.00 2380.00 1 721.00 1680.00 2400.00 1 750.00 1710.00 2440.00 1 660.00 1800.00 2150.00 1 660.00 1800.00 2150.00 1 680.00 1958.00 2542.00 1 440.00 1120.00 2210.00 2 400.00 1070.00 2280.00 2 B is MxD B = 750.00 1710.00 2440.00 1 680.00 1910.00 2440.00 1 500.00 1000.00 2325.00 2 500.00 1000.00 2325.00 2 如您所见,第4列说明了示例的类。我正在使用类似的功能:

train_patterns = A(:,:) %HOW TO PASS A??, A(:,1:3)? A(1:size(B,1),:) ?? which???? train_targets = A(:,4) %pass the column 4 as vector of classes test_patterns = B(:,1:3) %pass only the 3 columns Knn = 3 因此,输出必须是具有所有B示例的预测的矢量1 x M xM。我该怎么做?



回答:

您需要转置 (http://en.wikipedia.org/wiki/Transpose) A和B以从NxD到DxN(使用'运算符)。

从而:

train_patterns = A(:,1:3)'; %'# 3-by-N train_targets = A(:,4)'; %'# 1-by-N test_patterns = B(:,1:3)'; %'# 3-by-M (last column will be used by you for checking)

更多&回答... (https://stackoverflow.com/questions/4840936)