特征降维-Filter(过滤式)特征选择

一、模块

sklearn. feature_selection

二、过滤式

1、低方差特征过滤

删除低方差的一些特征,再结合方差的大小来考虑这个方式的角度

  • 特征方差小:某个特征大多样本的值比较相近
  • 特征方差大:某个特征很多样本的值都有差别

1.1、API

  • sklearn .feature_ selection .VarianceThreshold(threshold=0.0)

    • 删除所有低方差特征

    • Variance.fit_transform(X)

      • X: numpy array格式的数据[ n_ samples, n_features]
      • 返回值: 训练集差异低于 threshold的特征将被删除。默认值是保留所有非零方差特征,即删除所有样本中具有相同值的特征。

2、相关系数

2.1、皮尔逊相关系数

反映变量之间相关关系密切程度的统计指标

公式:

示例:

结果为: 0.9942

所以我们最终得出结论是广告投入费与月平均销售额之间有高度的正相关

2.2、取值范围

相关系数的值介于-1与+1之间,即-1≤r≤+1。其性质如下

  • 当r>0时,表示两变量正相关,r<0时,两变量为负相关

  • 当|r|=1时,表示两变量为完全相关,当r=0时,表示两变量间无相关关系

  • 当0<|r|<1时,表示两变量存在一定程度的相关。且r越接近1,两变量间线

    性关系越密切;|r|越接近于0,表示两变量的线性相关越弱

  • 一般可按三级划分:|r|<0.4为低度相关;0.4≤|r|≤0.7为显著性相关;0.7≤|r|

    <1为高度线性相关

2.3、API

from scipy.stats import pearsonr

  • x:(N, )array_like
  • y: (N, ) array_like Returns:(Pearson’s correlation coefficient, p-value)

三、代码实现

		from scipy.stats import pearsonr
		
		def variance_demo():
		    #过滤低方差特征
		    #1、获取数据
		    data = pd.read_csv("factor_returns.csv")
		    
		    data = data.iloc[:,1:-2]
		    print("data:\n",data)
		    #2、实例化一个转换器
		    transfer = VarianceThreshold()
		    #3、调用fit_transform
		    data_new = transfer.fit_transform(data)
		    print("data_new:\n",data_new)
		    #计算某两个变量之间的相关系数
		    r1 = pearsonr(data["pe_ratio"],data["pb_ratio"])
		    r2 = pearsonr(data["revenue"],data["total_expense"])
		    print("相关系数:\n",r2)
		    return None

四、运行结果

data:
       pe_ratio  pb_ratio  ...       revenue  total_expense
0       5.9572    1.1818  ...  2.070140e+10   1.088254e+10
1       7.0289    1.5880  ...  2.930837e+10   2.378348e+10
2    -262.7461    7.0003  ...  1.167983e+07   1.203008e+07
3      16.4760    3.7146  ...  9.189387e+09   7.935543e+09
4      12.5878    2.5616  ...  8.951453e+09   7.091398e+09
...        ...       ...  ...           ...            ...
2313   25.0848    4.2323  ...  1.148170e+10   1.041419e+10
2314   59.4849    1.6392  ...  1.731713e+09   1.089783e+09
2315   39.5523    4.0052  ...  1.789082e+10   1.749295e+10
2316   52.5408    2.4646  ...  6.465392e+09   6.009007e+09
2317   14.2203    1.4103  ...  4.509872e+10   4.132842e+10

[2318 rows x 9 columns]
data_new:
 [[ 5.95720000e+00  1.18180000e+00  8.52525509e+10 ...  2.01000000e+00
   2.07014010e+10  1.08825400e+10]
 [ 7.02890000e+00  1.58800000e+00  8.41133582e+10 ...  3.26000000e-01
   2.93083692e+10  2.37834769e+10]
 [-2.62746100e+02  7.00030000e+00  5.17045520e+08 ... -6.00000000e-03
   1.16798290e+07  1.20300800e+07]
 ...
 [ 3.95523000e+01  4.00520000e+00  1.70243430e+10 ...  2.20000000e-01
   1.78908166e+10  1.74929478e+10]
 [ 5.25408000e+01  2.46460000e+00  3.28790988e+10 ...  1.21000000e-01
   6.46539204e+09  6.00900728e+09]
 [ 1.42203000e+01  1.41030000e+00  5.91108572e+10 ...  2.47000000e-01
   4.50987171e+10  4.13284212e+10]]
相关系数:
 (0.9958450413136111, 0.0)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值