如何测量数据框中特征之间的差异?
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 有类似 hist
或 boxplot
的工具。
如果你有线性核支持向量机,你可以使用它的系数作为输入特征的直接决策权重:
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之间是正相关还是负相关?