是指在某些限定条件下,降低随机变量(特征)的个数,得到一组“不相关”的主变量的过程。
此处的降维是指降低特征的个数,降维的效果是特征与特征之间不相关。
因为在进行训练的时候,我们都是使用特征在进行学习,如果特征本身存在问题或者特征之间相关性比较强,对于算法学习预测会影响较大。
相关特征:
如:
相对湿度和降雨量。
熬夜时常和身体健康情况
等等
特征选择
主成分分析(可以理解成一种特征提取的方式)
数据中包含冗余或相关变量(或称特征,属性,指标等),旨在从原有特征中找出主要特征。
Filter(过滤法):主要探究特征本身的特点,特征与特征和目标值之间关联。1 方差选择法:第方差特征过滤。 2 相关系数法。
Embedded(嵌入式):算法自动选择特征(特征与目标值之间的关联)。 1 决策树:信息熵,信息增益。2 正则化:L1,L2 。 3 深度学习:卷积等。
删除低方差的一些特征,因为:特征方差越小,某个特征大多样本的值就比较接近。特征方差越大,某个特征的很多样本的值都有差别。
皮尔逊相关系数,反映了变量之间相关关系密切程度的统计指标。
公式:
相关系数的值介于-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 为高度线性相关。
代码:
#导入低方差特征值过滤的模块 from sklearn.feature_selection import VarianceThreshold #导入计算两个特征值变量之间相关系数的模块 from scipy.stats import pearsonr
#特征值的低方差过滤 def variance_demo(): ''' 过滤低方差的特征 :return: ''' #1 获取数据 data = pd.read_csv('factor_returns.csv') # 保留数据额所有行,和第2到倒数第2列 data = data.iloc[:,1:-2] print(data,data.shape) #2 实例化一个转换器类,threshold设置阈值,特征值的方差低于5的特征都会被删除 tranfer = VarianceThreshold(threshold=10) #3 调用fit_transform data_new = tranfer.fit_transform(data) print('data_new:\n' ,data_new,data_new.shape) #计算两个变量的相关系数,返回结果的第一个值是相关系数,大于0是正相关,小于0是负相关 r1 = pearsonr(data['pe_ratio'],data['pb_ratio']) r2 = pearsonr(data['revenue'],data['total_expense']) print('相关系数是:\n',r1) print('相关系数是:\n', r2) return None
结果:
是高维数据转化成低维数据的过程,在此过程中可能会舍弃原有数据,创造新的变量。它的作用是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。
代码
#导入主成分分析PCA模块 from sklearn.decomposition import PCA
#主成分分析PCA def pca_demo(): ''' PCA降低维度 :return: ''' #3行4列的数据,4个特征 data = [[2,8,4,5],[6,3,0,0],[5,4,9,1]] #1 实例化一个转换器类 #把4个特征,降低为2个特征(传入整数就是要降低到几维,传小数就是保留百分之多少的信息) transfer = PCA(n_components=0.95) #2 调用fit_transform data_new = transfer.fit_transform(data) print('data_new: \n',data_new) return None
结果
可以看到,输入数据的三行四列,在输出时降低到了3行两列