机器学习之特征降维中的特征选择和主成分分析

一、特征降维含义

  • 指在某些特定条件下,降低随机变量(特征)个数,得到一组“不相关”主变量的过程。因为在进行训练的时候,我们都是使用特征进行学习。如果特征本身存在问题或者特征之间相关性较强,对于算法学习预测影响较大,防止冗余信息。

二、特征降维的两种方式

方法一:特征选择

  • 数据中包含冗余或相关变量(或特征、属性、指标等),旨在从原有特征中找出主要特征
  • 方法:
  1. Filter(过滤式):主要考虑特征本身特点、特征与特征与目标值之间的关联
    a. 方差选择法:低方差特征过滤(方差越小,特征不明显,就不是能够衡量特征的指标)
    b. 相关系数:就是统计学中所学的相关系数知识,特征与特征之间的相关程度
  2. Embedded(嵌入式):算法自动选择特征,特征值与目标值之间的关联
    a. 决策树:信息熵、信息增益
    b. 正则化:L1,L2
    c. 深度学习:卷积等
涉及API(Embedded等算法学习阶段再了解,这里主要是说明Filter型中的方差选择法和相关系数法)
  • 方差选择法
sklearn.feature_selection.VarianceThreshold(threshold= 0.0)
  1. 删除所有低方差特征
  2. VarianceThreshold.fit_transform(X)
    X:numpy array格式的数据[n_samples,n_features]
    返回值:训练集差异低于threshold的特征将被删除。默认是保留所有非零方差特征,即删除所有样本中具有相同值的特征。
  • 相关系数法
    pyhon中的scipy下有专门计算相关系数的工具,导入包即可,当然也可以通过散点图观察是否具有相关关系,对于这一部分的处理可以参考多元回归中的多重共线性的处理方式
from scipy.stats import pearsonr
# 返回值即为变量1与变量2的相关关系
pearsonr(data["变量1"],data["变量2"])
import pandas as pd
from sklearn.feature_selection import VarianceThreshold
from scipy.stats import pearsonr

def variance_demo():
    """
    低方差过滤
    """
    # 1、获取数据
    data = pd.read_csv("data.txt")
    "取出非目标列"
    data = data.iloc[:, :3]
    # 2、创造转换器
    transfer = VarianceThreshold(threshold=5)
    # 3、调用fit_transform
    data_new1 = transfer.fit_transform(data)
    print("data:\n",data_new1,data_new1.shape)
    """
    相关关系
    """
    data_new2 = pearsonr(data["编码"],data["里程数"])
    print("相关系数\n",data_new2)
    return

if __name__ == '__main__':
    variance_demo()

方法二:主成分分析(PCA

  • 定义:高维数据转化为低维数据的过程,在此过程中可能会舍弃原有数据、创造新的变量
  • 作用:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息
  • 应用:回归分析或者聚类分析当中
涉及API
sklearn.decomposition.PCA(n_compents=None)
  1. 将数据分解为较低维数空间
  2. n_compents:
    小数:表示保留百分之多少的信息
    整数:减少到多少特征
  3. PCA.fit_transform(X)
    X:numpy array格式的数据[n_samples,n_features]
    返回值:转换后指定维度的array
import pandas as pd
from sklearn.decomposition import PCA

def pca_demo():
    # 1、获取数据
    data = pd.read_csv('data.txt')
    data = data.iloc[:,:3]
    # 2、创建transfer
    transfer = PCA(n_components=2) # 也可以设置为小数
    # 3、调用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new\n",data_new)

    return
if __name__ == '__main__':
    pca_demo()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值