导出 4 个机器学习模型的预测时出错

Posted

技术标签:

【中文标题】导出 4 个机器学习模型的预测时出错【英文标题】:error when exporting predictions of 4 machine learning models 【发布时间】:2019-10-27 05:46:50 【问题描述】:

我正在使用 4 个不同的模型在等于 10 的 kfold 上训练和测试我的日期。我希望每个模型都导出每个拆分的预测和更正的类。

这是我的代码和结果:

for train_index, test_index in kf.split(X, labels):
    print('TRAIN:', train_index,
        'TEST:', test_index) 

    X_train, X_val = X[train_index], X[test_index]
    y_train, y_val = labels[train_index], labels[test_index]


    model1 = LinearSVC()
    model2 = MultinomialNB()
    model3 = LogisticRegression()
    model4 = RandomForestClassifier()

    model1.fit(X_train, y_train)
    model2.fit(X_train, y_train)
    model3.fit(X_train, y_train)
    model4.fit(X_train, y_train)

    result1 = model1.predict(X_val)
    result2 = model2.predict(X_val)
    result3 = model3.predict(X_val)
    result4 = model4.predict(X_val)

    df = pd.DataFrame(data = "id": X_val, "Prediction": y_val) 
    df.to_excel('result.xlsx')

到目前为止,我在下面有这个,但它只打印第一行 (1-198),但我不明白导出,你能帮我吗

我有大约 2000 个句子

【问题讨论】:

按原样,您只需在每个循环迭代中覆盖df(实际上它会打印最后一个迭代,而不是第一个);你需要在循环之前初始化你的df,然后在每次迭代中追加结果。 好的,我试试! 【参考方案1】:

当您在 KFold == 10 中设置 K 时,.split() 方法会将您的数据集拆分为 10 个部分。对于每次迭代,test_index 将是第 i 个部分的索引,而train_index 将是其余 9 个部分的索引。

在您的原始代码中,df 显示每次迭代的测试集(X_valY_val)(而不是预测)。

我不确定您是否打算这样做,但如果您想查看每个模型的预测,以下代码可以:

df = pd.DataFrame(data=
    "id": [],
    "ground_true": [],
    "original_sentence": [],
    "pred_model1": [],
    "pred_model2": [],
    "pred_model3": [],
    "pred_model4": [])

for train_index, test_index in kf.split(X, labels):
    print('TRAIN:', train_index,'TEST:', test_index)

    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = labels[train_index], labels[test_index]

    model1 = LinearSVC()
    model2 = MultinomialNB()
    model3 = LogisticRegression()
    model4 = RandomForestClassifier()

    model1.fit(X_train, y_train)
    model2.fit(X_train, y_train)
    model3.fit(X_train, y_train)
    model4.fit(X_train, y_train)

    result1 = model1.predict(X_val)
    result2 = model2.predict(X_val)
    result3 = model3.predict(X_val)
    result4 = model4.predict(X_val)

    temp_df = pd.DataFrame(data=
        "id": X_val,
        "ground_true": y_val,
        "original_sentence": verbatim_train_remove_stop_words[test_index],
        "pred_model1": result1,
        "pred_model2": result2,
        "pred_model3": result3,
        "pred_model4": result4)
    df = pd.concat([df, temp_df])


【讨论】:

你好,它会打印结果,但只针对最后一个 test_set,我想查看每个测试。你知道我如何显示原始句子吗? @kely789456123 我在每次迭代中使用concat 稍微编辑了代码,您可以这样做。至于显示原句,你是用什么方法把你的句子转化为输入特征的? 我使用这一行:ngram_vectorizer = CountVectorizer(binary=True, ngram_range=(1, 2)) ngram_vectorizer.fit(verbatim_train_remove_stop_words) X = ngram_vectorizer.transform(verbatim_train_remove_stop_words) total_verbatim = X.shape[0 ] 谢谢,但是否可以将所有 4 个 df 合并到一个唯一的数据框中,以便对于每个模型,我将在 next 旁边进行预测,以便获得 id; groundtrue, prediction_model1, prediction_model2, prediction_model3, prediction_model4 @kely789456123,我编辑了代码。看看它是否能达到你想要的效果。

以上是关于导出 4 个机器学习模型的预测时出错的主要内容,如果未能解决你的问题,请参考以下文章

预测错误结果的机器学习模型

R语言︱机器学习模型评价指标+(转)模型出错的四大原因及如何纠错

七个自动机器学习框架

什么是机器学习泛化能力举例子?

机器学习模型错误预测

《python机器学习—预测分析核心算法》:构建预测模型的一般流程