八、特征降维

特征降维

  • 前言
  • 一、低方差过滤法
    • 相关的API :sklearn.feature_selection.VarianceThreshold
  • 二、主成分分析法 (PCA)
    • 有关的API :from sklearn.decomposition import PCA
  • 三、相关系数法
    • 3.1 皮尔逊相关系数 (pearsonr)
      • 3.1.1 定义与取值
      • 3.1.2 公式
      • 3.1.3 特点
      • 3.1.4 举例说明
      • 3.1.5 代码演示
    • 3.2 斯皮尔曼相关系数 (spearmanr)
      • 3.2.1 定义
      • 3.2.2 公式
      • 3.2.3 计算步骤
      • 3.2.4 取值范围与解释
      • 3.2.5 特点与优势
      • 3.2.6 举例说明
      • 3.2.7 代码演示
  • 总结


前言

  • 用于训练的数据集特征对模型的性能有着极其重要的作用。如果训练数据中包含一些不重要的特征,可能导致模型的泛化性能不佳。例如:
    • 1.某些特征的取值较为接近,其包含的信息较少
    • 我们希望特征独立存在,对预测产生影响,具有相关性的特征可能并不会给模型带来更多的信息,但是并不是说相关性完全无用。

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

一、低方差过滤法

  • 指的是删除方差低于某些阈值的一些特征。因为:
    • 1、特征方差小:某个特征大多样本的值比较相近
    • 2、特征方差大:某个特征很多样本的值都有差别

相关的API :sklearn.feature_selection.VarianceThreshold

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

代码演示:

from sklearn.feature_selection import VarianceThreshold
import pandas as pd# 1. 读取数据集
data = pd.read_csv('data/垃圾邮件分类数据.csv')
print(data.shape) # (971, 25734)# 2. 使用方差过滤法
transformer = VarianceThreshold(threshold=0.1)
data = transformer.fit_transform(data)
print(data.shape) # (971, 1044)

二、主成分分析法 (PCA)

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

有关的API :from sklearn.decomposition import PCA

  • 参数
    • PCA(n_components=2)
      • n_components:
        • 小数表示保留百分之多少的信息;
        • 整数表示减少到多少特征 eg 由20个特征减少到10个

代码演示:

from sklearn.decomposition import PCA   # 导入PCA的包
from sklearn.datasets import load_iris  # 导入 鸢尾花 数据集# 1. 加载数据集
x, y = load_iris(return_X_y=True)
print(x[:5])# [[5.1 3.5 1.4 0.2]
#  [4.9 3.  1.4 0.2]
#  [4.7 3.2 1.3 0.2]
#  [4.6 3.1 1.5 0.2]
#  [5.  3.6 1.4 0.2]]# 2. 保留指定比例的信息
transformer = PCA(n_components=0.95)
x_pca = transformer.fit_transform(x)
print(x_pca[:5])
# [[-2.68412563  0.31939725]
#  [-2.71414169 -0.17700123]
#  [-2.88899057 -0.14494943]
#  [-2.74534286 -0.31829898]
#  [-2.72871654  0.32675451]]# 3. 保留指定数量特征
transformer = PCA(n_components=2)
x_pca = transformer.fit_transform(x)
print(x_pca[:5])# [[-2.68412563  0.31939725]
# [-2.71414169 -0.17700123]
# [-2.88899057 -0.14494943]
# [-2.74534286 -0.31829898]
# [-2.72871654  0.32675451]]

三、相关系数法

  • 特征之间的相关系数法可以反映变量之间相关关系密切程度。

3.1 皮尔逊相关系数 (pearsonr)

3.1.1 定义与取值

  • 皮尔逊相关系数用于衡量两个连续变量之间的线性关系强度和方向。其取值范围在-1到1之间,具体含义如下:
    • 当相关系数为1时,表示两个变量完全正相关,即当一个变量增加时,另一个变量也增加,且呈直线关系。
    • 当相关系数为-1时,表示两个变量完全负相关,即当一个变量增加时,另一个变量减少,且呈直线关系。
    • 当相关系数为0时,表示两个变量没有线性关系,但可能存在非线性关系。

