【特征降维】使用sklearn实现特征降维

1. 降维

1.1 一般的降维

指的是降低维度。

  • 在ndarray中,维数指的是:嵌套的层数。
  • 不同维数对应的结果如下:
维数 说明
0维 标量
1维 向量
2维 矩阵
3维
n维

1.2 机器学习中的降维

降低特征的个数。
【特征降维】使用sklearn实现特征降维_第1张图片

因为在进行训练的时候,我们都是使用特征进行学习。如果特征本身存在问题或者特征之间相关性较强,对于算法学习预测会影响较大。

2. 降维的两种方式

  1. 特征选择
  2. 主成分分析PCA(可以理解成一种特征提取的方式)

2.1 特征选择

2.1.1 定义

数据中包含冗余或无关变量(或称特征、属性、指标等)旨在从原有特征中找出主要特征。

2.1.2 方法
  • Filter(过滤式):主要探究特征本身特点、特征与特征和目标值之间关联
    • 方差选择法:低方差特征过滤
    • 相关系数
  • Embedded (嵌入式): 算法自动选择特征(特征与目标值之间的关联)
    • 决策树:信息熵、信息增益
    • 正则化:L1、L2
    • 深度学习:卷积等
2.1.3 sklearn中对应的模块

sklearn.feature_selection

3. 低方差特征过滤

删除低方差的一些特征

方差大小的含义:

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

3.1 sklearn中的API

  • sklearn.feature_selection.VarianceThreshold(threshold = 0.0)
    • 删除所有低方差特征
    • Variance.fit_transform(X)
      • X:numpy array格式的数据[n_samples,n_features]
      • 返回值:训练集差异低于threshold的特征将被删除。默认值是保留所有非零方差特征,即删除所有样本中具有相同值的特征。

3.2 代码实例

3.2.1 数据集

股票数据
【特征降维】使用sklearn实现特征降维_第2张图片

3.2.2 代码
import pandas as pd
from sklearn.feature_selection import VarianceThreshold

def featurechoice_variance_demo():
    '''
    特征选择——删除低方差特征
    :return:
    '''
    data = pd.read_csv('E:\ML\database\\factor_returns.csv', sep=',')
    print(data)
    # 1. 实例化一个转换器(删除方差<1的特征)
    transfer = VarianceThreshold(threshold=1)
    # 2. 调用fit_transform
    data = transfer.fit_transform(data.iloc[:, 1:10])
    print('删除低方差特征后的结果:\n', data)
    print('形状:\n', data.shape)

if __name__ == '__main__':
    featurechoice_variance_demo()

结果:
【特征降维】使用sklearn实现特征降维_第3张图片

4. 相关系数

4.1 定义

  • 皮尔逊相关系数(Pearson Correlation Coefficient)
    • 反映变量之间相关关系密切程度的统计指标

4.2 公式

【特征降维】使用sklearn实现特征降维_第4张图片

4.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为高度线性相关

4.4 sklearn中的API

  • from scipy.stats import pearsonr
    • x : (N,) array_like
    • y : (N,) array_like Returns: (Pearson’s correlation coefficient, p-value)

4.5 代码实例

数据集同上,用股票的

4.5.1 代码
import pandas as pd
from scipy.stats import pearsonr

def pearson_demo():
    '''
    相关系数计算
    :return:
    '''
    data = pd.read_csv('E:\ML\database\\factor_returns.csv', sep=',')
    factor = ['pe_ratio', 'pb_ratio', 'market_cap', 'return_on_asset_net_profit', 'du_return_on_equity', 'ev',
              'earnings_per_share', 'revenue', 'total_expense']
    print(len(factor))
    for i in range(len(factor)):
        for j in range(i, len(factor)-1):
            print(
                "指标%s与指标%s之间的相关性大小为%f" % (factor[i], factor[j + 1], pearsonr(data[factor[i]], data[factor[j + 1]])[0]))

    return None

if __name__ == '__main__':
    pearson_demo()

结果:
【特征降维】使用sklearn实现特征降维_第5张图片

5. 主成分分析

5.1 概述

  • 定义: 高维数据转化为低维数据的过程,在此过程中可能会舍弃原有数据、创造新的变量

  • 作用: 是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。

  • 应用: 回归分析或者聚类分析当中

5.2 sklearn中的API

  • sklearn.decomposition.PCA(n_components=None)
    • 将数据分解为较低维数空间
    • n_components:
      • 小数:表示保留百分之多少的信息
      • 整数:减少到多少特征
    • PCA.fit_transform(X) X:numpy array格式的数据[n_samples,n_features]
    • 返回值:转换后指定维度的array

5.2 代码实例

5.2.1 数据

对如下矩阵进行降维

[[2,8,4,5],
[6,3,0,8],
[5,4,9,1]]

5.2.2 代码
from sklearn.decomposition import PCA

def pca_demo():
    '''
    PCA降维 -- 特征提取
    :return:
    '''
    data = [[2, 8, 4, 5], [6, 3, 0, 8], [5, 4, 9, 1]]
    print(data)
    print(len(data[0]))

    # 1. 实例化PCA转换器(保留0.9的信息)
    transfer = PCA(n_components=0.9)
    # 2. 调用fit_transform
    data1 = transfer.fit_transform(data)
    print('保留90%的信息,降维结果为:\n', data1)
    print(data1.shape)

    # 1. 实例化PCA转换器(降维到3维)
    transfer2 = PCA(n_components=3)
    # 2. 调用fit_transform
    data2 = transfer2.fit_transform(data)
    print("降维到3维的结果:\n", data2)
    print(data2.shape)

    return None

if __name__ == '__main__':
    pca_demo()

效果:
【特征降维】使用sklearn实现特征降维_第6张图片

你可能感兴趣的:(sklearn,机器学习,python,降维,PCA)