使用mRMRe包从功能集中选择功能

时间:2018-02-22 21:05:20

标签: r machine-learning data-science feature-selection

我是R的新用户,并尝试使用 mRMRe R包(mRMR是众所周知的特征选择方法之一)从功能集中获取要素子集。请原谅我的问题是否简单,因为我真的想知道如何修复错误。以下是详细信息。

假设我有一个csv文件( gene.csv ),其功能集包含6个属性([G1.1.1.1][G1.1.1.2][G1.1.1.3],{{1 }},[G1.1.1.4][G1.1.1.5])和目标类变量[G1.1.1.6](' 1'表示正类,' -1'代表负数类)。这是一个示例[Output]文件:

gene.csv

我试图获得2个属性的最佳特征子集(超过6个属性),并编写了以下R代码。

[G1.1.1.1]  [G1.1.1.2]  [G1.1.1.3]  [G1.1.1.4]  [G1.1.1.5]  [G1.1.1.6] [Output]
11.688312   0.974026    4.87013     7.142857    3.571429    10.064935    -1
12.538226   1.223242    3.669725    6.116208    3.363914    9.174312      1
10.791367   0.719424    6.115108    6.47482     3.597122    10.791367    -1
13.533835   0.37594     6.766917    7.142857    2.631579    10.902256     1
9.737828    2.247191    5.992509    5.992509    2.996255    8.614232     -1
11.864407   0.564972    7.344633    4.519774    3.389831    7.909605     -1
11.931818   0           7.386364    5.113636    3.409091    6.818182      1
16.666667   0.333333    7.333333    4.333333    2           8.333333     -1

当我运行此代码时,我收到语句library(mRMRe) file_n<-paste0("E:\\gene", ".csv") df <- read.csv(file_n, header = TRUE) f_data <- mRMR.data(data = data.frame(df)) featureData(f_data) mRMR.ensemble(data = f_data, target_indices = 7, feature_count = 2, solution_count = 1) 的错误:

f_data <- mRMR.data(data = data.frame(df))

但是,csv文件的每一列中的数据都是实数。那么,如何更改R代码来解决此问题呢?另外,我不确定Error in .local(.Object, ...) : data columns must be either of numeric, ordered factor or Surv type 语句中target_indices的值应该是什么,因为我的目标类变量名是&#34; [输出]&#34;在gene.csv文件中。

如果有人能帮助我使用mRMRe R软件包获得基于gene.csv文件的最佳特征子集,我将非常感激。

2 个答案:

答案 0 :(得分:0)

我认为它与您的输出列有关,可能属于类integer。您可以使用class(df[[7]])

进行检查

要根据警告的要求将其转换为numeric,只需输入: df[[7]] <- as.numeric(df[[7]])

这对我有用。

至于另一个问题,在阅读文档后,设置target_indices = 7似乎是正确的选择。

答案 1 :(得分:0)

我通过修改我的代码解决了这个问题,如下所示。

library(mRMRe)
file_n<-paste0("E:\\gene", ".csv")
df <- read.csv(file_n, header = TRUE)
df[[7]] <- as.numeric(df[[7]])
f_data <- mRMR.data(data = data.frame(df))
results <- mRMR.classic("mRMRe.Filter", data = f_data, target_indices = 7,
                       feature_count = 2)
solutions(results)

工作得很好。代码的输出给出了所选2个特征的索引。