- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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/
基本上,我的问题是,由于无监督学习是机器学习的一种,是否需要机器“学习”的某些方面并根据其发现进行改进?例如,如果开发了一种算法来获取未标记的图像并找到它们之间的关联,那么它是否需要根据这些关联来改进
生成模型和判别模型似乎可以学习条件 P(x|y) 和联合 P(x,y) 概率分布。但从根本上讲,我无法说服自己“学习概率分布”意味着什么。 最佳答案 这意味着您的模型要么充当训练样本的分布估计器,要么
是否有类似于 的 scikit-learn 方法/类元成本 在 Weka 或其他实用程序中实现的算法以执行常量敏感分析? 最佳答案 不,没有。部分分类器提供 class_weight和 sample_
是否Scikit-learn支持迁移学习?请检查以下代码。 型号 clf由 fit(X,y) 获取 jar 头型号clf2在clf的基础上学习和转移学习 fit(X2,y2) ? >>> from s
我发现使用相同数据的两种交叉验证技术之间的分类性能存在差异。我想知道是否有人可以阐明这一点。 方法一:cross_validation.train_test_split 方法 2:分层折叠。 具有相同
我正在查看 scikit-learn 文档中的这个示例:http://scikit-learn.org/0.18/auto_examples/model_selection/plot_nested_c
我想训练一个具有很多标称属性的数据集。我从一些帖子中注意到,要转换标称属性必须将它们转换为重复的二进制特征。另外据我所知,这样做在概念上会使数据集稀疏。我也知道 scikit-learn 使用稀疏矩阵
我正在尝试在 scikit-learn (sklearn.feature_selection.SelectKBest) 中通过卡方方法进行特征选择。当我尝试将其应用于多标签问题时,我收到此警告: 用户
有几种算法可以构建决策树,例如 CART(分类和回归树)、ID3(迭代二分法 3)等 scikit-learn 默认使用哪种决策树算法? 当我查看一些决策树 python 脚本时,它神奇地生成了带有
我正在尝试在 scikit-learn (sklearn.feature_selection.SelectKBest) 中通过卡方方法进行特征选择。当我尝试将其应用于多标签问题时,我收到此警告: 用户
有几种算法可以构建决策树,例如 CART(分类和回归树)、ID3(迭代二分法 3)等 scikit-learn 默认使用哪种决策树算法? 当我查看一些决策树 python 脚本时,它神奇地生成了带有
有没有办法让 scikit-learn 中的 fit 方法有一个进度条? 是否可以包含自定义的类似 Pyprind 的内容? ? 最佳答案 如果您使用 verbose=1 初始化模型调用前 fit你应
我正在使用基于 rlglue 的 python-rl q 学习框架。 我的理解是,随着情节的发展,算法会收敛到一个最优策略(这是一个映射,说明在什么状态下采取什么行动)。 问题 1:这是否意味着经过若
我正在尝试使用 grisSearchCV 在 scikit-learn 中拟合一些模型,并且我想使用“一个标准错误”规则来选择最佳模型,即从分数在 1 以内的模型子集中选择最简约的模型最好成绩的标准误
我正在尝试离散数据以进行分类。它们的值是字符串,我将它们转换为数字 0,1,2,3。 这就是数据的样子(pandas 数据框)。我已将数据帧拆分为 dataLabel 和 dataFeatures L
每当我开始拥有更多的类(1000 或更多)时,MultinominalNB 就会变得非常慢并且需要 GB 的 RAM。对于所有支持 .partial_fit()(SGDClassifier、Perce
我需要使用感知器算法来研究一些非线性可分数据集的学习率和渐近误差。 为了做到这一点,我需要了解构造函数的一些参数。我花了很多时间在谷歌上搜索它们,但我仍然不太明白它们的作用或如何使用它们。 给我带来更
我知道作为功能 ordinal data could be assigned arbitrary numbers and OneHotEncoding could be done for catego
这是一个示例,其中有逐步的过程使系统学习并对输入数据进行分类。 它对给定的 5 个数据集域进行了正确分类。此外,它还对停用词进行分类。 例如 输入:docs_new = ['上帝就是爱', '什么在哪
我有一个 scikit-learn 模型,它简化了一点,如下所示: clf1 = RandomForestClassifier() clf1.fit(data_training, non_binary
我是一名优秀的程序员,十分优秀!