【问题标题】:How to select the values greater than the mean in an array?如何在数组中选择大于平均值的值?
【发布时间】:2020-01-23 15:47:45
【问题描述】:

我想在数据集 (lung.mat) 上应用特征选择 加载数据后,我通过 Jaccard 度量计算了每个特征与其他特征之间的距离平均值。然后我在 B1 中对距离进行降序排序。然后我选择了所有特征中的 25 个,并将矩阵保存在 databs1 中。 我想选择距离值大于数组平均值 (B1) 的特征。

close all;
clc
load lung.mat
data=lung; 
[n,m]=size(data);
for i=1:m-1
      for j=i+1:m
            t1(i,j)=fjaccard(data(:,i),data(:,j));
           b1=sum(t1)/(m-1);
     end
  end
 [B1,indB1]=sort(b1,'descend');
 databs1=data(:,indB1(1:25));
 databs1=[databs1,data(:,m)]; %jaccard
 save('databs1.mat');

如果您对如何在 B1 中定义它提出意见,我将不胜感激,选择大于数组 B1 平均值的 B1 值,这意味着切割其余小于 B1 平均值的值。 我用了这条线,

B1(B1>mean(B1(:)))

运行后,B1 仍然具有等于完整数据集的完整特征数(列),例如,lung.mat 有 57 个特征,而这一行的 B1 仍然有 57 列, 我认为通过这条线,B1 将被切割为大于 B1 平均值的特征数。

【问题讨论】:

  • b1 在每次循环迭代时都会被覆盖,因此只使用最后一次循环迭代的结果。您应该将该计算移出循环。您还应该在循环之前预先分配t1t1 = zeros(m-1,m)。这将显着加快您的计算速度。

标签: arrays matlab matrix mean feature-selection


【解决方案1】:

您的问题的一般答案在这里(根据您的代码,这对您来说似乎很清楚):

a=randi(10,1,10) %example data
a>mean(a) %get binary matrix of which elements are larger than mean 
a(a>mean(a)) %select elements from a that are larger than mean

a =

     1     9    10     7     8     8     4     7     2     8


ans =

  1×10 logical array

   0   1   1   1   1   1   0   1   0   1


ans =

     9    10     7     8     8     7     8

【讨论】:

    猜你喜欢
    • 2013-10-30
    • 1970-01-01
    • 2021-12-02
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多