3.1.2 公式

  • 对于一组观测值 ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . . , ( x n , y n ) (x_1, y_1),(x_2, y_2),....,(x_n, y_n) (x1,y1),(x2,y2),....,(xn,yn),皮尔逊相关系数可以使用以下公式计算:

r = ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) ∑ i = 1 n ( x i − x ˉ ) 2 ∑ i = 1 n ( y i − y ˉ ) 2 r = \frac{\sum_{i=1}^{n} (x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum_{i=1}^{n} (x_i - \bar{x})^2 \sum_{i=1}^{n} (y_i - \bar{y})^2}} r=i=1n(xixˉ)2i=1n(yiyˉ)2 i=1n(xixˉ)(yiyˉ)

  • x ˉ \bar{x} xˉ y ˉ \bar{y} yˉ 分别表示 x x x y y y 的样本平均值

  • x i x_i xi y i y_i yi 表示两个变量的第 i i i 个观测值

3.1.3 特点

  • 线性关系:皮尔逊相关系数只能用于度量两个变量之间的线性关系,不能反映非线性关系。
  • 正态分布:要求变量服从正态分布,否则皮尔逊相关系数可能无法准确反映变量之间的相关性。
  • 对称性:皮尔逊相关系数在两个变量之间是对称的,即 r ( x , y ) = r ( y , x ) r ( x , y ) = r ( y , x ) r ( x , y ) = r ( y , x ) r(x,y)=r(y,x)r(x, y) = r(y, x)r(x,y)=r(y,x) r(x,y)=r(y,x)r(x,y)=r(y,x)r(x,y)=r(y,x)
  • 敏感性:皮尔逊相关系数对数据的极端值较为敏感,极端值可能会影响相关系数的计算结果。

