sklearn教程05 - 特征选择降维(低方差过滤,皮尔逊相关系数),PCA主成分分析降维

sklearn教程05 - 特征选择降维(低方差过滤,皮尔逊相关系数),PCA主成分分析降维

sklearn一站式学习->: sklearn一站式学习,机器学习数据集获取与划分,无量纲化,特征提取,特征降维(低方差,皮尔逊,PCA),KNN,模型选择调优,决策树,朴素贝叶斯,岭回归,kMeans等等


python一站式学习->: python一站式学习,python基础,数据类型,numpy,pandas,机器学习,NLP自然语言处理,deepseek大预言模型,Tensorflow,CV视觉


降维:降低特征个数,得到一组不相关或相关性较低的纬度的过程(剔除冗余相关的特征)

特征选择

特征选择:原有数据中包含冗余的特征,从中找出主要特征

 filter过滤式:   1. 方差选择法:方差较低的特征过滤   
 				 2. 相关系数法:特征与特征之间的相关程度
 				
 embedded 嵌入式(后续文档中会讲解)1.决策树  
				2.正则化   
				3.深度学习

1. 低方差特征过滤
原理:某个特征大多数样本值接近(方差过低),说明特征都接近或一样,可以剔除这个特征

from sklearn.feature_selection import VarianceThreshold

def test():
    # threshold=0.5 过滤小于0.5的方差
    transform = VarianceThreshold(threshold=0.5)
    vData = transform.fit_transform([[1, 10, 0.5], [2, 29, 0.2], [3, 40, 0.3]])
    print("方差选择后-------------", vData.shape, vData)


if __name__ == '__main__':
    test()

在这里插入图片描述
2. 相关系数法-皮尔逊相关系数
公式一:基于均值离差,直接体现协方差与标准差的比值,理论意义明确。
r x y = ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) ∑ i = 1 n ( x i − x ˉ ) 2 ∑ i = 1 n ( y i − y ˉ ) 2 r_{xy} = \frac{\sum_{i=1}^{n}(x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum_{i=1}^{n}(x_i - \bar{x})^2} \sqrt{\sum_{i=1}^{n}(y_i - \bar{y})^2}} rxy=i=1n(xixˉ)2 i=1n(yiyˉ)2 i=1n(xixˉ)(yiyˉ)
公式二:通过原始数据的总和计算,避免先计算均值的步骤。
r = n ∑ x y − ∑ x ∑ y n ∑ x 2 − ( ∑ x ) 2 n ∑ y 2 − ( ∑ y ) 2 r = \frac{n\sum xy - \sum x \sum y}{\sqrt{n\sum x^{2} - (\sum x)^{2}} \sqrt{n\sum y^{2} - (\sum y)^{2}}} r=nx2(x)2 ny2(y)2 nxyxy
两个公式展开后是相等的,这里不多做数学推导

  • r<0 负相关 r>0正相关
  • |r| <0.4 低度相关 0.4<=|r|<=0.7 显著相关 0.7<=|r|<=1 高度线性相关

准备数据

import pandas as pd

p1 = pd.DataFrame([{"name":"张三","age":22,"height":175,"weight":156},
					{"name":"李四","age":12,"height":126,"weight":98},
					{"name":"王五","age":17,"height":151,"weight":123},
					{"name":"老刘","age":16,"height":153,"weight":135}])
from scipy.stats import pearsonr

def test():
    r = pearsonr(p1 ["age"],p1 ["height"])
    print("age和height特征列   相关性结果----------",r)
    r2 = pearsonr(p1["height"], p1["weight"])
    print("height和weight特征列   相关性结果----------", r2)

if __name__ == '__main__':
    test()

在这里插入图片描述
statistic表示相关性,表明年龄和身高,身高和体重相关性都很高

当两列相关性非常高时:

  1. 选取其中一列作为特征值
  2. 两列求加权求和得到新的特征列,舍弃原来两列特征
  3. 使用下方的主成分分析

主成分分析法

  • 目标‌:将高维数据转换为低维表示,同时保留尽可能多的原始信息。
  • 用途‌:数据可视化、噪声过滤、特征提取、减少计算复杂度等。

其核心思想可概括为:
方差最大化:新坐标系的选择使数据在第一个主成分上的方差最大,后续主成分依次递减,且彼此正交(不相关)。
线性组合‌:每个主成分是原始变量的线性组合,且彼此正交(不相关)。

from sklearn.decomposition import PCA

def test():
    # n_components=0.95 小数:表示保留百分之多少的信息   
    # 整数:减少到多少特征降 纬度
    pcaTransform = PCA(n_components=0.95)
    pcaData = pcaTransform.fit_transform([[2,8,4,6],[8,0,3,5],[1,0,9,7]])
    print("主成分分析PCA结果----------\n   ", pcaData)

if __name__ == '__main__':
    test()

结果纬度少了一半,n_components信息还保留了0.95,从而达到降维目的
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值