衡量模型的准确性和 SVM 中特征的重要性

Posted

技术标签:

【中文标题】衡量模型的准确性和 SVM 中特征的重要性【英文标题】:measuring the accuracy of a model and the importance of a feature in SVM 【发布时间】:2011-11-18 23:41:18 【问题描述】:

我开始使用LIBSVM 进行回归分析。我的世界有大约 20 个特征和数千到数百万个训练样本。

我对两件事感到好奇:

    是否存在指示模型准确性或置信度的指标(可能在 .model 文件或其他位置)?

    如何确定某项功能是否重要?例如,如果我试图将体重预测为身高、肩宽、性别和头发颜色的函数,我可能会发现头发颜色并不是预测体重的重要特征。这是否反映在 .model 文件中,或者有什么方法可以找到?

【问题讨论】:

【参考方案1】:

libSVM 根据分类器的确定性计算测试点的 p 值(即,测试点离决策边界有多远以及边距有多宽)。

我认为您应该将确定特征重要性视为与训练 SVM 不同的问题。有 的“特征选择”方法(只需打开任何教科书),但一种易于理解、直接的方法是简单的交叉验证,如下所示:

    将您的数据集分成 k 折(例如,k = 10 很常见) 对于每个 k 折叠:
      将数据分成训练集/测试集(当前折叠为测试集,其余为训练集) 仅使用 n-1 个 n 特征来训练您的 SVM 分类器 衡量预测性能
    平均所有 k 次测试折叠的 n-1 特征分类器的性能 对所有其余功能重复 1-3

您也可以反过来测试每个 n 功能,但您可能会错过功能之间重要的二阶和更高阶交互。

不过,一般来说,SVM 擅长忽略不相关的特征。

您可能还想尝试使用主成分分析来可视化您的数据,以了解数据的分布方式。

【讨论】:

好东西,但有一个澄清——你说:“libSVM 根据分类器的确定性计算测试点的 p 值”——我正在做回归和不是分类? 我从未使用 libsvm 进行回归,所以我不确定。【参考方案2】:

F-score 是机器学习中特征选择常用的指标。​​

从 3.0 版开始,LIBSVM 库包含一个名为 tools 的目录。在该目录中有一个名为 fselect.py 的 python 脚本,它计算 F-score。要使用它,只需从命令行执行并传入包含训练数据的文件(以及可选的测试数据文件)。

python fselect.py data_training data_testing

输出由数据集中每个特征的 fscore 组成,对应于该特征对模型结果的重要性(回归分数)。

【讨论】:

看起来可以解决问题(对于我的问题的第二部分)。 FWIW,fselect.py 包含在 libsvm-3.1 的工具目录中(来自 www.csie.ntu.edu.tw/~cjlin/libsvm/),但您可以从 www.csie.ntu.edu.tw 单独下载/~cjlin/libsvmtools/fselect/fselect.py @fearless_fool--我的答案是为了解决你 Q 的 both 部分——即 F-statistic(或 F-score ) 是我对第一部分的回答。 我不明白 fselect 如何用于回归测试:它调用 tools/grid.py 而不是 gridregression.py,因此它无法选择好的参数进行训练。我错过了什么吗? ... 并阅读 f-score (2 * p * r) / (p + r) 的定义,f-score 似乎专门指分类问题,而不是回归。同样,分类和回归之间可能存在我还不理解的关系。

以上是关于衡量模型的准确性和 SVM 中特征的重要性的主要内容,如果未能解决你的问题,请参考以下文章

Scikits Learn:线性核 SVM 中的特征权重

如何使用线性支持向量机 (SVM) 分类器确定最重要/信息量最大的特征

LightGBM 的特征重要性

如何使用 SVM 的权重向量和逻辑回归进行特征重要性?

使用随机森林的基于 AUC 的特征重要性

cnn中的步长的目的和重要性是啥