3.1.4 举例说明

  • 假设有两组数据

    • X = ( 75 , 85 , 65 , 90 , 70 ) X = (75,85,65,90,70) X=(75,85,65,90,70)
    • Y = ( 70 , 81 , 60 , 88 , 65 ) Y=(70,81,60,88,65) Y=(70,81,60,88,65)
  • 1、计算均值

    • X 的平均值 X ˉ = 75 + 85 + 65 + 90 + 70 5 = 385 5 = 77 X的平均值 \bar X = \frac{75+85+65+90+70}{5} = \frac{385}{5} = 77 X的平均值Xˉ=575+85+65+90+70=5385=77
    • X 的平均值  Y ˉ = 70 + 81 + 60 + 88 + 65 5 = 364 5 = 72.8 X的平均值\ \bar Y = \frac{70+81+60+88+65}{5} = \frac{364}{5} = 72.8 X的平均值 Yˉ=570+81+60+88+65=5364=72.8
  • 2、计算偏差

    • X 的偏差 X i − X ˉ : ( 75 − 77 ) , ( 85 − 77 ) , ( 65 − 77 ) , ( 90 − 77 ) , ( 70 − 77 ) = 2 , 8 , − 12 , − 13 , − 7 X 的偏差 X_i - \bar X : (75-77),(85-77),(65-77),(90-77),(70-77) = 2,8,-12,-13,-7 X的偏差XiXˉ(7577),(8577),(6577),(9077),(7077)=2,8,12,13,7
    • Y 的偏差 Y i − Y ˉ : ( 70 − 72.8 ) , ( 81 − 72.8 ) , ( 60 − 72.8 ) , ( 88 − 72.8 ) , ( 65 − 72.8 ) = − 2.8 , 8.2 , − 12.8 , 15.2 , − 7.8 Y 的偏差 Y_i - \bar Y : (70-72.8),(81-72.8),(60-72.8),(88-72.8),(65-72.8)=-2.8,8.2,-12.8,15.2,-7.8 Y的偏差YiYˉ(7072.8),(8172.8),(6072.8),(8872.8),(6572.8)=2.8,8.2,12.8,15.2,7.8
    • ∑ ( X i − X ˉ ) ( Y i − Y ˉ ) = ( 2 ) ( − 2.8 ) + ( 8 ) ( 8.2 ) + ( − 12 ) ( − 12.8 ) + ( − 13 ) ( 15.2 ) + ( − 7 ) ( − 7.8 ) = ( − 5.6 ) + ( 65.6 ) + ( 153.6 ) + ( − 197.6 ) + ( 54.6 ) = 70.6 \sum(X_i - \bar X)(Y_i - \bar Y)=(2)(-2.8)+(8)(8.2)+(-12)(-12.8)+(-13)(15.2)+(-7)(-7.8)=(-5.6)+(65.6)+(153.6)+(-197.6)+(54.6)=70.6 (XiXˉ)(YiYˉ)=(2)(2.8)+(8)(8.2)+(12)(12.8)+(13)(15.2)+(7)(7.8)=(5.6)+(65.6)+(153.6)+(197.6)+(54.6)=70.6
  • 3、计算协方差

    • ∑ ( X i − X ˉ ) 2 = 2 2 + 8 2 + ( − 12 ) 2 + ( − 13 ) 2 + 7 2 = 431 \sqrt{\sum(X_i - \bar X)^2}=\sqrt{2^2+8^2+(-12)^2+(-13)^2+7^2}=\sqrt{431} (XiXˉ)2 =22+82+(12)2+(13)2+72 =431
    • ∑ ( Y i − Y ˉ ) 2 = ( − 2.8 ) 2 + ( 8.2 ) 2 + ( − 12.8 ) 2 + ( 15.2 ) 2 + ( − 7.8 ) 2 = 530.8 \sqrt{\sum(Y_i - \bar Y)^2}=\sqrt{(-2.8)^2+(8.2)^2+(-12.8)^2+(15.2)^2+(-7.8)^2}=\sqrt{530.8} (YiYˉ)2 =(2.8)2+(8.2)2+(12.8)2+(15.2)2+(7.8)2 =530.8
  • 4、计算皮尔逊相关系数

    • r = 70.6 431 ⋅ 530.8 ≈ 70.6 20.7605 ⋅ 23.0391 ≈ 0.1476051064526402 r = \frac{70.6}{\sqrt{431}\cdot \sqrt{530.8}}≈\frac{70.6}{20.7605\cdot 23.0391}≈0.1476051064526402 r=431 530.8 70.620.760523.039170.60.1476051064526402

3.1.5 代码演示

代码演示:

import pandas as pd
from scipy.stats import pearsonr
from sklearn.datasets import load_iris# 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])
# (-0.11756978413300204, 0.15189826071144918) 皮尔逊相关系数: -0.11756978413300204 不相关性概率: 0.15189826071144918

3.2 斯皮尔曼相关系数 (spearmanr)

  • 斯皮尔曼相关系数(Spearman’s rank correlation coefficient)是一种重要的统计指标,用于衡量两个变量之间的关联程度。

3.2.1 定义

  • 斯皮尔曼相关系数以Charles Spearman的名字命名,通常用希腊字母 ρ ρ ρ 表示。它是一种非参数指标,即与数据的分布无关,主要应用于等级变量性质的数据。

3.2.2 公式

  • 斯皮尔曼等级相关系数是基于两组数据的等级而不是它们的实际数值来计算的。如果两个变量 X X X Y Y Y 的的等级分别是 R X R_X RX R Y R_Y RY,那么斯皮尔曼相关系数 ρ ρ ρ 可以通过以下公式计算:

