机器学习—特征预处理和降维(四)

news2025/5/23 13:31:02

什么是特征预处理?

在这里插入图片描述
通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程

1包含内容

  • 数值型数据的无量纲化:
    • 归一化
    • 标准化

2特征预处理API

sklearn. preprocessing

为什么要进行归一化 or 标准化?
特征的单位或者大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级,容易影响(支配)目标结果,使得一些算法无法学习到其它的特征。

归一化

1定义
通过对原始数据进行变换把数据映射到(默认为[0,1])之间

2公式
在这里插入图片描述

作用于每一列,max为一列的最大值,min为一列的最小值,那么X"为最终结果,mx,mi分别为指定区间值默认mx为1,mi为0

在这里插入图片描述
3API

  • sklearn.preprocessing.MinMaxScaler (feature_range=(0,1)…)
    • MinMaxScalar.fit_transform(X)
      • X:numpy array格式的数据[n_samples,n_features]
    • 返回值:转换后的形状相同的array

4数据计算
我们对以下数据进行运算:

milage,Liters, consumtime,target
40920,8.326976,0.953952,3
14488,7.153469,1.673904,2
26052,1.441871,0.805124,1
75136,13.147394,0.428964,1
38344,1.669788,0.134296,1
  • 分析
    • 1、实例化MinMaxScalar
    • 2、通过fit_transform转换
import pandas as pd
from sklearn.preprocessing import MinMaxScaler

在这里插入图片描述
在这里插入图片描述

问题:如果数据中异常点较多,会有什么影响?
异常值

5归一化总结
注意最大值最小值是变化的,另外,最大值与最小值非常容易受异常点影响,所以这种方法篆棒性较差,只适合传统精确小数据场景。

标准化

1定义
通过对原始数据进行变换把数据变换到均值为0,标准差为1范围内

2公式
在这里插入图片描述

作用于每一列,平均值为mean,标准差为σ

在这里插入图片描述

  • 对于归一化︰如果出现异常点,影响了最大值和最小值,那么结果显然会发生改变
  • 对于标准化:如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小。

3API

  • sklearn.preprocessing.StandardScaler()
    • 处理之后,对每列来说,所有数据都聚集在均值为0附近,标准差为1
    • StandardScaler.fit_transform(X)
      • X:numpy array格式的数据[n_samples,n_features]
    • 返回值:转换后的形状相同的array

4数据计算

在这里插入图片描述
在这里插入图片描述

5标准化总结
在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。

降维

降维是指在某些限定条件下,降低随机变量(特征)个数,得到一组“不相关”主变量的过程。

此处的降维:降低特征的个数,使特征与特征之间不相关

  • 降低随机变量的个数
    在这里插入图片描述
  • 相关特征(correlated feature)
    • 相对湿度与降雨量之间的相关
    • 等等

正是因为在进行训练的时候,使用特征进行学习。如果特征本身存在问题或者特征之间相关性较强,对于算法学习预测会影响较大

降维的两种方式

  • 特征选择
  • 主成分分析(可以理解一种特征提取的方式)

特征选择

1定义
数据中包含冗余或相关变量(或称特征、属性、指标等),旨在从原有特征中找出主要特征。

2方法

  • Filter(过滤式):主要探究特征本身特点、特征与特征和目标值之间关联
    • 方差选择法:低方差特征过滤
    • 相关系数:特征与特征之间的相关程度
  • Embedded(嵌入式):算法自动选择特征(特征与目标值之间的关联)
    • 决策树:信息嫡、信息增益
    • 正则化:L1、L2
    • 深度学习:卷积等

3模块

sklearn.feature_selection

4过滤式

4.1低方差特征过滤
删除低方差的一些特征,前面讲过方差的意义。再结合方差的大小来考虑这个方式的角度。

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

4.1.1API

  • sklearn.feature_selection.VarianceThreshold(threshold = 0.0)
    • 删除所有低方差特征
    • Variance.fit_transform(X)
      • X:numpy array格式的数据[n_samples,n_features]
      • 返回值:训练集差异低于threshold的特征将被删除。默认值是保留所有非零方差特征,即删除所有样本中具有相同值的特征。

4.1.2数据计算

1、初始化VarianceThreshold,指定阀值方差
2、调用fit_transform

在这里插入图片描述
在这里插入图片描述

transfer = VarianceThreshold(threshold=10)进行限制阈值,过滤不太重要的特征

4.2相关系数

  • 皮尔逊相关系数(Pearson Correlation Coefficient)
    • 反映变量之间相关关系密切程度的统计指标

4.2.1公式
在这里插入图片描述
列题
在这里插入图片描述

4.2.2特点
相关系数的值介于-1与+1之间,即-1 ≤ r ≤ +1。其性质如下:

  • 当 r>0时,表示两变量正相关,r<0时,两变量为负相关
  • 当 |r|=1时,表示两变量为完全相关,当 r=0时,表示两变量间无相关关系
  • 当 0<|r|<1 时,表示两变量存在一定程度的相关。且 |r|越接近1,两变量间线性关系越密切;|r|越接近于0,表示两变量的线性相关越弱
  • 一般可按三级划分:|r|<0.4为低度相关;0.4≤|r|<0.7为显著性相关;0.7≤lrl<1为高度线性相关

