衡量模型的准确性和 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 分类器
衡量预测性能
您也可以反过来测试每个 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 中特征的重要性的主要内容,如果未能解决你的问题,请参考以下文章