在机器学习中多次使用相同的输入(输出不同)是否可以接受?
Is it acceptable to have the same input multiple times in machine learning (with different output)?
我想知道在机器学习中 是否可以接受一个数据集可能多次包含相同的输入,但每次都有另一个(有效!)输出。 对于例如在机器翻译的情况下,输入一个句子但每次给出不同的翻译。
一方面,我会说这绝对是可以接受的,因为输出的差异可能会更好地模拟小的潜在特征,从而使模型具有更好的泛化能力。另一方面,我担心多次使用相同的输入会使该给定输入的模型产生偏差——这意味着第一层(在深度神经网络中)可能在此输入上 "overfitted"。具体来说,当相同的输入在测试集中出现多次,但在训练集中从未出现,反之亦然时,这可能会很棘手。
这不是multi-label classification问题吗?
Multi-label classification is a generalization of multiclass classification, which is the single-label problem of categorizing instances into precisely one of more than two classes; in the multi-label problem there is no constraint on how many of the classes the instance can be assigned to
这看起来像 python 中的 this:
y = [[2, 3, 4], [2], [0, 1, 3], [0, 1, 2, 3, 4], [0, 1, 2]]
>>> MultiLabelBinarizer().fit_transform(y)
array([[0, 0, 1, 1, 1],
[0, 0, 1, 0, 0],
[1, 1, 0, 1, 0],
[1, 1, 1, 1, 1],
[1, 1, 1, 0, 0]])
至少你可以开始了。您可以将您的案例 "same input multiple times, but each time with another (valid!) output" 映射为多标签方法,然后使用技术来训练您的算法以适应这种情况。
其中一些:
- 转换成二进制class化问题
- 转化成多classclass化问题
- Ensemble methods
也是一个查找的好地方,这是site。
是的,相同的输入和不同但同样有效的输出是可以接受的。事实上,神经网络将非常适合这种情况,并且在混淆(模糊)的情况下没有理由失败 data.Neural 网络通过将线性函数与非线性函数组合来产生非线性函数来工作线性激活 function.Each 通过将非线性激活函数与先前变量的任意线性组合组合来创建新变量。
要最小化的损失函数由 LΘ=∑i(yi−FΘ(xi))2
组成。最小化它的一种简单方法是找到 LΘ
的局部最小值作为 Θ=(θ1,…,θM)
的函数。这种损失函数在受到诸如 (x1,x2,...,xN,y1) 和 (x1,x2,...,xN,y2) 等模糊数据时的损失函数,其中 y1≠y2 将使神经网络预测平均值y1 和 y2.
想象一个模型在数百万个数据点上训练,例如 (0,0),并且该模型的截距为零。现在将点 (0,100) 添加到训练集中。新数据集的均值将近似为零,模型仍将近似预测 0 -> 0 。
总的来说,你可以做任何有用的事情,这个"whatever works"也是回答你问题的关键。您需要做的第一件事是定义性能指标。如果要学习的函数定义为 X |-> Y
,其中 X 是源句,Y 是目标句,则性能度量是一个函数 f((x,y)) -> |R
,进而可以用来定义损失函数必须通过神经网络进行优化。
为简单起见,我们假设您使用准确性,即完全匹配句子的比例。如果你有像 (x,y1)
和 (x,y2)
这样相互矛盾的例子,那么你就不能再达到 100% 的准确率,这感觉很奇怪但不会造成任何伤害。
另一个很酷且重要的事实是,根据定义,每个句子只能正确匹配一次——假设你的 NN 的预测中没有随机成分。这意味着具有更多替代翻译的句子在构建模型中的权重不会更高。优点是这种方法可能会导致更好的泛化。不利的一面是,这种方法可能会导致优化损失停滞不前,这可能会导致模型卡在最佳选择之间。
一个更简洁的方法是考虑在您的性能定义中存在替代翻译 measure/loss 的事实。您可以将性能指标定义为
其中 1I 是指标函数。
这将提供更清晰的指标。显然你需要对你的目标指标采用上述推导
我想知道在机器学习中 是否可以接受一个数据集可能多次包含相同的输入,但每次都有另一个(有效!)输出。 对于例如在机器翻译的情况下,输入一个句子但每次给出不同的翻译。
一方面,我会说这绝对是可以接受的,因为输出的差异可能会更好地模拟小的潜在特征,从而使模型具有更好的泛化能力。另一方面,我担心多次使用相同的输入会使该给定输入的模型产生偏差——这意味着第一层(在深度神经网络中)可能在此输入上 "overfitted"。具体来说,当相同的输入在测试集中出现多次,但在训练集中从未出现,反之亦然时,这可能会很棘手。
这不是multi-label classification问题吗?
Multi-label classification is a generalization of multiclass classification, which is the single-label problem of categorizing instances into precisely one of more than two classes; in the multi-label problem there is no constraint on how many of the classes the instance can be assigned to
这看起来像 python 中的 this:
y = [[2, 3, 4], [2], [0, 1, 3], [0, 1, 2, 3, 4], [0, 1, 2]]
>>> MultiLabelBinarizer().fit_transform(y)
array([[0, 0, 1, 1, 1],
[0, 0, 1, 0, 0],
[1, 1, 0, 1, 0],
[1, 1, 1, 1, 1],
[1, 1, 1, 0, 0]])
至少你可以开始了。您可以将您的案例 "same input multiple times, but each time with another (valid!) output" 映射为多标签方法,然后使用技术来训练您的算法以适应这种情况。 其中一些:
- 转换成二进制class化问题
- 转化成多classclass化问题
- Ensemble methods
也是一个查找的好地方,这是site。
是的,相同的输入和不同但同样有效的输出是可以接受的。事实上,神经网络将非常适合这种情况,并且在混淆(模糊)的情况下没有理由失败 data.Neural 网络通过将线性函数与非线性函数组合来产生非线性函数来工作线性激活 function.Each 通过将非线性激活函数与先前变量的任意线性组合组合来创建新变量。
要最小化的损失函数由 LΘ=∑i(yi−FΘ(xi))2
组成。最小化它的一种简单方法是找到 LΘ
的局部最小值作为 Θ=(θ1,…,θM)
的函数。这种损失函数在受到诸如 (x1,x2,...,xN,y1) 和 (x1,x2,...,xN,y2) 等模糊数据时的损失函数,其中 y1≠y2 将使神经网络预测平均值y1 和 y2.
想象一个模型在数百万个数据点上训练,例如 (0,0),并且该模型的截距为零。现在将点 (0,100) 添加到训练集中。新数据集的均值将近似为零,模型仍将近似预测 0 -> 0 。
总的来说,你可以做任何有用的事情,这个"whatever works"也是回答你问题的关键。您需要做的第一件事是定义性能指标。如果要学习的函数定义为 X |-> Y
,其中 X 是源句,Y 是目标句,则性能度量是一个函数 f((x,y)) -> |R
,进而可以用来定义损失函数必须通过神经网络进行优化。
为简单起见,我们假设您使用准确性,即完全匹配句子的比例。如果你有像 (x,y1)
和 (x,y2)
这样相互矛盾的例子,那么你就不能再达到 100% 的准确率,这感觉很奇怪但不会造成任何伤害。
另一个很酷且重要的事实是,根据定义,每个句子只能正确匹配一次——假设你的 NN 的预测中没有随机成分。这意味着具有更多替代翻译的句子在构建模型中的权重不会更高。优点是这种方法可能会导致更好的泛化。不利的一面是,这种方法可能会导致优化损失停滞不前,这可能会导致模型卡在最佳选择之间。
一个更简洁的方法是考虑在您的性能定义中存在替代翻译 measure/loss 的事实。您可以将性能指标定义为
其中 1I 是指标函数。
这将提供更清晰的指标。显然你需要对你的目标指标采用上述推导