机器学习之路5

特征降维

降维:

是指在某些限定条件下,降低随机变量(特征)的个数,得到一组“不相关”的主变量的过程。

此处的降维是指降低特征的个数,降维的效果是特征与特征之间不相关。

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

相关特征:

如:

相对湿度和降雨量。

熬夜时常和身体健康情况

等等

降维的两种方式:

特征选择

主成分分析(可以理解成一种特征提取的方式)

特征选择:

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

特征选择方法:

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

结果:

机器学习之路5_第1张图片

主成分分析(PCA)

是高维数据转化成低维数据的过程,在此过程中可能会舍弃原有数据,创造新的变量。它的作用是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。

代码

#导入主成分分析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

结果

机器学习之路5_第2张图片

可以看到,输入数据的三行四列,在输出时降低到了3行两列 

你可能感兴趣的:(机器学习,深度学习,人工智能)