ρ = 1 − 6 ∑ i = 1 n d i 2 n ( n 2 − 1 ) \rho = 1 - \frac{6 \sum_{i=1}^{n} d_i^2}{n(n^2 - 1)} ρ=1n(n21)6i=1ndi2

  • d i d_i di 是第 i i i 对数据的等级差 (即 R X i − R Y i R_{X_i} - R_{Y_i} RXiRYi)

  • n n n 是配对数据的数量

3.2.3 计算步骤

  • 1、确定等级:对于每一对数据 X i X_i Xi Y i Y_i Yi 分别找出 X X X 列和 Y Y Y 列中的等级 R X i R_{X_i} RXi R Y i R_{Y_i} RYi。如果有相同的数据值,则给这些相同值分配平均等级。
  • 2、计算等级差的平方和:计算每对数据的等级差 d i = R X i − R Y i d_i = R_{X_i} - R_{Y_i} di=RXiRYi,然后求出所有 d i d_i di 的平方和 ∑ d i 2 \sum{d_i^2} di2
  • 3、带入公式:将 ∑ d i 2 \sum{d_i^2} di2 n n n 带入上述公式。计算 ρ ρ ρ

3.2.4 取值范围与解释

  • 斯皮尔曼相关系数的取值范围在-1到1之间:

    • 正值:表示正相关,即当一个变量增加时,另一个变量也趋向于增加
    • 负值:表示负相关,即当一个变量增加时,另一个变量趋向于减少
    • 零值:表示两个变量之间没有单调关系或趋向性

3.2.5 特点与优势

  • 非参数性质:斯皮尔曼相关系数不依赖于任何参数的先验知识,因此适用于各种类型的数据,包括非线性关系的数据。
  • 鲁棒性:由于秩次本身不受异常值的影响,斯皮尔曼相关系数对异常值具有更好的鲁棒性。
  • 适用性广:斯皮尔曼相关系数不仅适用于线性关系的数据,还适用于等级变量和具有有序性的数据。

3.2.6 举例说明

  • 假设有两组数据

    • X = ( 10 , 2 , 36 , 4 , 80 , 50 , 20 , 1 , 65 , 17 ) X = (10,2,36,4,80,50,20,1,65,17) X=(10,2,36,4,80,50,20,1,65,17)
    • Y = ( 30 , 3 , 50 , 5 , 100 , 80 , 40 , 2 , 90 , 30 ) Y=(30,3,50,5,100,80,40,2,90,30) Y=(30,3,50,5,100,80,40,2,90,30)
  • 1、计算等级

    • X 的等级为 ( 5 , 1 , 8 , 2 , 10 , 7 , 6 , 1 , 9 , 3 ) X 的等级为 (5,1,8,2,10,7,6,1,9,3) X的等级为(5,1,8,2,10,7,6,1,9,3)
    • Y 的等级为 ( 7 , 1 , 9 , 2 , 10 , 8 , 6 , 1 , 10 , 7 ) Y 的等级为 (7,1,9,2,10,8,6,1,10,7) Y的等级为(7,1,9,2,10,8,6,1,10,7)
  • 2、计算等级差的平方和

    • d = ( 5 − 7 , 1 − 1 , 8 − 9 , 2 − 2 , 10 − 10 , 7 − 8 , 6 − 6 , 1 − 1 , 9 − 10 , 3 − 7 ) d = (5−7, 1−1, 8−9, 2−2, 10−10, 7−8, 6−6, 1−1, 9−10, 3−7) d=(57,11,89,22,1010,78,66,11,910,37)
    • d = ( − 2 , 0 , − 1 , 0 , 0 , − 1 , 0 , 0 , − 1 , − 4 ) d = (-2, 0, -1,0,0,-1,0,0,-1,-4) d=(2,0,1,0,0,1,0,0,1,4)
    • ∑ d 2 = 4 + 0 + 1 + 0 + 0 + 1 + 0 + 0 + 1 + 16 = 23 \sum{d^2 = 4+0+1+0+0+1+0+0+1+16} = 23 d2=4+0+1+0+0+1+0+0+1+16=23
  • 3、代入公式计算 ρ ρ ρ

    • n = 10 n=10 n=10
    • ρ = 1 − 6 ⋅ 23 10 ( 1 0 2 − 1 ) = 1 − 139 990 = 1 − 0.13939394 = 0.8606 ρ = 1 - \frac{6 \cdot 23}{10(10^2-1)} = 1 - \frac{139}{990} = 1 - 0.13939394 = 0.8606 ρ=110(1021)623=1990139=10.13939394=0.8606

