将对象列表拆分为两个按大小比例列表和对象键分区

时间:2017-04-19 19:43:53

标签: javascript node.js dataset partitioning

我有一个对象列表,我们称之为dataset,我想分成两个新列表,让我们称之为trainSettestSet,同时读取输入{{1逐行列出,其中列表对象继承自dataset读取流对象(在此特定情况下)。

让我们定义分割比率node,以便将split_ratio=0.75分成dataset至少75%的trainSet和25%的dataset 1}}列出长度(例如):

testSet

逐行阅读时我会做

var dataSize = dataset.length,
    lim_75 = 0,
    lim_25 = 0;

lim_75 = Math.floor(dataSize * split_ratio); // e.g.: .75
if (lim_75 < 1) lim_75 = 1;
lim_25 = Math.floor(dataSize * (1 - split_ratio)); // eg: 1-.75=.25
if (lim_25 < 1) lim_25 = 1;

这是有效的,我将在最后得到两个大小为0.75的while (row = dataset.next()) { var r = Math.random(); // split randomness seed if (r < split_ratio && lim_75_count < lim_75 || r >= split_ratio && lim_25_count > lim_25) { lim_75_count += 1; trainSet.write(row); } else { lim_25_count += 1; testSet.write(row); } } trainSet列表长度为0.25的testSet

现在,假设dataset列表中的对象具有类似

的结构
dataset

其中{ objectId: 12345, objectClass: 'CLASS_A` objectValue: 'The quick brown fox jumps over the lazy dog' } 属于objectClassCLASS_A等值的枚举。

我希望保留上面针对CLASS_Bsplit_ratio长度比率定义的trainSet,但添加一个新条件,让我以新比例分割testSet ,根据此分区映射,按对象键dataset对列表进行分区:

objectClass

哪个是正确的分区条件,哪个适用于[ { objectClass: 'TYPE_A', ratio: 0.30 }, { objectClass: 'TYPE_B', ratio: 0.20 }, { objectClass: 'TYPE_C', ratio: 0.50 } ] ,第一个基于大小?

示例

一个澄清的现实世界的例子: 假设AND,如果`dataset.length = 100,则必须split_ratio=.70trainSet.length=70

现在,给定两个testSet.length=30类型的objectClass值为

ratioCLASS_A=0.20,我们CLASS_B=0.80 0.2*70/100CLASS_A trainSet必须有0.80*30/100testSet项,0.80*70/100中的CLASS_BtrainSet 0.20*30/100CLASS_BtestSetCLASS_A项。

在这种情况下,假设分区映射中只有CLASS_B[ { objectClass: 'TYPE_A', ratio: 0.20 }, { objectClass: 'TYPE_B', ratio: 0.80 } ] 类型,如:

<input type='text' name='date_from' class="form-control date_picker" placeholder="Data de ida..." id='datetimepicker1' required/>
<div id="datepicker1" class="calendar"></div>

0 个答案:

没有答案