因为要跑深度学习,需要用到mRMR特征选择算法来对生物数据进行特征选择,我就在网上搜mRMR算法的代码。因为我平时用R比较多,所以很想找到这个算法的R代码,终于找到了mRMRe这个R包,但是R的内存不够,不能用R。所以又找到了python的代码。下面将R和python的方法分别放在下面,供大家参考:

1.R

mRMRe包

Python中ylim怎么用 python mrmr_python

Python中ylim怎么用 python mrmr_开发语言_02

 

需要将数据框data转化成mRMR.data的形式才能被使用 需要运行下面这行代码

Python中ylim怎么用 python mrmr_python_03

但是代码报错,因为源码中的特征少于我们需要筛选的特征,因此我们需要进入 mRMRe包的源码,更改一个参数即可。

下面是进入R包的源码更改参数。

首先进入CRAN - Package mRMRe,载他的Package Source。

Python中ylim怎么用 python mrmr_Python中ylim怎么用_04

Python中ylim怎么用 python mrmr_开发语言_05

 

Python中ylim怎么用 python mrmr_虚拟环境_06

 

Python中ylim怎么用 python mrmr_虚拟环境_07

 

Python中ylim怎么用 python mrmr_Python中ylim怎么用_08

 

保存下来,关掉这个源码界面就可以啦。但是这时候,马上运行刚才的那行代码,是不行的。因为如果我们这时再打开源码,发现并没有保存成功。我们只需要下面这和一步骤即可。我们打开R的

Console 

Python中ylim怎么用 python mrmr_虚拟环境_09

 运行这几行代码:

Python中ylim怎么用 python mrmr_虚拟环境_10

然后再来到Rstudio,运行下面两行代码:

Python中ylim怎么用 python mrmr_python_11

这样,上面的error就解决啦。

可以继续运行代码,将数据框转换为 mRMR.data的形式。

Python中ylim怎么用 python mrmr_Python中ylim怎么用_12

 前期工作完成后,我们就可以进行特征选择啦:

Python中ylim怎么用 python mrmr_Python中ylim怎么用_13

由于我的电脑内存不够大,上面的代码没有运行出来

报错 :

Python中ylim怎么用 python mrmr_虚拟环境_14

解决方法:

1清理内存,运行代码gc()

2.查看R的内存,运行代码memory.limit().然后可以分配给R更大的内存,运行代码memory.limit(size:50000)

3.优化代码。(要是用这个方法,还不如直接杀了我。。。)

结果R没能运行出来。我就转战python了。

2.python

pymrmr包

(1)创建虚拟环境pymrmr(任意名字)
(2)激活虚拟环境(activate pymrmr),安装必要的包 (pip install numpy Cython)
(3)在github上的链接:GitHub - fbrundu/pymrmr: Python3 binding to mRMR Feature Selection algorithm (currently not maintained)下载安装包

Python中ylim怎么用 python mrmr_虚拟环境_15

Python中ylim怎么用 python mrmr_Python中ylim怎么用_16

(4)将安装包的解压文件复制到anaconda安装路径 D:\Anaconda3\envs\pymrmr(根据自己的电脑来)中
(5)打开控制台Anaconda Prompt(Anaconda3),进入D:\Anaconda3\envs\pymrmr目录中安装(运行下述命令)

Python中ylim怎么用 python mrmr_开发语言_17

 注意:一定要进入到pymrmr-master中,看看里面有没有set.py这个文件。

(6)运行代码:

Python中ylim怎么用 python mrmr_开发语言_18

pymrmr包安装成功,可以进入python,运行代码import pymrmr将包导入

Python中ylim怎么用 python mrmr_Python中ylim怎么用_19

 

折腾了三四天,终于完事儿啦。(我在写这博客的时候,正在用python跑这个算法,快一小时了,还没跑出来,有点慢哦~)

这是我第一次写博客,把我这几天与mRMR算法较劲的过程写下来,要是有什么错误的地方,还请大家能指出来~谢谢啦~~