代码之家  ›  专栏  ›  技术社区  ›  user9238790

使用MRMR进行特征选择

  •  8
  • user9238790  · 技术社区  · 7 年前

    我找到了两种在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)
    

    方法1:使用pymrmr应用MRMR

    包含MID和MIQ

    由作者出版 链接是 https://github.com/fbrundu/pymrmr

    import pymrmr
    
    pymrmr.mRMR(df, 'MIQ',6)
    

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

    或者使用第二种方式运行

    pymrmr.mRMR(df, 'MID',6)
    

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

    上述数据集上的这两种方法都会产生这2个输出。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)
    

    如果对所有不同的i值运行上述迭代,那么这两种方法都不会产生相同的特征选择输出。

    这里有什么问题?

    1 回复  |  直到 7 年前
        1
  •  2
  •   carrdelling    7 年前

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

    Minimum redundancy Maximum relevance algorithms 实际上是一系列特征选择算法,其共同目标是选择 相互远离,同时与分类变量仍具有“高”相关性

    您可以使用互信息度量来衡量该目标,但要遵循的具体方法(即如何处理计算的分数?顺序如何?将使用哪些其他后处理方法?…)不同的作者会有所不同,即使在论文中,他们实际上给出了两种不同的实现, MIQ MID

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