Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-14, 20:13   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 MATLAB函数矩阵参数

我看过一篇有关计算K近邻的博客文章 ,如下所示:

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。我该怎么做?



回答:

您需要转置 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)

更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 23:39


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.