Sklearn选择最佳算法并处理内存问题

时间:2018-02-08 09:51:58

标签: python machine-learning scikit-learn out-of-memory classification

我有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:
        # ...

所以现在我可以打开文件并使用我的数据创建一个列表,但由于错误“分配形状张量时的,所以无法在所有14个文件上训练模型

我尝试使用参数 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代时,我遇到了同样的记忆问题。

1 个答案:

答案 0 :(得分:-1)

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