【发布时间】:2017-03-17 21:04:55
【问题描述】:
我正在对 pandas 数据框中包含的数据进行回归树分析。为了进行 V 折交叉验证,我需要将我的数据分成 V 个随机互斥的子集
这是我到目前为止所做的工作,我在数据框中添加了一个新列 V = 10,以表示每个样本属于哪个子集:
def Vfold_Subsets(Data,V):
subs = Data
Data['V'] = V
N = Data.shape[0]
n = N//V
for v in range(1,V):
sample = subs.sample(n = n)
Data['V'][Data.index.isin(sample.index)] = v
subs.drop(sample.index)
return Data
这种方法有效,但我感觉有更好的方法吗?这种方法的一个缺点是如果 N = 108,那么
for v in range(1,V+1):
print (v,': ',Data['V'][Data['V']==v].count())
返回:
1 : 10
2 : 10
3 : 10
4 : 10
5 : 10
6 : 10
7 : 10
8 : 10
9 : 10
10 : 18
而且我认为如果我能实现这样的目标会更好
1 : 10
2 : 11
3 : 11
4 : 11
5 : 11
6 : 11
7 : 11
8 : 11
9 : 10
10 : 10
这样我就不会将所有剩余的样本都集中到最后一个垃圾箱中。
【问题讨论】:
-
组需要均匀吗?
-
我不知道他们绝对需要,如果我有足够大的 N 我认为这不重要吗?但我更喜欢他们。