Python 火车考试把一系列句子分开
我有一个句子列表。我想随机分为80%和20%,如下所示:Python 火车考试把一系列句子分开,python,Python,我有一个句子列表。我想随机分为80%和20%,如下所示: ['Hi.', 'Hi.', 'Run!', 'Wow!', 'Wow!', 'Fire!', 'Help!', 'Help!', 'Stop!', 'Wait!', 'Go on.', 'Hello!', 'I ran.', 'I see.', 'I see.', 'I try.', 'I won!',...] 我在想用面具 import random mask = [0] * 4000 + [1] *
['Hi.',
'Hi.',
'Run!',
'Wow!',
'Wow!',
'Fire!',
'Help!',
'Help!',
'Stop!',
'Wait!',
'Go on.',
'Hello!',
'I ran.',
'I see.',
'I see.',
'I try.',
'I won!',...]
我在想用面具
import random
mask = [0] * 4000 + [1] * 16000
random.shuffle(mask)
但它不像一个数据帧。
我试过了
percent=80
bol_mask =[random.randrange(100) < percent for i in range(100)]
我的问题是如何将掩码应用于一系列句子?并保持相同的拆分并应用于相应的ndarray?如果使用
scikit学习
是一个选项,您可以使用以下方法:
>>> from sklearn.model_selection import train_test_split
>>> print(x)
>>> x
['Hi.', 'Hi.', 'Run!', 'Wow!', 'Wow!', 'Fire!', 'Help!', 'Help!', 'Stop!', 'Wait!']
>>> len(x)
10
>>> x1
array([[ 553, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0],
[3430, 1114, 6, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0],
[1115, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0],
[3431, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0],
[3432, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0],
[2459, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0],
[3433, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0],
[1533, 3434, 6, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0],
[2460, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 394, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0]])
>>> x1.shape
(10, 20)
#assuming x, x1 have same length train test split should work fine.
>>> train, test, train_german, test_german = train_test_split(x,x1, test_size=0.2, shuffle=True)
>>> len(train)
8
>>> len(test)
2
>>> len(train_german)
8
>>> len(test)
2
事实上我已经自己解决了
bol_mask =[random.randrange(100) < 80 for i in range(20000)]
inv_mask = np.invert(bol_mask)
Eng_train =np.array(Eng)[bol_mask]
Eng_test =np.array(Eng)[inv_mask]
German_train = padded[bol_mask]
German_test = padded[inv_mask]
bol_mask=[random.randrange(100)<80表示范围内的i(20000)]
反向屏蔽=反向屏蔽(bol屏蔽)
Eng_序列=np.阵列(Eng)[bol_掩码]
Eng_测试=np.数组(Eng)[inv_掩码]
德文列车=软垫[波卢面罩]
德语测试=加垫[inv_面罩]
感谢Grayrigel,接受您的帮助添加了答案。让我知道它是否适合你。如果确实如此,请考虑接受/检查答案。但是如何保持其他列表的相同分割?我有相应的德语翻译。它是一个填充的nd数组,看起来像这样的数组([[553,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],dtype=int32)它将需要一个相应的拆分实际上不是真的,它在1中从sklearn.model\u selection导入train\u test\u split-->2 train,test=train\u test\u split(Eng,padded,test\u size=0.2,shuffle=True)返回ErrorValueError:值太多,无法解包我已经更新了答案。我很想知道它是否适合你。
bol_mask =[random.randrange(100) < 80 for i in range(20000)]
inv_mask = np.invert(bol_mask)
Eng_train =np.array(Eng)[bol_mask]
Eng_test =np.array(Eng)[inv_mask]
German_train = padded[bol_mask]
German_test = padded[inv_mask]