3.2.7 代码演示

代码演示:

import pandas as pd
from scipy.stats import spearmanr
from sklearn.datasets import load_iris# 1. 读取数据集(鸢尾花数据集)
data = load_iris()
data = pd.DataFrame(data.data, columns=data.feature_names)# 2. 斯皮尔曼相关系数
corr = spearmanr(data['sepal length (cm)'], data['sepal width (cm)'])
print(corr, '斯皮尔曼相关系数:', corr[0], '不相关性概率:', corr[1])
# SpearmanrResult(correlation=-0.166777658283235, pvalue=0.04136799424884587) 斯皮尔曼相关系数: -0.166777658283235 不相关性概率: 0.04136799424884587

总结

  • 总结了 在机器学习的数据处理的时候对特征进行降维的三种办法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/450765.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用人体关键点驱动FBX格式虚拟人原理【详解】

文章目录 1、使用人体关键点数据驱动FBX格式虚拟人的总流程2、使用mediapipe检测人体关键点和插值平滑2.1 mediapipe检测人体关键点2.2 人体关键点的插值平滑 3、将2d关键点转为3d关键点4、旋转矩阵4.1 旋转矩阵4.2 旋转矩阵转为四元数 5、将旋转矩阵用于虚拟人的驱动5.1 基础旋…

高分SCI发文利器!植物脂质代谢数据库——CLAIR

脂质是全球重要的大宗商品和工业原料。世界上消耗的24种脂质中,大部分来自植物。全面了解不同油料作物中与脂质生物合成相关的基因和机制,对于通过分子生物学和育种来提高这些作物的含油性状至关重要。 2024年2月,Plant Communications在线发…

台积电Q3业绩猛增,市值破万亿美元!

KlipC报道:全球晶圆代工龙头台积电发布第三季度财报,财报显示,三季度营收7596.9亿新台币(约235亿美元),同比增长39%,市场预期7421.66亿元新台币;净利润达到3252.58亿新台币&#xff…

【可答疑】基于51单片机的智能衣柜(含仿真、代码、报告、演示视频等)

✨哈喽大家好,这里是每天一杯冰美式oh,985电子本硕,大厂嵌入式在职0.3年,业余时间做做单片机小项目,有需要也可以提供就业指导(免费)~ 🐱‍🐉这是51单片机毕业设计100篇…

云计算第四阶段: cloud二周目 07-08

cloud 07 一、k8s服务管理 创建服务 # 资源清单文件 [rootmaster ~]# kubectl create service clusterip websvc --tcp80:80 --dry-runclient -o yaml [rootmaster ~]# vim websvc.yaml --- kind: Service apiVersion: v1 metadata:name: websvc spec:type: ClusterIPselector…

汽车建模用什么软件最好?汽车建模渲染建议!

在汽车建模和渲染领域,选择合适的软件对于实现精确的设计与高质量的视觉效果至关重要。那么不少的汽车设计师如何选择合适的建模软件与渲染方案呢,一起来简单看看吧! 一、汽车建模用软件推荐 1、Alias Autodesk旗下的Alias系列软件是汽车设…

数据结构实验十二 图的遍历及应用

数据结构实验十二 图的遍历及应用 一、【实验目的】 1、 理解图的存储结构与基本操作; 2、熟悉图的深度度优先遍历和广度优先遍历算法 3、掌握图的单源最短路径算法 二、【实验内容】 1.根据下图(图见实验11)邻接矩阵,编程实…