4.2.3API

  • from scipy.stats import pearsonr
  • ×:(N)array_like
  • y :(N,)array_like Returns:(Pearson’s correlation coefficient, p-value)
#计算某两个变量之间的相关系数
r =pearsonr(data["pe_ratio"], data["pb_ratio"])
print("相关系数: \n", r)
r2 = pearsonr(data['revenue'], data['total_expense'])
print("revenue与total_expense之间的相关性:\n",r2)

在这里插入图片描述

我们也可以通过画图来观察结果

import matplotlib.pyplot as plt
plt.figure(figsize=(20,8),dpi=100)
plt.scatter(data['revenue'], data['total_expense '])
plt.show ( )

在这里插入图片描述

若特征与特征之间相关性很高:①选取其中一个②加权求和③主成分分析

主成分分析

  • 定义:高维数据转化为低维数据的过程,在此过程中可能会舍弃原有数据、创造新的变量。
  • 作用:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。
  • 应用:回归分析或者聚类分析当中。

1例子
在这里插入图片描述
找到一个合适的直线,通过一个矩阵运算得出主成分分析的结果

在这里插入图片描述

2API

  • sklearn.decomposition.PCA(n_components=None)
    • 将数据分解为较低维数空间
    • n_components:
      • 小数:表示保留百分之多少的信息
      • 整数:减少到多少特征
    • PCA.fit_transform(X)
      • X:numpy array格式的数据[n_samples,n_features]
    • 返回值:转换后指定维度的array

整数:
在这里插入图片描述
在这里插入图片描述
小数:
在这里插入图片描述
在这里插入图片描述

3案例
探究用户对物品类别的喜好细分

用户物品类别
user_idaisle

①需要将user_id和aisle放在同一个表中——合并
②找到user_id和aisle——交叉表和透视表
③特征冗余过多——>PCA降维

import pandas as pd
#1、获取数据
order_products=pd.read_csv("./instacart/order_products_prior.csv")
products=pd.read_csv("./instacart/products.csv")
orders=pd.read_csv("./instacart/orders.csv")
aisles=pd.read_csv("./instacart/aisles.csv")

#2、合并
tab1=pd.merge(aisles,products,on=["aisle_id","aisle_id"])
Lab2=pd.merge(tab1,order_products,on=["product_id","product_id"])
tab3=pd.merge(tab2,orders,on=["order_id","order_id"])

#3、找到user_id和aisle之间的关系
table=pd.crosstab(tab3["user_id"],tab3["aisle"])
data =table[ :10000]#数据过多,取前10000个

#4、PCA降维
from sklearn.decomposition import PCA
#1)实例化一个转换器类
transfer=PCA(n_components=0.95)
#2)调用fit_transform
data_new=transfer.fit_transform(data)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UDP实现Mini版在线聊天室

实现原理 只有当客户端先对服务器发送online消息的时候&#xff0c;服务器才会把客户端加入到在线列表。当在线列表的用户发消息的时候&#xff0c;服务器会把消息广播给在线列表中的所有用户。而当用户输入offline时&#xff0c;表明自己要下线了&#xff0c;此时服务器把该用…

keil参数删除后补写没有代码提示

代码提示快捷键 ctrlalt空格 如果按了之后没有提示&#xff0c;那说明跟输入法的快捷键冲突了。

C++引用和右值引用

我最近开了几个专栏&#xff0c;诚信互三&#xff01; > |||《算法专栏》&#xff1a;&#xff1a;刷题教程来自网站《代码随想录》。||| > |||《C专栏》&#xff1a;&#xff1a;记录我学习C的经历&#xff0c;看完你一定会有收获。||| > |||《Linux专栏》&#xff1…

【vue】toRef,toRefs

toRef&#xff1a;把一个 响应式对象 转换为对应的ref变量toRefs&#xff1a;把一个 响应式对象 转换为对应的ref对象 代码 <template><P>mname: {{ mname }} </P><P>mage: {{ mage }} </P><P>msex: {{ msex }} </P><P>mhobb…

c语言中<string.h>的strstr与strtok函数

c语言中string.h的strstr与strtok函数 代码运行结果 代码 #include <stdio.h> #include <string.h>///1.在字符串str1里面,查找第一次出现str2的位置 //char * strstr(const char * str1,const char * str2)///2.sep为分割符,根据分割符来对str进行分割 //char * …

