【问题标题】:Sklearn Choose best algorithm and handle memory issueSklearn 选择最佳算法并处理内存问题
【发布时间】: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


【解决方案1】:

您可以使用 Pipeline 结合 GridSearchCV 根据评分标准选择最佳参数和算法。特别是,对于特征选择,您可以使用 scikit 的降维或特征选择here 下的类。使用举例,可以找here

【讨论】:

    猜你喜欢
    • 2010-12-19
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 2014-11-23
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    相关资源
    最近更新 更多