刚刚,ChatGPT推出Windows客户端!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工…

C# + SQLiteExpert 进行(cipher)加密数据库开发+Costura.Fody 清爽发布

一:让 SQLiteExpert 支持(cipher)加密数据库 SQLiteExpert 作为SQlite 的管理工具,默认不支持加密数据库的,使其成为支持(cipher)加密数据库的管理工具,需要添加e_sqlcipher.dll &…

1997-2022年各省农作物总播种面积数据(无缺失)

1997-2022年各省农作物总播种面积数据 1、时间:1997-2022年 2、来源:国家统计局、统计年鉴 3、指标:农作物总播种面积(千公顷) 4、范围:31省 5、缺失情况:无缺失 6、指标解释:农作物播种面积指农业生…

PCL 点云配准-改进的RANSAC算法(粗配准)

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 计算FPFH特征 2.1.2 RANSAC配准 2.1.3 可视化点云 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接: PCL点云算法与项目实战案例汇总&#xff0…

基于SSM高校课程评价的设计

教师账户功能包括:系统首页,个人中心,指标信息管理,课程信息管理,教师自评管理 学生账号功能包括:系统首页,个人中心,课程信息管理,学生评价管理 开发系统:…

不坑盒子在哪儿下载?

不坑盒子是一款Office办公软件的插件,支持MicroSoft Office和WPS的三件套(Word、Excel、PPT)。 可以为你的Office软件增加数百个实用功能,比如:自动排版、智能写作、仿手写、全文加拼音、稿子模板、一键删除、数据分发…

SAP物料凭证报表字段调整

业务场景: 报表MB51的输入和输出字段调整: 输入(选择界面) 输出界面 可以看到在这是没有布局调整的 后台路径: SPRO-物料管理-库存管理和实际库存-报表-定义物料凭证列表的字段选择 事务码:SM30-V_MMI…

docker构建jar镜像

文章目录 构建 DockerFile将jar包上传到创建的目录当中在目录中创建 Dockerfile 文件构建镜像创建并启动容器说明 构建 DockerFile [root192 /]# mkdir my [root192 /]# cd my [root192 my]# 将jar包上传到创建的目录当中 在目录中创建 Dockerfile 文件 vi Dockerfile FROM …

MFC工控项目实例二十四模拟量校正值输入

承接专栏《MFC工控项目实例二十三模拟量输入设置界面》 对模拟量输入的零点校正值及满量程对应的电压值进行输入。 1、在SenSet.h文件中添加代码 #include "BtnST.h" #include "ShadeButtonST.h"/ // SenSet dialogclass SenSet : public CDialog { // Co…

RPC通讯基础原理

1.RPC(Remote Procedure Call)概述 RPC是一种通过网络从远程计算机上调用程序的技术,使得构建分布式计算更加容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性,提供一种透明调用机制,让使用者不…

Leetcode 跳跃游戏 二

核心任务是找出从数组的起点跳到终点所需的最小跳跃次数。 这段代码解决的是“跳跃游戏 II”(Leetcode第45题),其核心任务是找出从数组的起点跳到终点所需的最小跳跃次数。 class Solution {public int jump(int[] nums) {//首先处理特殊情…

【文化课学习笔记】【化学】选必三:同分异构体的书写

【化学】选必三:同分异构体的书写 如果你是从 B 站一化儿笔记区来的,请先阅读我在第一篇有机化学笔记中的「读前须知」(点开头的黑色小三角展开):链接 链状烃的取代和插空法 取代法 一取代物 甲烷、乙烷、丙烷、丁烷的种类 甲烷:只…

【AAOS】Android Automotive 14模拟器源码下载及编译

源码下载 repo init -u https://android.googlesource.com/platform/manifest -b android-14.0.0_r20 repo sync -c --no-tags --no-clone-bundle 源码编译 source build/envsetup.sh lunch sdk_car_x86_64-trunk_staging-eng make -j8 运行效果 emualtor Home All apps …