一、模块
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)