如何测量数据框中特征之间的差异?

Posted

技术标签:

【中文标题】如何测量数据框中特征之间的差异?【英文标题】:How to Measure the difference between features in dataframe? 【发布时间】:2019-06-18 09:22:04 【问题描述】:

我有一个包含大约 20000 行和 98 个特征(所有特征都是数字)的数据框和一个具有二进制值的目标特征:0 和 1。基本上,有两个总体(第一个总体目标值为 1 --50% --,第二个目标值为 0 -50%- 平衡数据)。在一个分类问题中,我试图在给定数据的情况下预测目标值。所以,我植入了一个监督学习算法(例如,SVM)来预测目标值,并且可以得到一个非常好的结果,准确率在 0.95 左右。这个结果给了我一个观点,即特征之间存在相当大的差异。因此,在下一步中,我必须知道造成这种差异的重要特征是什么,以及量化这两组人群之间特征差异的最佳方法是什么。有什么想法吗?

【问题讨论】:

您能否分享有关您的 SVM 模型的更多详细信息?您可以使用多种可能的方法,这可能会影响答案 【参考方案1】:

要按重要性对功能进行排名,您可以使用Weka 及其强大的功能选择工具包。有关更多信息和示例,请参阅this blogpost。顺便说一句,Weka 也有 SVM 实现。一旦你确定了重要的特征,你就可以想象它们在两个类之间有多么不同,例如通过绘制它们的类分布。 Matplotlib 有类似 histboxplot 的工具。

如果你有线性核支持向量机,你可以使用它的系数作为输入特征的直接决策权重:

Determining the most contributing features for SVM classifier in sklearn Visualising Top Features in Linear SVM with Scikit Learn and Matplotlib

【讨论】:

谢谢它很有用。但是,我的问题的第二部分是什么:如何衡量人口群体之间差异的大小?在特征选择之后(我选择了前 15 个重要特征),我将总体划分为第 0 类和第 1 类,并对两个总体中的所有特征对使用 Wilcoxon 最佳方法,以检查这两个特征之间是否存在显着差异!对吗? 嗯,我不是统计专家,但听起来很合理。我认为您只需要按类别绘制特征分布,但如果您寻求统计显着特征,这种测试可能是一个好主意。有一些关于这个话题的文章:machinelearningmastery.com/…,perso.uclouvain.be/michel.verleysen/papers/ecmlpkdd13jp.pdf【参考方案2】:

除了使用模型中支持向量的系数之外,您还可以尝试构建其他模型。

决策树方法将明确地向您显示哪些输入特征会分割数据 - 那些更靠近根的特征更重要,对于重要的一些定义。

如果您尝试使用诸如 PCA 之类的特征缩减技术并重建您的模型,则此处的组件系数会告诉您哪些贡献最大。

或者你可能完全是个暴徒,构建了很多模型而忽略了一些功能,然后看看哪个更好。

或者你也可以是横向的,考虑一下你的模型没有准确分类的几个点有什么不同。

【讨论】:

【参考方案3】:

您可以尝试将 KS-test 用于您的功能吗?例如,功能 1,按其类别划分。然后你得到两组。然后测试它们是来自不同的分布还是只记录 p 值。

当您拥有所有测试结果或 p 值时,使用来自不同分布/非常低 p 值的样本制作另一个模型。看看新模型是否更好或相似。

不确定这是否能取得任何成果。 想发表评论,但不能这样做。

【讨论】:

以上是关于如何测量数据框中特征之间的差异?的主要内容,如果未能解决你的问题,请参考以下文章

随机森林回归进行特征重要性排序时,如何同时得知特征x与预测量y之间是正相关还是负相关?

三种差异分析的整理

如何测量预训练模型(例如 vgg、resnet...)提取的图像特征之间的语义相似度?

创建一个差异矩阵比较R数据框中所有行之间的差异

计算数据框中所有行与特定行之间的差异

统计分析术语描述