gpt4 book ai didi

machine-learning - 仅存在于给定类别中的特征没有被强烈预测到该类别中是否有原因?

转载 作者:行者123 更新时间:2023-11-30 09:02:35 24 4
gpt4 key购买 nike

总结和问题

我正在使用 liblinear 2.30 - 我在产品中注意到了类似的问题,所以我尝试通过简单的减少训练来隔离它,其中包含 2 个类,每个类 1 个训练文档,5 个在我的词汇量中具有相同权重的特征和 1 个简单的特征测试文档仅包含一项仅在类 2 中出现的功能。

  • a) 特征值的用途是什么?

  • b) 我想了解为什么这个包含仅存在于一个类中的单个功能的测试文档没有被强烈预测到该类中?

  • c) 我不希望每个功能有不同的值。将每个特征值从 1 增加到其他值是否有任何其他含义?我怎样才能确定这个数字?

  • d) 我的更改是否会对其他更复杂的训练产生不良影响?

我尝试过的

下面您将找到与简单训练相关的数据(请关注特征 5):

> cat train.txt
1 1:1 2:1 3:1
2 2:1 4:1 5:1
> train -s 0 -c 1 -p 0.1 -e 0.01 -B 0 train.txt model.bin
iter 1 act 3.353e-01 pre 3.333e-01 delta 6.715e-01 f 1.386e+00 |g| 1.000e+00 CG 1
iter 2 act 4.825e-05 pre 4.824e-05 delta 6.715e-01 f 1.051e+00 |g| 1.182e-02 CG 1
> cat model.bin
solver_type L2R_LR
nr_class 2
label 1 2
nr_feature 5
bias 0
w
0.3374141436539016
0
0.3374141436539016
-0.3374141436539016
-0.3374141436539016
0

这是模型的输出:

solver_type L2R_LR
nr_class 2
label 1 2
nr_feature 5
bias 0
w
0.3374141436539016
0
0.3374141436539016
-0.3374141436539016
-0.3374141436539016
0
1 5:10

下面您将看到我的模型的预测:

> cat test.txt
1 5:1
> predict -b 1 test.txt model.bin test.out
Accuracy = 0% (0/1)
> cat test.out
labels 1 2
2 0.416438 0.583562

这让我有点惊讶,因为预测只是 [0.42, 0.58],因为特征 5 只出现在类 2 中。为什么?所以我只是尝试将测试文档的特征值从 1 增加到 10:

> cat newtest.txt
1 5:10
> predict -b 1 newtest.txt model.bin newtest.out
Accuracy = 0% (0/1)
> cat newtest.out
labels 1 2
2 0.0331135 0.966887

现在我得到了更好的预测[0.03, 0.97]。因此,我尝试再次重新编译我的训练,并将所有特征设置为 10:

> cat newtrain.txt
1 1:10 2:10 3:10
2 2:10 4:10 5:10
> train -s 0 -c 1 -p 0.1 -e 0.01 -B 0 newtrain.txt newmodel.bin
iter 1 act 1.104e+00 pre 9.804e-01 delta 2.508e-01 f 1.386e+00 |g| 1.000e+01 CG 1
iter 2 act 1.381e-01 pre 1.140e-01 delta 2.508e-01 f 2.826e-01 |g| 2.272e+00 CG 1
iter 3 act 2.627e-02 pre 2.269e-02 delta 2.508e-01 f 1.445e-01 |g| 6.847e-01 CG 1
iter 4 act 2.121e-03 pre 1.994e-03 delta 2.508e-01 f 1.183e-01 |g| 1.553e-01 CG 1
> cat newmodel.bin
solver_type L2R_LR
nr_class 2
label 1 2
nr_feature 5
bias 0
w
0.19420510395364846
0
0.19420510395364846
-0.19420510395364846
-0.19420510395364846
0
> predict -b 1 newtest.txt newmodel.bin newtest.out
Accuracy = 0% (0/1)
> cat newtest.out
labels 1 2
2 0.125423 0.874577

对于第 2 类,预测仍然没问题:0.87

最佳答案

a) what's the feature value being used for?

