从给定的数据集中获取最高的相关系数
Getting the highest correlation coefficient from the given data set
我想比较以下给定的数据集
a = '235 148 89 19 222';
b = '112 128 144 160 176';
c = '192 192 192 192 192';
d = '64 64 64 64 64';
和
y = [230 138 79 15 212];
然后通过将每个给定数据集与y
进行比较来计算相关系数。然后,显示找到的相关系数最高的字符串。
我可以找到它来使用命令
计算两个值
c = corrcoef( a, y );
c = abs(c(2,1));
但是我如何使用 for 循环遍历每个数据集并显示最高 corrcoef
的结果?
这是我写的一段代码,但我不知道如何继续 'for loop'
a = '235 148 89 19 222';
b = '112 128 144 160 176';
c = '192 192 192 192 192';
d = '64 64 64 64 64';
y = '230 138 79 15 212';
s = {a;b;c;d};
s = cellfun(@strsplit, s, 'UniformOutput', false);
s = vertcat(s{:});
for i = 1:size(s,1)
end
使用字符串和单元格而不是整数值和矩阵是否有特殊原因?
下面的解决方案呢:
a = [235 148 89 19 222;...
112 128 144 160 176;...
192 192 192 192 192;...
64 64 64 64 64];
b = zeros(size(a));
y = [230 138 79 15 212];
for i=1:length(a(:,1))
b(i,:) = a(i,:)- y;
end;
[~, minLine] = min(sum(abs(b')));
disp(minLine);
这里将给定数据集 a
(矩阵)中的每一行与给定向量 y
进行比较,计算差异并将值存储在第二个矩阵 b
中。
循环后计算最小总和并给出 a
中的行,该行与 y
最相关
首先,将数字字符串转换为数组的简单方法是使用
str2num 像这样:
>> an = str2num(a)
an =
235 148 89 19 222
连接矩阵中的字符串,因为行使用 char,然后将其转换为矩阵:
>> S = char(a,b,c,d)
S =
235 148 89 19 222
112 128 144 160 176
192 192 192 192 192
64 64 64 64 64
>> N = str2num(S)
N =
235 148 89 19 222
112 128 144 160 176
192 192 192 192 192
64 64 64 64 64
那么你唯一需要做的就是遍历矩阵:
>> [rows,columns] = size(N)
rows =
4
columns =
5
我们需要遍历所有行
>> N(1,:)
ans =
235 148 89 19 222
在matlab帮助中:
R = corrcoef(A,B) returns coefficients between two random variables A and B.
>> R = corrcoef(N(1,:),y)
R =
1.0000 0.9995
0.9995 1.0000
然后将您的度量应用于循环
>> for i = 1:rows
R = corrcoef(N(i,:),y);
rr(i) = abs(R(2,1));
end
>> rr
rr =
0.9995 0.2789 NaN NaN
最后那个向量的最大值就是你想要的行
>> [value,position] = max(rr)
value =
0.9995
position =
1
>> N
N =
235 148 89 19 222
112 128 144 160 176
192 192 192 192 192
64 64 64 64 64
>> N(position,:)
ans =
235 148 89 19 222
我想比较以下给定的数据集
a = '235 148 89 19 222';
b = '112 128 144 160 176';
c = '192 192 192 192 192';
d = '64 64 64 64 64';
和
y = [230 138 79 15 212];
然后通过将每个给定数据集与y
进行比较来计算相关系数。然后,显示找到的相关系数最高的字符串。
我可以找到它来使用命令
c = corrcoef( a, y );
c = abs(c(2,1));
但是我如何使用 for 循环遍历每个数据集并显示最高 corrcoef
的结果?
这是我写的一段代码,但我不知道如何继续 'for loop'
a = '235 148 89 19 222';
b = '112 128 144 160 176';
c = '192 192 192 192 192';
d = '64 64 64 64 64';
y = '230 138 79 15 212';
s = {a;b;c;d};
s = cellfun(@strsplit, s, 'UniformOutput', false);
s = vertcat(s{:});
for i = 1:size(s,1)
end
使用字符串和单元格而不是整数值和矩阵是否有特殊原因?
下面的解决方案呢:
a = [235 148 89 19 222;...
112 128 144 160 176;...
192 192 192 192 192;...
64 64 64 64 64];
b = zeros(size(a));
y = [230 138 79 15 212];
for i=1:length(a(:,1))
b(i,:) = a(i,:)- y;
end;
[~, minLine] = min(sum(abs(b')));
disp(minLine);
这里将给定数据集 a
(矩阵)中的每一行与给定向量 y
进行比较,计算差异并将值存储在第二个矩阵 b
中。
循环后计算最小总和并给出 a
中的行,该行与 y
首先,将数字字符串转换为数组的简单方法是使用 str2num 像这样:
>> an = str2num(a)
an =
235 148 89 19 222
连接矩阵中的字符串,因为行使用 char,然后将其转换为矩阵:
>> S = char(a,b,c,d)
S =
235 148 89 19 222
112 128 144 160 176
192 192 192 192 192
64 64 64 64 64
>> N = str2num(S)
N =
235 148 89 19 222
112 128 144 160 176
192 192 192 192 192
64 64 64 64 64
那么你唯一需要做的就是遍历矩阵:
>> [rows,columns] = size(N)
rows =
4
columns =
5
我们需要遍历所有行
>> N(1,:)
ans =
235 148 89 19 222
在matlab帮助中:
R = corrcoef(A,B) returns coefficients between two random variables A and B.
>> R = corrcoef(N(1,:),y)
R =
1.0000 0.9995
0.9995 1.0000
然后将您的度量应用于循环
>> for i = 1:rows
R = corrcoef(N(i,:),y);
rr(i) = abs(R(2,1));
end
>> rr
rr =
0.9995 0.2789 NaN NaN
最后那个向量的最大值就是你想要的行
>> [value,position] = max(rr)
value =
0.9995
position =
1
>> N
N =
235 148 89 19 222
112 128 144 160 176
192 192 192 192 192
64 64 64 64 64
>> N(position,:)
ans =
235 148 89 19 222