【发布时间】:2018-07-18 20:10:17
【问题描述】:
我有一个 36000 列(0 或 1)和 26500 行的 .csv 文件,代表我的训练集的输入。我有一个 1 列和 26500 行的 .csv 文件,代表输出(0 或 1)
我使用 sklearn(在 80/20 上分离我的数据:训练/测试)来训练我的模型并对其进行验证。
第一个问题:我不知道如何选择最适合这个问题的算法
clf = MLPClassifier(solver='lbfgs',alpha=1e-4, hidden_layer_sizes=(5, 5), random_state=1)
例如,我试过那个。但是我怎么知道它是最好的呢?我不能尝试所有的算法,太长了。
第二个问题:我遇到了内存问题:我不得不将我的文件分成 14 个不同的文件(每个文件 2000 行),因为我无法用 python 打开整个文件:
with open(file_i, 'rt') as csvfile:
lecteur = csv.reader(csvfile, delimiter=',')
for ligne in lecteur:
# ...
所以现在我可以打开文件并使用我的数据创建一个列表,但是由于错误“OOM when allocating tensor of shape”,无法在所有 14 个文件上训练模型 p>
我尝试使用参数warm_start = True,因为我发现它可以让模型重用之前调用的解来拟合模型。
def train(clf,means,output):
clf.fit(means,output)
return clf
for i in range(0,14):
means = import_input(i)
output = import_output(i,means)
clf = MLPClassifier(solver='lbfgs',alpha=1e-4, hidden_layer_sizes=(30000, 5), random_state=1, warm_start = True)
clf = train(clf,means,output)
但它不起作用。
第三个问题:当我找到适合我的问题的最佳算法时,我怎样才能找到最佳参数?我尝试使用遗传算法来找到这些,但是当我尝试生成 20 代时,我遇到了同样的内存问题。
【问题讨论】:
-
您可以使用数据集的随机选择部分(比如说 5% 到 10%)并针对许多不同的算法对其进行测试。采用您拥有的最佳(或前 5 个)算法,并使用您的完整集运行它们。参数优化也一样 用一小部分数据集尝试不同的参数组合。 (sklearn 为该任务带来了 gridsearch)
标签: python machine-learning scikit-learn out-of-memory classification