特征降维(1. 掌握低方差过滤法 2. 掌握相关系数法 3. 掌握 PCA 进行降维)

1. 概述

用于训练的数据集特征对模型的性能有着极其重要的作用。如果训练数据中包含一些不重要的特征,可能导致模型的泛化性能不佳。例如:

  1. 某些特征的取值较为接近,其包含的信息较少
  2. 我们希望特征独立存在,对预测产生影响,具有相关性的特征可能并不会给模型带来更多的信息,但是并不是说相关性完全无用。

降维 是指在某些限定条件下,降低特征个数, 我们接下来介绍集中特征降维的方法:

  1. 低方差过滤法
  2. 如果一个特征的方差很小,说明这个特征包含的信息很少
  3. 使用该特征进行训练的话,模型很难通过该特征区分对象

  4. 相关系数法:

  5. 通过计算特征的相关系数,发现具有相关性的特征,根据其相关性的强弱,可以选择特征。
  6. 皮尔逊相关系数
  7. 斯皮尔曼相关系数

  8. PCA(主成分分析)降维法:

  9. 保留大部分信息的前提下,将数据的维度压缩为到低维
  10. 在降维过程中能够去除特征之间的相关性

2. 低方差过滤法

我们知道:

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

低方差过滤法 指的是删除方差低于某些阈值的一些特征。

sklearn.feature_selection.VarianceThreshold(threshold=0.0)
Variance.fit_transform(X)
X:numpy array格式的数据[n_samples,n_features]

在数据集中,删除方差低于 threshold 的特征将被删除,默认值是保留所有非零方差特征,即删除所有样本中具有相同值的特征。

示例代码:

from sklearn.feature_selection import VarianceThreshold
import pandas as pd


if __name__ == '__main__':

    # 1. 读取数据集
    data = pd.read_csv('data/垃圾邮件分类数据.csv')
    print(data.shape)

    # 3. 使用方差过滤法
    transformer = VarianceThreshold(threshold=0.1)
    data = transformer.fit_transform(data)
    print(data.shape)

3. 相关系数法

相关系数的计算主要有: 皮尔逊相关系数、斯皮尔曼相关系数。特征之间的相关系数法可以反映变量之间相关关系密切程度。

皮尔逊相关系数的计算公式: 

斯皮尔曼相关系数计算公式: 

import pandas as pd
from sklearn.feature_selection import VarianceThreshold
from scipy.stats import pearsonr
from scipy.stats import spearmanr
from sklearn.datasets import load_iris
import pandas as pd


pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
pd.set_option('display.width', 1000)


if __name__ == '__main__':

    # 1. 读取数据集
    data = load_iris()
    data = pd.DataFrame(data.data, columns=data.feature_names)

    # 2. 皮尔逊相关系数
    corr = pearsonr(data['sepal length (cm)'], data['sepal width (cm)'])
    print(corr, '皮尔逊相关系数:', corr[0], '不相关性概率:', corr[1])

    # 3. 斯皮尔曼相关系数
    corr = spearmanr(data['petal length (cm)'], data['petal width (cm)'])
    print(corr, '斯皮尔曼相关系数:', corr[0], '不相关性概率:', corr[1])

    # 4. 使用 DataFrame 的 corr 方法计算相关性
    print(data.corr('pearson'))
    print(data.corr('spearman'))

4. 主成分分析(PCA)

PCA 通过对数据维数进行压缩,尽可能降低原数据的维数(复杂度),损失少量信息,在此过程中可能会舍弃原有数据、创造新的变量。

from sklearn.decomposition import PCA
from sklearn.datasets import load_iris

if __name__ == '__main__':


    # 1. 加载数据集
    x, y = load_iris(return_X_y=True)
    print(x[:5])

    # 2. 保留指定比例的信息
    transformer = PCA(n_components=0.95)
    x_pca = transformer.fit_transform(x)
    print(x_pca[:5])

    # 3. 保留指定数量特征
    transformer = PCA(n_components=2)
    x_pca = transformer.fit_transform(x)
    print(x_pca[:5])
  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值