拆分存储在字典中的数据以进行训练,验证和测试

时间:2020-05-26 05:49:23

标签: python-3.x dictionary machine-learning

我有一个字典,其中包含从文件中读取的所有数据。字典具有三个键:

  1. 名称
  2. seq
  3. seq_len

这些键中的每个键都对应一个列表,因此我有一个列表字典,例如:


dictionary = {'name':['seq1','seq2','seq3','seq4',...,'seq10000'],
             'seq':['actatsts','gfsfsfsg','gstfdh','gsydg',...,'hdbcjshy'],
              'seq_len':[8,8,6,5,...,8]}

现在,我想统一拆分此词典,以便最终得到用于培训,验证和测试的词典,其中80%。如何使用字典数据结构实现这一目标?因为我不能在这里使用sklearn train_test_split。见识将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以尝试

# Way 1
df = pd.DataFrame(dictionary)
train_val = df.sample(frac=0.8, random_state=42)
# `how='all'` if there are missing values in your raw data.
test = df[~df.isin(train_val)].dropna(how='all')


# Way 2
np.random.seed(42)

length = len(dictionary['name'])
new_index = np.random.permutation(length)

train_val_index = new_index[:int(length*0.8)]
test_index = list(set(new_index) - set(train_val_index))
train_val = {key: [value[i] for i in train_val_index] for key, value in dictionary.items()}
test = {key: [value[i] for i in test_index] for key, value in dictionary.items()}

希望这会对您有所帮助。

答案 1 :(得分:1)

df_store = [] 
for i in range(len(namelist)) :
    temp_df = df_all[df_all.name==namelist[i]].copy()
    df_store.append(temp_df)

尽管使用熊猫代替列表会很好。

from sklearn.model_selection import train_test_split
train_test_split(list(dictionary.values()),train_size = 0.8)