特征 降维

1、概述

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

降维--是指在某些限定条件下,降低特征个数。

2、方法

低方差过滤法

  • 如果一个特征的方差很小,说明这个特征包含的信息很少,模型很难通过该特征区分对象

相关系数法

  • 通过计算特征的相关系数,发现具有相关性的特征,根据相关性的强弱,进行特征的选择。
  • 皮尔逊相关系数
  • 斯皮尔曼相关系数

PCA(主成分分析法)降维法

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

2、低方差过滤法

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

低方差过滤------删除方差低于某些阈值的一些特征

python 复制代码
sklearn.feature_selection.VarianceThreshold(threshold=0.0)
Variance.fit_transform(X)
# X是numpy array 格式的数据【n_samples,n_features)

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

3、相关系数法

两两变量之间计算相关性,越接近于1,越相关。

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

  • from scipy.stats import pearsonr

斯皮尔曼相关系数:

  • from scipy.stats import spearmanr

上面公式中,di为样本中不同特征在数据中排序的序号差值(相同时就取排序的均值),计算举例如下所示:

python 复制代码
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__':
    # 读取数据集
    data = load_iris()
    data = pd.DataFrame(data.data, columns=data.feature_names)
    
    #皮尔逊相关系数
    p_corr = pearsonr(data['sepal length (cm)'],data['sepal width (cm)'])
    print(p_corr,'皮尔逊相关系数:',p_corr[0],'不相关概率:',p_corr[1])

    #斯皮尔曼相关系数
    s_corr = spearmanr(data['sepal length (cm)'],data['sepal width (cm)'])
    print(s_corr,'皮尔逊相关系数:',s_corr[0],'不相关概率:',s_corr[1])

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

4、主成分分析PCA

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

python 复制代码
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris

if __name__ == '__main__':
    #加载数据集
    x,y = load_iris(return_X_y=True)
    print(x[:5])

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

    # 另一种方法,保留指定数量的特征
    transformer = PCA(n_components=3)
    x_pca = transformer.fit_transform(x)
    print(x_pca[:5])
相关推荐
阿_旭21 分钟前
【AI前沿】GTR:一套网络通吃检测/分割/姿态/深度六大任务,对标YOLO26
人工智能
AI你一生一世23 分钟前
当一句自然语言指令穿透三层抽象:从“把按钮改成蓝色“看 AI 编码代理的真实边界
人工智能·自然语言处理·前端架构·技术债·设计令牌·ai编码代理·代码抽象
袋鼠云数栈29 分钟前
非结构化数据也能“周期调度“:离线开发BatchWorks的多模态数据同步实践
大数据·人工智能·多模态数据·离线开放
算了吧956933 分钟前
GEO服务商选型指南:2026年企业评估框架与决策路径
大数据·人工智能·物联网
workflower34 分钟前
矿用机器人人工智能安全与治理体系
人工智能·安全·机器学习·机器人·云计算·无人机
tianbin91135 分钟前
从模型微调到API调用:大模型训练后的高效工程化落地路径
人工智能
a努力。42 分钟前
RAG数据流水线的隐形杀手:文档加载与切分深度解析
人工智能
美林数据Tempodata1 小时前
高校工科专业转型工业数智方向:从六类岗位技术要求到课程模块的改造路径
人工智能·工业互联网·产教融合·课程改革
HUIBUR科技1 小时前
AI重塑企业数字化:从系统建设到价值盘活的全新变革
人工智能·ai
深频率1 小时前
6倍价格买8倍速度?GPT-6.1 Sol极速版的两个倍率
人工智能·gpt