用于离散连续数据的分箱技术

时间:2012-11-19 17:00:59

标签: matlab machine-learning binning

我有以下数据集,

第1至6栏

1.0000         0    0.9954   -0.0589    0.8524    0.0231
1.0000         0    1.0000   -0.1883    0.9304   -0.3616
1.0000         0    1.0000   -0.0336    1.0000    0.0049
1.0000         0    1.0000   -0.4516    1.0000    1.0000
1.0000         0    1.0000   -0.0240    0.9414    0.0653
1.0000         0    0.0234   -0.0059   -0.0992   -0.1195
1.0000         0    0.9759   -0.1060    0.9460   -0.2080
     0         0         0         0         0         0
1.0000         0    0.9636   -0.0720    1.0000   -0.1433

我正在尝试使用二进制拆分构建决策树,其中一个问题是数据是否继续,并且通过保留数据并进行拆分,我的当前实现变得计算密集。如果你只是建立一个分类器,我必须说这会很糟糕。

在我的情况下,我做了10倍并且从5-50(Bagging)增加了分类器。我正在考虑以这样的方式进行分箱,其中数据进入0.2桶,但我发现有负数。我正在使用matlab实现。我是一个Matlab NewB,不确定是否有预先定义的方法来处理这样的场景。

1 个答案:

答案 0 :(得分:1)

不确定这是否完全解决了您的问题,但如果您的问题是动态定义'存储桶',则可以执行此操作:

% Find the minimum and maximum of the matrix
Mmin = min(M(:));
Mmax = max(M(:));

% Assume you have a matrix M with positive and negative values, and want it in bins of 0.2
buckets = Mmin:0.2:Mmax;

% OR assume you want to spread them equally over a fixed amount of bins, say 100
buckets = linspace(Mmin,100,Mmax);

编辑:

假设您想根据一列的值(例如3)来划分矩阵,那么您可以这样做:

% Define the relevant column as a vector for easy handling
v = M(:,3);

% Assume you want to spread them equally over a fixed amount of bins, say 100
buckets = linspace(min(v),100,max(v));
% Now see which column belongs in each bucket
bucket_idx = ones(size(v));
for i = 2:length(buckets)
    bucket_idx(v>buckets(i-1)&(v<buckets(i)) = i;
end

这告诉你每行属于哪个存储桶,对它进行矢量化会更好,但目前这是我能想到的最快的解决方案。一旦你知道一切都属于哪个桶,我认为你应该能够解决剩下的问题。