用 Python 检查决策树分类器的准确性

Posted

技术标签:

【中文标题】用 Python 检查决策树分类器的准确性【英文标题】:Check the accuracy of decision tree classifier with Python 【发布时间】:2019-07-19 22:08:13 【问题描述】:

我写了一个函数,它接受数据集(excel / pandas)和一些值,然后用决策树分类器预测结果。我已经用 sklearn 做到了。 你能帮我解决这个问题吗,我浏览了网络和这个网站,但我找不到有效的答案。 我试过这样做,但它不起作用:

from sklearn.metrics import accuracy_score
score = accuracy_score(variable_list, result_list)

这是我得到的错误:

ValueError: Classification metrics can't handle a mix of continuous-multioutput and multiclass targets

这是代码(为了准确起见,我删除了代码)

import pandas as pd
import math
import xlrd
from sklearn.model_selection import train_test_split
from sklearn import tree

def predict_concrete_class(input_data, cement, blast_fur_slug,fly_ash,
                            water, superpl, coarse_aggr, fine_aggr, days):

    data_for_tree = concrete_strenght_class(input_data)

    variable_list = []
    result_list = []

    for index, row in data_for_tree.iterrows():
        variable = row.tolist()
        variable = variable[0:8]

        variable_list.append(variable)

        result_list.append(row[-1])

    decision_tree = tree.DecisionTreeClassifier()
    decision_tree = decision_tree.fit(variable_list,result_list)

    input_values = [cement, blast_fur_slug, fly_ash, water, superpl, coarse_aggr, fine_aggr, days]

    prediction = decision_tree.predict([input_values])

    info = "Prediction of future concrete class after "+ str(days)+" days: "+ str(prediction[0])

    return info

print(predict_concrete_class(data, 500, 0, 0, 200, 0, 1125, 613, 3))

【问题讨论】:

您到底在哪里遇到问题? 我不知道该怎么做。我试图在测试和训练中拆分值,但我不知道该怎么做,以及我应该使用什么值进行测试和训练 @Chris 我也更新了我的问题,请检查一下 您向我们提供了您尝试过的代码,但您没有告诉我们出了什么问题。您收到错误代码吗?如果有,是哪一个? 这是错误:[ValueError:分类指标无法处理连续多输出和多类目标的混合] 【参考方案1】:

如果您想检查系统的准确性,您应该执行交叉验证。

您必须将数据集分成两部分。第一个用于学习您的系统。然后对数据集的第二部分执行预测过程,并将预测结果与好的结果进行比较。使用这种方法,您可以在未学习的数据集上检查您的系统。

为了拆分您的集合,您应该使用 sklearn.model_selection 中的 train_test_split 您将随机拆分您的集合。

这是一个很好的讲座:https://machinelearningmastery.com/k-fold-cross-validation/

【讨论】:

我尝试过这样做,但失败了,出现了一些我不理解的错误。 查看问题,我已更新。我试过 (score = accuracy_score(variable_list, result_list) )【参考方案2】:

    将您的数据拆分为训练和测试:

    var_train, var_test, res_train, res_test = train_test_split(variable_list, result_list, test_size = 0.3)
    

    在训练集上训练你的决策树:

    decision_tree = tree.DecisionTreeClassifier()
    decision_tree = decision_tree.fit(var_train, res_train)
    

    通过计算测试集的准确率来测试模型性能:

    res_pred = decision_tree.predict(var_test)
    score = accuracy_score(res_test, res_pred)
    

    或者你可以直接使用decision_tree.score:

    score = decision_tree.score(var_test, res_test)
    

您遇到的错误是因为您试图将variable_list(这是您的输入功能列表)作为accuracy_score 中的参数传递。您应该传递真实标签和预测标签的列表。

【讨论】:

以上是关于用 Python 检查决策树分类器的准确性的主要内容,如果未能解决你的问题,请参考以下文章

决策树分类器的准确度得分

基于python的决策树能进行多分类吗

决策树如果数据集不够多,会导致分类准确率低吗

模型测试的时机和决策树分类器的训练

决策树分类器如何处理全局约束?

如何计算决策树的 AUC?