使用分箱技术离散化连续数据

我有一个如下数据集,

第1到6列

1.0000         0    0.9954   -0.0589    0.8524    0.02311.0000         0    1.0000   -0.1883    0.9304   -0.36161.0000         0    1.0000   -0.0336    1.0000    0.00491.0000         0    1.0000   -0.4516    1.0000    1.00001.0000         0    1.0000   -0.0240    0.9414    0.06531.0000         0    0.0234   -0.0059   -0.0992   -0.11951.0000         0    0.9759   -0.1060    0.9460   -0.2080     0         0         0         0         0         01.0000         0    0.9636   -0.0720    1.0000   -0.1433

我正在尝试使用二元分割构建决策树,其中一个问题是数据是连续的,而我的当前实现由于保持数据原样并进行分割而变得计算密集。如果你只是构建一个分类器,这可能还不算太糟糕。

在我的情况下,我正在进行十折交叉验证,并将分类器数量从5增加到50(装袋法)。我考虑使用分箱方法,将数据分成0.2的区间,但我意识到其中有负数。我使用Matlab进行实现。我是Matlab的新手,不确定是否有预定义的方法来处理这种情况。


回答:

不确定这是否完全解决了你的问题,但如果你的问题是动态定义“区间”,你可以这样做:

% 查找矩阵的最小值和最大值Mmin = min(M(:));Mmax = max(M(:));% 假设你有一个包含正负值的矩阵M,并希望将其分成0.2的区间buckets = Mmin:0.2:Mmax;% 或者假设你希望将它们均匀分布在固定数量的区间中,比如100buckets = linspace(Mmin,100,Mmax);

编辑:

假设你想根据某一列的值(比如第3列)来划分矩阵,你可以这样做:

% 将相关列定义为向量以便于处理v = M(:,3);% 假设你希望将它们均匀分布在固定数量的区间中,比如100buckets = linspace(min(v),100,max(v));% 现在查看每一行属于哪个区间bucket_idx = ones(size(v));for i = 2:length(buckets)    bucket_idx(v>buckets(i-1)&(v<buckets(i)) = i;end

这会告诉你每一行属于哪个区间,虽然最好能将这个过程向量化,但目前这是我能想到的最快的解决方案。我认为一旦你知道每样东西属于哪个区间,你应该能够解决剩下的问题。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注