特征降维&主成分分析

1、特征降维是什么?

降维是指在某些特定的限定条件下,降低随机变量(特征)的个数,得到一组“不相关”主变量过程
相关特征:两个特征之间存在某些关系,例如降雨量和空气湿度是相关特征。

2、特征降维的方法有哪些?

Filter(过滤式)

a)方差选择法:低方差特征过滤(例如判断鸟的种类中,特征是否有爪子属于低方差特征,低方差数据比较集中,过滤)
sklearn.feature_selection.VarianceThreshold(threshold=0.0)
threshold为阈值,默认为0,即删除所有方差为0的特征
Variance.fit_transform(x):x为numpy array格式的数据,返回值为低于threshold的特征删除后的结果

import numpy as np
from sklearn.feature_selection import VarianceThreshold
# 示例数据
X = np.array([
    [0, 2, 0, 3],
    [0, 1, 4, 3],
    [0, 1, 1, 3]
])
# 初始化 VarianceThreshold,默认 threshold=0.0
selector = VarianceThreshold()
# 进行特征选择
X_reduced = selector.fit_transform(X)
print("原始特征矩阵:")
print(X)
print("方差: ", selector.variances_)
print("去除方差为0的特征后的矩阵:")
print(X_reduced)

初始矩阵第一列和第四列元素为0,即方差为0,所以执行后结果如下:
方差过滤法

b)相关系数法:衡量特征与特征之间相关性,相关性很强需要处理。
皮尔逊相关系数计算公式如下:
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\limits_{i=1}^n(X_i-\overline{X})(Y_i-\overline{Y})}{\sqrt{\sum\limits_{i=1}^n(X_i-\overline{X})^2}\sqrt{\sum\limits_{i=1}^n(Y_i-\overline{Y})^2}} r=i=1n(XiX)2 i=1n(YiY)2 i=1n(XiX)(YiY)

通常用皮尔逊相关系数法,相关系数 r r r介入 − 1 -1 1 1 1 1之间
r r r大于 0 0 0,二者呈正相关, r r r小于 0 0 0,二者呈现负相关, ∣ r ∣ |r| r越接近于 1 1 1,相关性越强,一般按以下三级划分
∣ r ∣ < 0.4 |r|<0.4 r<0.4为低度相关
0.4 ≤ ∣ r ∣ < 0.7 ∣ 0.4≤|r|<0.7| 0.4r<0.7∣为显著相关
0.7 ≤ ∣ r ∣ < 1 0.7≤|r|<1 0.7r<1为高度线性相关
API:from scipy.stats import pearsonr
pearsonr(x,y),x,y为两个特征,返回相关系数

import numpy as np
from scipy.stats import pearsonr
# 示例数据
# 两个特征的数据
feature1 = np.array([1, 2, 3, 4, 5])
feature2 = np.array([2, 4, 6, 8, 10])
# 计算 Pearson 相关系数
pearson_correlation = pearsonr(feature1, feature2)
print("特征1: ", feature1)
print("特征2: ", feature2)
print("Pearson 相关系数: ", pearson_correlation)

运行结果如下:
在这里插入图片描述
下面用数学方法计算:
feature1的均值为 3 3 3,feature2的均值为6
分子: ( 1 − 3 ) ( 2 − 6 ) + ( 2 − 3 ) ( 4 − 6 ) + ( 3 − 3 ) ( 6 − 6 ) + ( 4 − 3 ) ( 8 − 6 ) + ( 5 − 3 ) ( 10 − 6 ) = 20 (1-3)(2-6)+(2-3)(4-6)+(3-3)(6-6)+(4-3)(8-6)+(5-3)(10-6)=20 (13)(26)+(23)(46)+(33)(66)+(43)(86)+(53)(106)=20
∑ i = 1 n ( X i − X ‾ ) 2 = 10 {\sqrt{\sum\limits_{i=1}^n(X_i-\overline{X})^2}}=\sqrt{10} i=1n(XiX)2 =10
∑ i = 1 n ( Y i − Y ‾ ) 2 = 40 {\sqrt{\sum\limits_{i=1}^n(Y_i-\overline{Y})^2}}=\sqrt{40} i=1n(YiY)2 =40
则皮尔逊系数为
r = 20 10 40 = 20 20 = 1 r=\frac{20}{\sqrt{10}\sqrt{40}}=\frac{20}{20}=1 r=10 40 20=2020=1
与上述结果一致。
p − v a l u e p-value pvalue 是一个统计量,用于检验两个变量之间的相关性是否显著。
如果 p − v a l u e p-value pvalue很小(通常小于 0.05 0.05 0.05),则可以拒绝原假设,认为两个变量之间存在显著的线性关系。
如果 p − v a l u e p-value pvalue很大,则不能拒绝原假设,认为两个变量之间的线性关系不显著。

Embedded(嵌入式)

a)决策树:信息熵、信息增益
b)正则化:L1,L2
c)深度学习:卷积等

PCA降维

主成分分析 (Principal Component Analysis, PCA) 是一种用于降维的线性算法,旨在通过将数据投影到主成分上来减少数据的维度,同时尽可能保留数据的方差。主成分是原始特征的线性组合,按解释的方差从大到小排序。通过保留前几个主成分,可以在保留大部分信息的前提下显著减少特征的数量。
API:sklearn.decomposition.PCA(n_components=None)
将数据分解成较低维空间
n_components:
①小数:表示保留百分之多少的信息
②整数:减少到多少特征
PCA.fit_transform(x):numpy array格式数据,返回指定维度的array

import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
# 示例数据:4个特征,10个样本
X = np.array([
    [2.5, 2.4, 2.3, 2.2],
    [0.5, 0.7, 0.8, 0.6],
    [2.2, 2.9, 2.6, 2.4],
    [1.9, 2.2, 2.1, 2.0],
    [3.1, 3.0, 3.2, 3.3],
    [2.3, 2.7, 2.5, 2.6],
    [2, 1.6, 1.8, 1.9],
    [1, 1.1, 1.2, 1.0],
    [1.5, 1.6, 1.7, 1.8],
    [1.1, 0.9, 1.0, 0.8]
])
# 创建PCA对象,并将数据降维到2个主成分
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
print("原始数据形状:", X.shape)
print("降维后数据形状:", X_pca.shape)
print("降维后数据:")
print(X_pca)
# 绘制降维后的数据
plt.scatter(X_pca[:, 0], X_pca[:, 1])
plt.xlabel('主成分1')
plt.ylabel('主成分2')
plt.title('PCA 降维后的数据分布')
plt.show()

运行结果如下:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值