【问题标题】:learning, validation, and testing classifier [closed]学习、验证和测试分类器 [关闭]
【发布时间】:2013-07-06 03:29:43
【问题描述】:

我正在为文本分类进行情绪分析,我想将 Twitter 中的推文分类为 3 类:正面、负面或中性。我有 210 个训练数据,我使用 朴素贝叶斯作为分类器。我正在使用 PHP 和 MySQL 作为训练数据的数据库来实现。 我所做的是按顺序进行的:

  1. 我将基于 10 倍交叉验证的训练数据拆分为 189 个训练数据和 21 个测试数据。
  2. 我将训练数据插入到数据库中,因此我的分类器可以根据训练数据进行分类
  3. 然后我使用分类器对测试数据进行分类。我得到了 21 个预测结果。
  4. 根据10-fold Cross Validation重复步骤2和3 10次
  5. 我对分类器的准确率一一进行评估,所以得到了10个准确率结果。然后我取结果的平均值。

我想知道的是:

  1. 学习过程是什么?输入、过程和输出是什么?
  2. 验证流程是什么?输入、过程和输出是什么?
  3. 测试流程是什么?输入、过程和输出是什么?

我只是想确保我对这 3 个过程(学习、验证和测试)的理解是正确的。

【问题讨论】:

    标签: machine-learning text-classification


    【解决方案1】:

    在您的示例中,我认为验证和测试之间没有有意义的区别。

    • 学习是指您训练模型时,这意味着您的输出通常是参数,例如回归模型中的系数或神经网络中连接的权重。在您的情况下,输出是在推文中看到单词 w 的概率的估计概率,给定推文正 P(w|+),看到给定负 P(w|-) 的单词,以及看到给定中性 P 的单词(w|*)。此外,在给定正面、负面、中性、P(~w|+) 等的情况下,在推文中看不到单词的概率。输入是训练数据,该过程只是通过测量单词出现的频率来估计概率(或不要发生)在您的每个课程中,即只是计数!

    • 测试可以让您了解经过训练的模型对您以前从未见过的数据的表现。训练往往会产生过拟合训练数据的输出,即系数或概率被“调整”到训练数据中的噪声,所以你需要看看你的模型在它没有的数据上的表现如何受过训练。在您的情况下,输入是测试示例,过程应用贝叶斯定理,输出是测试示例的分类(您根据概率最高进行分类)。

    我遇到过交叉验证——除了测试——在你不知道要使用什么模型(或者有额外的“外在”参数的情况下)估计不能在训练阶段完成)。您将数据分成 3 组。

    因此,例如,在线性回归中,您可能想要拟合直线模型,即在 y = px + c 中估计 pc,或者您可能想要拟合二次模型,即估计 pcqy = px + qx^2 + c。您在这里所做的是将您的数据分成三份。您使用数据的第 1 部分(训练示例)训练直线和二次模型。然后,您可以通过使用数据的第 2 部分(交叉验证示例)来查看哪个模型更好。最后,一旦你选择了你的模型,你就可以使用数据的第 3 部分(测试集)来确定你的模型有多好。回归是一个很好的例子,因为二次模型总是比直线模型更适合训练数据,所以不能只看训练数据上的错误来决定做什么。

    在朴素贝叶斯的情况下,可能使用交叉验证集探索不同的先验概率,即 P(+)、P(-)、P(*),然后使用测试集查看您在使用交叉验证选择的先验和使用训练数据估计的条件概率方面做得如何。


    作为如何计算条件概率的示例,考虑 4 条推文,它们已被人类分类为“+”或“-”

    • T1,-,包含“仇恨”、“愤怒”
    • T2,+,包含“不要”、“讨厌”
    • T3, +, 包含“爱”、“朋友”
    • T4,-,包含“愤怒”

    所以对于 P(hate|-),你将仇恨出现在负面推文中的次数加起来。它出现在 T1 而不是 T4,所以 P(hate|-) = 1/2。对于 P(~hate|-) 你做相反的事情,仇恨不会出现在 2 条负面推文中的 1 条中,所以 P(~hate|-) = 1/2。

    类似的计算得出 P(anger|-) = 1,P(love|+) = 1/2。

    美中不足的是,任何为 0 的概率都会在计算阶段搞砸,因此您不要使用零概率,而是使用非常低的数字,例如 1/n 或 1/n^2,其中 n 是训练示例的数量。所以你可以把 P(~anger|-) = 1/4 或 1/16。

    (我在answer 中输入的计算数学)。

    【讨论】:

    • 我在你的回答中不明白的是我应该如何计算 P(~w|+) 等?能给我举个例子 ?如果可以的话,给我一个与分类相关的例子,而不是回归,因为当我将它与我的案例联系起来时有点令人困惑。所以基本上,我们使用交叉验证来选择哪个模型是最好的?
    • 哦,顺便说一下你上面讲的例子,关于你把数据分成三份,那是另一种验证方法吗?不交叉验证?对不起,如果我错了。
    • @DamarSesarrahman 对于第一条评论,已修改答案。将数据重新拆分为 3,您将拥有一个训练集、一个交叉验证集和一个测试集。试试Andrew Ng's machine learning course on coursera for more information,或在cross-validated提问。
    • 非常感谢@tootone 的回答:D
    猜你喜欢
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 2019-06-13
    • 2021-10-18
    • 2011-10-04
    • 1970-01-01
    • 2017-12-25
    • 2013-07-19
    相关资源
    最近更新 更多