使用MRMR进行特征选择

6 python numpy pandas

我发现了两种在python中实现MRMR功能选择的方法.包含该方法的论文的来源是:

https://www.dropbox.com/s/tr7wjpc2ik5xpxs/doc.pdf?dl=0

这是我的数据集代码.

import numpy as np
import pandas as pd
from sklearn.datasets import make_classification

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

X, y = make_classification(n_samples=10000,
                           n_features=6,
                           n_informative=3,
                           n_classes=2,
                           random_state=0,
                           shuffle=False)

# Creating a dataFrame
df = pd.DataFrame({'Feature 1':X[:,0],
                                  'Feature 2':X[:,1],
                                  'Feature 3':X[:,2],
                                  'Feature 4':X[:,3],
                                  'Feature 5':X[:,4],
                                  'Feature 6':X[:,5],
                                  'Class':y})


y_train = df['Class']
X_train = df.drop('Class', axis=1)
Run Code Online (Sandbox Code Playgroud)

方法1:使用pymrmr应用MRMR

包含MID和MIQ

由作者发布的链接是 https://github.com/fbrundu/pymrmr

import pymrmr

pymrmr.mRMR(df, 'MIQ',6)
Run Code Online (Sandbox Code Playgroud)

['功能4','功能5','功能2','功能6','功能1','功能3']

或使用第二种方式运行

pymrmr.mRMR(df, 'MID',6)
Run Code Online (Sandbox Code Playgroud)

['功能4','功能6','功能5','功能2','功能1','功能3']

在上述数据集中,这两种方法都产生了这两个输出.GitHub上的另一位作者声称您可以使用他的版本来应用MRMR方法.但是,当我将它用于相同的数据集时,我得到了不同的结果.

方法2:使用MIFS应用MRMR

Github链接

https://github.com/danielhomola/mifs

import mifs

for i in range(1,11):

    feat_selector = mifs.MutualInformationFeatureSelector('MRMR',k=i)
    feat_selector.fit(X_train, y_train)

    # call transform() on X to filter it down to selected features
    X_filtered = feat_selector.transform(X_train.values)

    #Create list of features
    feature_name = X_train.columns[feat_selector.ranking_]


    print(feature_name)
Run Code Online (Sandbox Code Playgroud)

如果你对i的所有不同值运行上面的迭代,那么两个方法实际上都不会产生相同的特征选择输出.

这里似乎有什么问题?

小智 2

您可能需要联系原始论文的作者和/或 Github 存储库的所有者以获得最终答案,但这里的差异很可能来自于您正在比较 3 种不同的算法(尽管名称不同) 。

最小冗余最大相关性算法实际上是一系列特征选择算法,其共同目标是选择彼此远离但仍与分类变量具有“高”相关性的特征。

您可以使用互信息测量来衡量该目标,但要遵循的具体方法(即如何处理计算出的分数?以什么顺序?将使用哪些其他后处理方法?...)将不同于一位作者到另一位作者 - 即使在论文中,他们实际上也为您提供了两种不同的实现,MIQ并且MID.

因此,我的建议是只选择您更熟悉的实现(或者更好,在进行适当的验证后在您的管道中产生更好结果的实现),并报告您选择了哪个特定源以及原因。