我发现了两种在python中实现MRMR功能选择的方法。 包含该方法的论文的来源是:
这是我的数据集代码。
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
import pymrmr
pymrmr.mRMR(df, 'MIQ',6)
['功能4','功能5','功能2','功能6','功能1','功能3']
或使用第二种方式运行
pymrmr.mRMR(df, 'MID',6)
['功能4','功能6','功能5','功能2','功能1','功能3']
在上述数据集中,这两种方法都产生了这两个输出。 GitHub上的另一位作者声称您可以使用他的版本来应用MRMR方法。 但是,当我将它用于相同的数据集时,我得到了不同的结果。
方法2:使用MIFS应用MRMR
Github链接
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的所有不同值运行上面的迭代,那么两个方法实际上都不会产生相同的特征选择输出。
这里似乎有什么问题?