n 个特征的每个实例都被视为 n 维空间中的一个点,附有给定的标签,例如 +1 或 -1(在您的情况下为 1 或 2)。线性 SVM 尝试找到最佳超平面将这些实例分成两个集合,例如 SetA 和 SetB。当 SetA 包含更多标有 +1 的实例并且 SetB 包含更多标有 -1 的实例时,超平面被认为比其他超平面更好。即更准确。最好的超平面被保存为模型。在您的情况下,超平面具有公式:

f(x)=w^T x

其中 w 是模型,例如第一种情况下的 (0.33741,0,0.33741,-0.33741,-0.33741)。

概率(LR)公式:

prob(x)=1/(1+exp(-y*f(x))

其中 y=+1 或 -1。请参阅 LIBLINEAR paper 的附录 L .

b) I wanted to understand why this test document containing a single feature which is only present in one class is not being strongly predicted into that class?

如果您预测 2 2:1 4:1 5:1,不仅 1 5:1 会给出弱概率,例如 [0.42,0.58] 你会得到[0.337417,0.662583],这似乎求解器对结果也不是很有信心,即使输入与训练数据集完全相同。

根本原因是f(x)的值,或者可以简单地看成x到超平面的距离。只有当距离无限大时,才可以 100% 确信 x 属于某个类别(参见 prob(x))。

c) I'm not expecting to have different values per features. Is there any other implications by increasing each feature value from 1 to something-else? How can I determine that number?

TL;DR

扩大训练集和测试集就像有一个更大的惩罚参数C(-c选项)。因为较大的 C 意味着对错误的惩罚更严格,直观上讲,求解器对预测更有信心。

<小时/>

扩大训练集的每个特征就像拥有一个更小的C。具体来说,逻辑回归对 w 求解以下方程。

min 0.5 w^T w + C ∑i log(1+exp(−yi w^T xi)) 

(LIBLINEAR paper 的等式(3))

对于大多数情况,yi w^T xi 为正,较大的 xi 意味着较小的 Σi log(1+exp(−yi w^T xi ))。所以效果有点类似于拥有较小的C,较小的C意味着较小的|w|。

另一方面,扩大测试集与拥有一个大的|w|是一样的。因此,训练集和测试集都放大的效果基本上是

(1). Having smaller |w| when training
(2). Then, having larger |w| when testing

因为(2)中的效果比(1)中的效果更显着,所以总的来说,扩大训练集和测试集就像拥有更大的|w|,或者拥有更大的C。

我们可以在数据集上运行,并将每个特征乘以 10^12。当 C=1 时,我们得到模型和概率

> cat model.bin.m1e12.c1
solver_type L2R_LR
nr_class 2
label 1 2
nr_feature 5
bias 0
w
3.0998430106024949e-12
0
3.0998430106024949e-12
-3.0998430106024949e-12
-3.0998430106024949e-12
0
> cat test.out.m1e12.c1
labels 1 2
2 0.0431137 0.956886

接下来我们在原始数据集上运行。当 C=10^12 时,我们有概率

> cat model.bin.m1.c1e12
solver_type L2R_LR
nr_class 2
label 1 2
nr_feature 5
bias 0
w
3.0998430101989314
0
3.0998430101989314
-3.0998430101989314
-3.0998430101989314
0
> cat test.out.m1.c1e12
labels 1 2
2 0.0431137 0.956886

因此,因为较大的C意味着对错误的惩罚更严格,所以直观上求解器对预测更有信心。

d) Could my changes affect other more complex trainings in a bad way?

从 (c) 中我们知道您的更改就像拥有更大的 C,这将带来更好的训练准确性。但几乎可以确定型号是over fitting当C太大时的训练集。因此,该模型无法承受训练集中的噪声,并且在测试准确性方面表现不佳。

对于寻找一个好的C语言,一个流行的方法是通过cross validation (-v 选项)。

<小时/>

最后

这可能是题外话,但您可能想了解如何预处理文本数据。按实例对数据进行标准化是很常见的(例如,lib Linear here 的作者建议)。

For document classification, our experience indicates that if you normalize each document to unit length, then not only the training time is shorter, but also the performance is better.

关于machine-learning - 仅存在于给定类别中的特征没有被强烈预测到该类别中是否有原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60017644/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com