我找到了两种在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值运行上述迭代,那么这两种方法都不会产生相同的特征选择输出。
这里有什么问题?