虽然在Python中创建训练,测试和交叉验证示例,但我看到默认方法为-:
1。跳过标题后读取数据集2.创建训练,测试和交叉验证样本
import csv
with open('C:/Users/Train/Trainl.csv', 'r') as f1:
next(f1)
reader = csv.reader(f1, delimiter=',')
input_set = []
for row in reader:
input_set.append(row)
import numpy as np
from numpy import genfromtxt
from sklearn import cross_validation
train, intermediate_set = cross_validation.train_test_split(input_set, train_size=0.6, test_size=0.4)
cv, test = cross_validation.train_test_split(intermediate_set, train_size=0.5, test_size=0.5)
不过,我的问题是,我读入numpy数组的csv文件中有一个字段说“ A”,并且所有采样都应遵循该字段。也就是说,所有具有“ A”的相似值的条目都应放在一个样本中。
Line #|A | B | C | D
1 |1 |
2 |1 |
3 |1 |
4 |1 |
5 |2 |
6 |2 |
7 |2 |
Required:行1,2,3,4应该放在“一个”样本中,而5,6,7应该放在“一个”样本中。A列的值是唯一的ID,对应于一个单一实体(可以看作是一个SINGLE用户的横截面数据点,因此必须输入一个唯一的train,test或cv样本), 并且有很多这样的实体,因此需要按实体ID进行分组。
B,C,D列可以具有任何值,,但不需要对其进行分组保留。 (奖金:我可以将多个字段的采样分组吗?)
我尝试过的事情:
A。 查找A的所有唯一值-将其表示为我的样本,我现在将样本分配到st火车,中间&cv&test->然后将其余的行用于此“ A”值这些文件。也就是说,如果火车的条目为“ 3”,测试的结果为“ 2”,cv的值为“ 1”,则所有A值为3的行都将进入火车,所有2的行都将进入测试,而所有1的行都将进入cv。] >
B。我还根据这里的线程Numpy: How to split/partition a dataset (array) into training and test datasets for, e.g., cross validation?尝试了numpy.random.shuffle或numpy.random.permutation
C。课程的第三个选项是编写自定义函数
,该操作将进行分组,然后根据每个组中数据点的数量来平衡训练,测试和简历数据集。但是,只是想知道,是否已经有一种有效的方法来实现这一目标?请注意,我的数据集非常庞大,因此理想情况下,我希望采用确定性的方式对数据集进行分区,而无需进行多次眼球扫描以确保分区正确。
编辑第2部分:
因为我没有找到符合我的采样标准的任何东西-我实际上写了一个模块来进行分组约束采样。
这是它的github代码。该代码并不是为大数据编写的,因此效率不是很高。您应该分叉此代码吗?请指出如何改善运行时间。https://github.com/ekta1007/Sampling-techniques/blob/master/sample_expedia.py[在Python中创建训练,测试和交叉验证示例时,我看到默认方法为-:1.跳过标题后,读取数据集2.创建训练,测试和交叉验证...
将引入偏见