不确定究竟是你在追求什么,所以我会尽量全面。会有几个步骤:
- 获取文件的列表
- 随机化文件
- 分割文件到训练和测试设置
- 做的事
1.使用文件列表
让我们假设你的文件都有扩展名.data
,它们都在文件夹/ml/data/
。我们想要做的是获得所有这些文件的列表。这只需要使用os
模块即可完成。我假设你没有子目录;如果有的话,这将会改变。
import os
def get_file_list_from_dir(datadir):
all_files = os.listdir(os.path.abspath(datadir))
data_files = list(filter(lambda file: file.endswith('.data'), all_files))
return data_files
所以,如果我们要调用get_file_list_from_dir('/ml/data')
,我们还是会回到所有在该目录中.data
文件列表(相当于在外壳的水珠/ml/data/*.data
)。
2.随机化的文件
我们不想采样是可预测的,因为这被认为是一个贫穷的方式来训练的ML分类。
from random import shuffle
def randomize_files(file_list):
shuffle(file_list)
注意random.shuffle
执行就地互换,以便它修改现有的列表。 (当然,这个功能是相当愚蠢的,因为你可以只调用shuffle
而不是randomize_files
;你可以写到另一个函数这使它更有意义。)
3.拆分文件到训练和测试设置
我会假设一个70:30的比率,而不是任何特定数量的文件。所以:
from math import floor
def get_training_and_testing_sets(file_list):
split = 0.7
split_index = floor(len(file_list) * split)
training = file_list[:split_index]
testing = file_list[split_index:]
return training, testing
4.做的事
这是你打开每个文件,做你的训练和测试步骤。我会留给你的!
交叉验证
出于好奇,你有没有考虑过使用cross-validation?这是一种分割数据的方法,以便您可以使用每个文档进行培训和测试。您可以自定义在每次“折叠”中使用多少文档进行培训。如果你喜欢,我可以更深入地了解这一点,但如果你不想这样做,我不会这样做。
编辑:好的,因为你要求我会多解释一下。
所以我们有一个1000个文档的数据集。交叉验证的想法是,您可以使用所有进行培训和测试 - 只是不要一次。我们将数据集分解成我们称之为“折叠”的东西。折叠次数决定了在任何给定时间点训练和测试集的大小。
比方说,我们想要一个10倍的交叉验证系统。这意味着训练和测试算法将运行十次。第一次将在文件1-100上进行训练并在101-1000上进行测试。第二轮将在101-200上进行训练,并在1-100和201-1000进行测试。
如果我们做了一个40倍的CV系统,第一次将在文档1-25上进行训练并在26-1000上进行测试,第二次将在26-40上进行训练并在1-25上进行测试, 51-1000,和。为了实现这样一个系统,我们仍然需要从上面进行步骤(1)和(2),但步骤(3)会有所不同。我们可以将函数变成一个generator - 我们可以像列表一样遍历一个函数,而不是分成两组(一个用于训练,一个用于测试)。
def cross_validate(data_files, folds):
if len(data_files) % folds != 0:
raise ValueError(
"invalid number of folds ({}) for the number of "
"documents ({})".format(folds, len(data_files))
)
fold_size = len(data_files) // folds
for split_index in range(0, len(data_files), fold_size):
training = data_files[split_index:split_index + fold_size]
testing = data_files[:split_index] + data_files[split_index + fold_size:]
yield training, testing
yield
这yield
关键字是什么使这个发电机。要使用它,你可以这样使用它:
def ml_function(datadir, num_folds):
data_files = get_file_list_from_dir(datadir)
randomize_files(data_files)
for train_set, test_set in cross_validate(data_files, num_folds):
do_ml_training(train_set)
do_ml_testing(test_set)
再次,这取决于你实现你的ML系统的实际功能。
作为一个免责声明,我不是专家的任何手段,哈哈。但是,如果您对我在这里写的任何内容有任何疑问,请告诉我!
Scikit学习有许多可用的功能做你想要什么样的例子。搜索网络,并在这里发帖,如果你发现在应用它们时遇到任何困难 –
这个问题有什么问题?为什么会员贬低这个问题? –
Stackoverflow不适用于收集意见。这是编程。你只是问而不显示任何努力。 –