【计算机毕业设计】基于Java+SSM的实战开发项目150套(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f9e1;今天给大家分享150的Java毕业设计&#xff0c;基于ssm框架&#xff0c;这些项目都经过精心挑选&#xff0c;涵盖了不同的实战主题和用例&#xff0c;可做毕业设计和课程…

轻量级 S3 协议存储客户端

目前大家一般不会把二进制文件直接放在应用服务器上&#xff0c;而是存在“对象存储”的方案中&#xff0c;例如亚马逊的 AWS&#xff0c;阿里云的 OSS、Cloudflare R2 等。AWS 为最早的始作俑者&#xff0c;因此其 S3 协议也近乎标准化&#xff0c;各大厂商的对象存储方案都实…

苹果全力升级:用专注AI的M4芯片彻底改造Mac系列

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

vue3+elment复杂详情页面打开后,再打开其他页面都显示空白,控制台也没什么特殊报错

页面使用了el-tabs 、 el-tab-pane、el-table 等标签 但是经测试不是这些问题导致的 js也使用了onMounted &#xff0c;但是除掉也时空白页面 反正之前人写的页面可乱&#xff0c;尤其是js这块&#xff0c;穿插引用import一大堆 主题页面样式布局如下 最后看到页面代码太乱…

funasr 麦克风实时流语音识别;模拟vad检测单独输出完整每句话

参考: https://github.com/alibaba-damo-academy/FunASR chunk_size 是用于流式传输延迟的配置。[0,10,5] 表示实时显示的粒度为 1060=600 毫秒,并且预测的向前信息为 560=300 毫秒。每个推理输入为 600 毫秒(采样点为 16000*0.6=960),输出为相应的文本。对于最后一个语音…

【树莓派初始化】教你从0开始搭建树莓派的使用环境

文章目录 前言1.什么是树莓派&#xff1f;1.1什么用户适合购买树莓派学习编程&#xff1f; 2.如何初始化一个树莓派2.1 烧录系统2.2 测试开机2.3 设置树莓派显示输出的分辨率2.4 网络链接2.5 Putty链接树莓派2.6 VNC链接树莓派2.7 使用filezilla软件传输文件到树莓派 3.使用Xsh…

从 0 搭建公司Jenkins服务 Centos7

从 0 搭建公司Jenkins服务 Centos7 安装 (运维人员) 安装环境 配置DNS安装JDK17安装Jenkins安装Docker安装GIT安装Ansible启动Jenkins安装插件配置凭据配置共享库配置 (开发经理)使用 (开发、测试人员) 安装 (运维人员) 安装环境 配置DNS 新安装系统的服务器无法解析域名&a…

【数据结构】二叉爆炸

【数据结构】二叉爆炸 按照惯例整点抽象的&#xff0c;贴上这篇博客的名字由来&#xff1a; 言归正传&#xff0c;本篇博客介绍二叉树的构造方式、前中后序遍历、层序遍历以及代码随想录中二叉树章节的相关题目&#xff1a; 代码随想录 (programmercarl.com) 一、啥是二叉树 …

【150套】基于SSM框架的Java毕业设计开发实战项目(附源码+演示视频+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f9e1;今天给大家分享150的Java毕业设计&#xff0c;基于ssm框架&#xff0c;这些项目都经过精心挑选&#xff0c;涵盖了不同的实战主题和用例&#xff0c;可做毕业设计和课程…

服务器docker应用一览

文章目录 一、需求概况二、业务流程三、运行效果四、实现过程1. 基础前提2. 源码放送3.核心代码4. 项目打包5.部署步骤 一、需求概况 现有某云主机服务器&#xff0c;用来做项目演示用&#xff0c;上面运行了docker应用&#xff0c;现希望有一总览页面&#xff0c;用来展示部署…

fastjson 序列化问题

问题: 使用fastjson 的 对同一个JSONObject对象 多次引用后, 通过 JSON.toJSONString() 方法进行json序列化时出现只有第一次的可以成功序列化未json string 字符串, 后面的对象都为引用地址; 示例: public static void main(String[] args) {JSONObject jsonObject new JSON…

【C语言__结构体__复习篇3】

目录 前言 一、结构体基础知识 1.1 结构体的语法形式 1.2 创建结构体变量 1.3 结构体变量的初始化 1.4 点(.)操作符和箭头(->)操作符 二、匿名结构体 三、结构体自引用 四、结构体内存对齐 4.1 内存对齐的规则 4.2 出现结构体内存对齐的原因 4.3 修改默认对齐数 五、结…

【YOLOv9】完胜V8的SOTA模型Yolov9(论文阅读笔记)

官方论文地址&#xff1a; 论文地址点击即可跳转 官方代码地址&#xff1a; GitCode - 开发者的代码家园 官方代码地址点击即可跳转 1 总述 当输入数据经过各层的特征提取和变换的时候&#xff0c;都会丢失一定的信息。针对这一问题&#xff1a; 论文中提出的可编程梯度信息…

高颜值的B端界面,如果漂亮也有错,就让它错下去吧。

分享一波漂亮的B端界面&#xff0c;内行看门道&#xff0c;外行看热闹&#xff0c;不喜勿喷昂。

防止狗上沙发,写一个浏览器实时识别目标检测功能

家里有一条狗&#x1f436;&#xff0c;很喜欢乘人不备睡沙发&#x1f6cb;️&#xff0c;恰好最近刚搬家 狗迎来了掉毛期 不想让沙发上很多毛。所以希望能识别到狗&#xff0c;然后播放“gun 下去”的音频&#x1f4e3;。 需求分析 需要一个摄像头&#x1f4f7; 利用 chrome…