python调用MRMR提取特征实验Demo(机器学习实验四)

本文参考:
mRMR特征选择算法(feature_selection)的使用
python中使用mRMR

实验要求:
对于d维的trunk’s data,即两类样本,每类样本的均值分别为
1
协方差矩阵相同,均为单位矩阵,

  1. 仿真这组数据,其中d为100,每类数据的样本数为n;
  2. 谈谈理想情况下(即n充分大)的这组数据,从d=100个特征中选出k个特征的结果是{1,2,3,…,k}的合理性;
  3. 试用mRMR算法对这组数据进行特征选择,如从d=100个特征中选出k=10个。通过实验,给出当n相对k取很大时(比如10000)和很小时(比如n=10)所选出的特征;考察特征选择的结果受到样本数目的怎样的影响。

首先安装python库mrmr。链接如下:mifs
下载压缩包后直接在实验所在环境中

pip insatll 压缩包绝对路径\mrmr-master.zip

调用函数说明见链接一。
task1:
生成数据见源码。
task2:
n充分大时k越小合理性越高。
2
从2000个样本100维特征选出k个代表,k从1-10。正常应该时均值差异逐渐增大,选取特征数按均值增大顺序排列,k变大后选取特征顺序有一定波动。
task3:
每类样本数取10000和取10从100维特征选取10个。显然样本数越大,选取的特征越能区分样本,同时冗余性又越低。样本数越小选取特征没有太大区分度。
3
源代码如下:

import numpy as np
import mifs

if __name__ == '__main__':
    #生成数据
    d=100
    sample_num=1000
    cov=np.identity(d)
    mean1=[]
    for i in range(d):
        mean1.append(1/(i+1))
    mean1=np.sqrt(mean1)
    mean2=-1*mean1
    m1 = np.random.multivariate_normal(mean1, cov, sample_num)
    m2 = np.random.multivariate_normal(mean2, cov, sample_num)
    data=np.vstack((m1,m2))
    print("数据集样本数: ",data.shape[0])
    print("数据集特征数: ",data.shape[1])
    label=[0]*sample_num
    label.extend([1]*sample_num)
    # task2
    for k in range(1,11):
        feat_selector = mifs.MutualInformationFeatureSelector(method='MRMR',n_features=k)
        feat_selector.fit(data, np.array(label))
        print("取{}个特征:".format(k),feat_selector.ranking_)
    # task3
    n1=10
    n2=10000
    m1 = np.random.multivariate_normal(mean1, cov, n1)
    m2 = np.random.multivariate_normal(mean2, cov, n1)
    data1 = np.vstack((m1, m2))
    label1 = [0] * n1
    label1.extend([1] * n1)
    m1 = np.random.multivariate_normal(mean1, cov, n2)
    m2 = np.random.multivariate_normal(mean2, cov, n2)
    data2 = np.vstack((m1, m2))
    label2 = [0] * n2
    label2.extend([1] * n2)

    feat_selector = mifs.MutualInformationFeatureSelector(method='MRMR', n_features=10)
    feat_selector.fit(data1, np.array(label1))
    print("样本数为{}个时取10个特征:".format(n1), feat_selector.ranking_)
    feat_selector = mifs.MutualInformationFeatureSelector(method='MRMR', n_features=10)
    feat_selector.fit(data2, np.array(label2))
    print("样本数为{}个时取10个特征:".format(n2), feat_selector.ranking_)
  • 7
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值