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

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

我对两件事感到好奇:

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

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

【问题讨论】:

    标签: machine-learning regression libsvm


    【解决方案1】:

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

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

    1. 将您的数据集分成 k 折(例如,k = 10 很常见)
    2. 对于每个 k 折叠:
      1. 将数据分成训练集/测试集(当前折叠为测试集,其余为训练集)
      2. 仅使用 n-1 个 n 特征来训练您的 SVM 分类器
      3. 衡量预测性能
    3. 平均所有 k 次测试折叠的 n-1 特征分类器的性能
    4. 对所有其余功能重复 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 似乎专门指分类问题,而不是回归。同样,分类和回归之间可能存在我还不理解的关系。
    猜你喜欢
    • 2017-05-28
    • 2021-04-15
    • 2020-07-16
    • 2020-08-08
    • 2019-04-25
    • 2019-11-26
    • 2021-07-15
    • 2015-10-10
    • 2012-06-19
    相关资源
    最近更新 更多