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