【问题标题】:How to get class names in classification?如何在分类中获取类名?
【发布时间】:2019-11-11 04:52:43
【问题描述】:

我是 ML 的初学者,我构建了一个 SVM 模型来对一些输入进行分类。 我用熊猫来读取我的数据集。分类结果打印为索引,其中每一个都对应于我的数据集中标签(类)的名称。如何将这些索引转换为它们的名称(字符串)?

例如,我有三个类:[Question,General,Info],但是当我尝试对输入进行分类时,结果是以下数字之一:[0,1,2] 我想将这些数字转换为我拥有的类的名称。

这是我的代码的一部分:

data = pandas.read_csv("classes.csv",encoding='utf-16' )


Train_X, Test_X, Train_Y, Test_Y = sklearn.model_selection.train_test_split(data['input'],data['Class'],test_size=0.3,random_state=None)

Test_YTrain_Y 是数字(类)列表,每个数字都指一个类,我怎么知道每个数字代表什么?

【问题讨论】:

    标签: machine-learning classification python-3.6 svm


    【解决方案1】:

    您需要知道的第一件事是:您的模型正在按预期工作。大多数时候,它会为每个标签输出一个概率。因此,如果您的模型输出类似[0.1, 0.1, 0.8] 的内容,则意味着您要分类的样本有 80% 属于位置 2 的标签。如果您按照问题中指示的顺序传递所有标签,即 @ 987654322@,表示该样本属于info类。注意这里的顺序很重要,当你在代码中输入模型时,你需要确保这一点。

    因此,要输出字符串而不是数字,您需要获取模型输出的数字,并检查包含此关系的列表或字典中的标签。以列表为例:

    labels_str = ['question', 'general', 'info']
    
    # preds is a np.array containing the probabilities
    preds = model(some_sample)
    
    # this function returns the position of the max value in the array
    pos_pred = preds.argmax() 
    
    print ("The label for this sample is {}".format(labels_str[pos_pred])
    
    

    你明白了吗?

    【讨论】:

    • 谢谢,但是我不知道标签顺序的问题,和我数据集中的顺序不一样。此外,每当我在数据集中添加新样本时,此顺序都会发生变化。那么,除了自己检查订单,还有其他方法吗?
    • 好吧,我不知道你是如何编码的,但你必须控制它以使用任何 ML 模型。在将这些数据发送到您的模型之前,您需要清理这些数据以保持相同的顺序,否则您可能会对样本进行错误分类。
    • 好的。谢谢你..!
    猜你喜欢
    • 1970-01-01
    • 2018-02-19
    • 2020-11-10
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    相关资源
    最近更新 更多