机器学习-无量纲化与特征降维(一)

news2025/7/19 20:18:34

一.无量纲化-预处理

无量纲,即没有单位的数据

无量纲化包括"归一化"和"标准化",这样做有什么用呢?假设用欧式距离计算一个公司员工之间的差距,有身高(m)、体重(kg)以及收入(元)三个标准,正常情况下,收入带来的差距会很大,且看下面的公式:

从计算上来看, 发现身高体重对计算结果没有什么影响, 基本主要由收入来决定了,但是现实生活中,身高是比较重要的判断标准.  所以需要无量纲化.

1.1 MinMaxScaler 归一化

公式:

API:

sklearn.preprocessing.MinMaxScaler(feature_range)

参数:

- feature_range:归一化后的数据的范围,默认为(0,1)。归一化中假设x是(0,1),设置为(2,5)背后即用x*(5-2)+2就可以完成归一化后的范围转化。

返回值为ndarray类型

# 导入相关库
from sklearn.preprocessing import MinMaxScaler

# 定义数据
data = [[2, 3, 4], 
        [5, 6, 7],
        [8, 9, 10]]

# 实例化MinMaxScaler
scaler = MinMaxScaler(feature_range=(1, 2))
data_new = scaler.fit_transform(data)

# 打印结果
print(data_new)

[[1.  1.  1. ]
 [1.5 1.5 1.5]
 [2.  2.  2. ]]

1.2 normalize归一化

API:

normalize(data, norm='l2', axis=1)

参数:

- norm:归一化方式,默认为l2,可选l1、l2、max

    - l1:绝对值相加作为分母,特征值作为分子

    - l2:平方相加作为分母,特征值作为分子

    - max:最大值作为分母,特征值作为分子

- axis:归一化的维度,默认为1,可选0、1

返回值:归一化后的数据

# 导入相关库
from sklearn.preprocessing import normalize

# 定义数据
data = [[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]]

# 归一化
normalized_data = normalize(data,norm='l1',axis=0)

# 打印结果
print(normalized_data)

[[0.08333333 0.13333333 0.16666667]
 [0.33333333 0.33333333 0.33333333]
 [0.58333333 0.53333333 0.5       ]]

注意:这里的normalize是不需要进行fit_transform操作的

上述两种归一化都有缺点:最大值和最小值容易受到异常点影响,所以鲁棒性较差。所以常使用标准化的无量钢化

1.3 StandardScaler 标准化

也是数据归一化的一种,目的是将不同特征的数值范围缩放到统一的标准范围。

最常见的标准化方法是Z-score标准化,也叫零均值标准化。通过对每个特征的值减去其均值,再除以其标准差,将数据转换为均值为0,标准差为1的分布:

API:

sklearn.preprocessing.StandardScale

所有归一化返回的都是ndarray类型

# 导入相关库
from sklearn.preprocessing import StandardScaler

# 定义数据
data = [[1,2,3],
        [4,5,6],
        [7,8,9]]

# 标准化数据
scaler = StandardScaler()
data_new = scaler.fit_transform(data)

# 打印结果
print(data_new)

[[-1.22474487 -1.22474487 -1.22474487]
 [ 0.          0.          0.        ]
 [ 1.22474487  1.22474487  1.22474487]]

这里补充讲讲前面提到过的 fit_transform() 与 fit() 和 transform() 的区别:

fit() 是对传入的数据进行计算,transform() 是对传入的数据进行特征转换,fit_transform() 是先 fit()再 transform()。

# 导入相关库
from sklearn.preprocessing import StandardScaler

# 定义数据
data = [[1,2,3],
        [4,5,6],
        [7,8,9]]

data1 = [[10,20,30],
         [40,50,60],
         [70,80,90]]

# 标准化数据
scaler = StandardScaler()
# 先调用fit
scaler.fit(data)

# 可以查看fit计算的均值和方差
print(scaler.mean_)
print(scaler.var_)


# 再调用transform
data_scaled = scaler.transform(data1)

# 打印结果
print(data_scaled)

[4. 5. 6.]
[6. 6. 6.]
[[ 2.44948974  6.12372436  9.79795897]
 [14.69693846 18.37117307 22.04540769]
 [26.94438717 30.61862178 34.2928564 ]]

可以发现,上面的结果有所不同,这是因为先调用了 fit() 对data的数据进行计算,得到data的均值和方差,此时调用 transform() 会使用最近一次 fit() 计算的均值与方差,所以这里就是用data的均值和方差来对data1进行标准化处理。也可以先调 fit_transform 然后再调 transform ,就是使用前面 fit_transform 计算的均值和方差转化。

这个通常用于训练集与测试集,要用训练集中的均值和方差来对测试集进行转化,一般不使用测试集的均值方差。

二.特征降维

实际数据中,有时候特征很多,会增加计算量,降维就是去掉一些特征,或者转化多个特征为少量个特征。其目的就是减少数据集维度,尽可能保留重要信息。

有两种常见的特征降维方式:

- 特征选择

  - 从原始特征集中挑选出最相关的特征

- 主成份分析(PCA)

  - 主成分分析就是把之前的特征通过一系列数学计算,形成新的特征,新的特征数量会小于之前特征数量

接下来介绍一下基本的特征选择:

2.1 特征选择

2.1.1 VarianceThreshold 低方差过滤特征选择

若一个特征的方差很小,说明这个特征的值在样本中几乎相同或变化不大,包含的信息量很少,下面是VarianceThreshold的工作原理:

1. 计算方差:对于每个特征,计算其在训练集中的方差(每个样本值与均值之差的平方,在求平均)。

2. 设定阈值:选择一个方差阈值,任何低于这个阈值的特征都将被视为低方差特征。

3. 过滤特征:移除所有方差低于设定阈值threshold的特征

API:

sklearn.feature_selection.VarianceThreshold(threshold=2.0)

# 导入相关库
from sklearn.feature_selection import VarianceThreshold

# 定义数据
data = [[12,22,4],
        [11,23,1],
        [11,23,9]]

# 实例化VarianceThreshold
vt = VarianceThreshold(threshold=2)

# 应用VarianceThreshold
result = vt.fit_transform(data)

# 打印结果
print(result)

[[4]
 [1]
 [9]]

2.1.2 根据相关系数的特征选择

皮尔逊相关系数(Pearson correlation coefficient)是一种度量两个变量之间线性相关性的统计量,它是一个介于-1和1之间的数。
 

- ρ = 1 表示完全正相关,即随着一个变量的增加,另一个变量也线性增加。

- ρ = -1 表示完全负相关,即随着一个变量的增加,另一个变量线性减少。

- ρ = 0 表示两个变量之间不存在线性关系。

|ρ|<0.4为低度相关;    0.4<=|ρ|<0.7为显著相关;  0.7<=|ρ|<1为高度相关

API:

scipy.stats.personr(x, y)

参数:

   - x, y: 数组或序列,维度必须相同或能广播至相同。

返回对象有两个属性:

   - statistic 皮尔逊相关系数  

   - pvalue 另一种相关稀疏,零假设(作了解),统计上评估两个变量之间的相关性,越小越相关

# 导入相关库
from scipy.stats import pearsonr

# 定义数据
data = [12,22,4]

tezheng = [1,2,3]

# 计算相关系数
re = pearsonr(data, tezheng)

# 输出相关系数
print(re.statistic)
print(re.pvalue)

-0.4435327625727436
0.7074499612035013

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

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

相关文章

C语言复习--柔性数组

柔性数组是C99中提出的一个概念.结构体中的最后⼀个元素允许是未知大小的数组&#xff0c;这就叫做柔性数组成员。 格式大概如下 struct S { int a; char b; int arr[];//柔性数组 }; 也可以写成 struct S { int a; char b; int arr[0];//柔性数组 }; …

图形化编程如何从工具迭代到生态重构?

一、技术架构的范式突破 在图形化编程领域&#xff0c;技术架构的创新正在重塑行业格局。iVX 作为开源领域的领军者该平台通过图形化逻辑设计&#xff0c;将传统文本编程需 30 行 Python 代码实现的 "按钮点击→条件判断→调用接口→弹窗反馈" 流程&#xff0c;简化…

法国蒙彼利埃大学团队:运用元动力学模拟与马尔可夫状态模型解锁 G 蛋白偶联受体构象动态机制

背景简介 在生命科学领域&#xff0c;G 蛋白偶联受体&#xff08;GPCRs&#xff09;一直是研究的热点。它作为膜蛋白家族的重要成员&#xff0c;承担着细胞对多种刺激的响应任务&#xff0c;从激素、神经递质到外源性物质的信号传导都离不开它。据估计&#xff0c;约三分之一的…

网页Web端无人机直播RTSP视频流,无需服务器转码,延迟300毫秒

随着无人机技术的飞速发展&#xff0c;全球无人机直播应用市场也快速扩张&#xff0c;从农业植保巡检到应急救援指挥&#xff0c;从大型活动直播到智慧城市安防&#xff0c;实时视频传输已成为刚需。预计到2025年&#xff0c;全球将有超过1000万架商用无人机搭载直播功能&#…

数据结构-堆排序

1.定义 -堆中每个节点的值都必须大于等于&#xff08;或小于等于&#xff09;其左右子节点的值。如果每个节点的值都大于等于其子节点的值&#xff0c;这样的堆称为大根堆&#xff08;大顶堆&#xff09;&#xff1b;如果每个节点的值都小于等于其子节点的值&#xff0c;称为…

DedeCMS-Develop-5.8.1.13-referer命令注入研究分析 CVE-2024-0002

本次文章给大家带来代码审计漏洞挖掘的思路&#xff0c;从已知可控变量出发或从函数功能可能照成的隐患出发&#xff0c;追踪参数调用及过滤。最终完成代码的隐患漏洞利用过程。 代码审计挖掘思路 首先flink.php文件的代码执行逻辑&#xff0c;可以使用php的调试功能辅助审计 …

运用数组和矩阵对数据进行存取和运算——NumPy模块 之五

目录 NumPy模块介绍 3.5.1 NumPy 操纵数组元素的逻辑 3.5.2 添加数组元素操作 1. append() 函数 2. insert() 函数 3.5.3 删除数组元素的操作 delete() 函数 3.5.4 数组元素缺失情况的处理 isnan() 函数 3.5.5 处理数组中元素重复情况 unique() 函数 3.5.6 拼接数组操作 1. con…

Nginx的增强与可视化!OpenResty Manager - 现代化UI+高性能反向代理+安全防护

以下是对OpenResty Manager的简要介绍&#xff1a; OpenResty Manager &#xff08;Nginx 增强版&#xff09;&#xff0c;是一款容易使用、功能强大且美观的反向代理工具 &#xff0c;可以作为OpenResty Edge 的开源替代品基于 OpenResty 开发&#xff0c;支持并继承 OpenRes…

Linux:43线程封装与互斥lesson31

mmap文件映射视屏&#xff1a;待看... 目录 线程栈 代码证明&#xff1a;一个线程的数据&#xff0c;其他线程也可以访问 线程封装 简单封装,2.thread Thread.hpp Main.cc Makefile 结果&#xff1a; ​编辑 问题1&#xff1a; 问题2&#xff1a; lamba表达式 模版封…

“工作区”升级为“磁盘”、数据集统计概览优化|ModelWhale 版本更新

本次更新围绕用户在实际项目中对平台的理解和管理体验进行了多项优化。 “工作区”升级为“磁盘”、及其管理优化 平台“工作区”概念正式更名为“磁盘”&#xff0c;突出其存储功能。原有以目录代称的存储区域划分同步更名&#xff0c;其中“work目录”更改为“个人磁盘”&am…

【Mysql基础】一、基础入门和常见SQL语句

&#x1f4da;博客主页&#xff1a;代码探秘者-CSDN博客 &#x1f308;&#xff1a;最难不过坚持 ✨专栏 &#x1f308;语言篇C语言\ CJavase基础&#x1f308;数据结构专栏数据结构&#x1f308;算法专栏必备算法&#x1f308;数据库专栏MysqlRedis&#x1f308;必备篇 其他…

AWS之存储服务

目录 一、传统存储术语 二、传统存储与云存储的关系 三、云存储之AWS 使用场景 文件存储 数据块存储 对象存储 EBS、EFS、S3对比 EBS块存储 S3对象存储 S3 使用案例 S3 存储类 EFS文件存储 一、传统存储术语 分类 接口/技术类型 应用场景特点 关系及区别 机械硬…

Jmeter中的Json提取器如何使用?

在JMeter中使用JSON提取器可以方便地从JSON格式的响应数据中提取特定字段的值。以下是详细步骤和示例&#xff1a; 1. 添加JSON提取器 右击目标HTTP请求 -> 选择 添加 -> 后置处理器 -> JSON提取器。 2. 配置JSON提取器参数 变量名称&#xff08;Names of created…

从零理解 C++ 中的原子布尔变量:`std::atomic<bool>` 入门指南

文章目录 引言&#xff1a;为什么需要原子变量&#xff1f;一、什么是 std::atomic<bool>&#xff1f;二、为什么不用普通 bool&#xff1f;一个反面例子三、std::atomic<bool> 的用法四、std::atomic<bool> 的优势五、完整示例&#xff1a;多线程文件传输六…

六个仓库合并为一个仓库,保留master和develop分支的bat脚本

利用git subtree可以实现多个仓库合并为一个仓库&#xff0c;手动操作起来太麻烦了&#xff0c;今天花了点时间写了一个可执行的脚本&#xff0c;现在操作起来就方便多了。 1、本地新建setup.bat文件 2、用编辑器打开&#xff08;我用的是Notepad&#xff09; 3、把下面代码…

养生:通往健康生活的桥梁

在生活节奏日益加快的今天&#xff0c;养生已成为维持身心健康的必要手段。从日常饮食到运动锻炼&#xff0c;从睡眠质量到心态调节&#xff0c;每一个环节都对我们的生活品质有着重要影响。以下是一些实用的养生建议&#xff0c;帮助你打造健康生活。 饮食养生&#xff1a;均…

【前端基础】9、CSS的动态伪类(hover、visited、hover、active、focus)【注:本文只有几个粗略说明】

一、什么是伪类 选择器的一种&#xff0c;用于选择处于特定状态的元素。 最常见的现象&#xff1a;鼠标放在某些文字上面&#xff0c;文字就会加上颜色。 鼠标没放上去之前&#xff1a; 鼠标放上去之后&#xff1a; 二、动态伪类 图片来源&#xff08;链接文章也有其他伪…

Simufact Welding重塑新能源汽车电池盒焊接工艺

引言 近年来&#xff0c;新能源汽车行业呈爆发式增长&#xff0c;已然成为全球能源转型与汽车产业升级的核心方向。在新能源汽车中&#xff0c;电池系统占据核心地位&#xff0c;作为电池系统重要组成部分的电池盒&#xff0c;也发挥着不可或缺的作用 。目前&#xff0c;电池盒…

WordPress 网站上的 jpg、png 和 WebP 图片插件

核心功能 1. 转换 AVIF 并压缩 AVIF 将您 WordPress 网站上的 jpg、png 和 WebP 图片转换为 AVIF 格式&#xff0c;并根据您设置的压缩级别压缩 AVIF 图片。如果原始图片已经是 WordPress 6.5 以上支持的 AVIF 格式&#xff0c;则原始 AVIF 图片将仅被压缩。 2. 转换 WebP 并…

如何应对网站被爬虫和采集?综合防护策略与实用方案

在互联网时代&#xff0c;网站内容被恶意爬虫或采集工具窃取已成为常见问题。这不仅侵犯原创权益&#xff0c;还可能影响网站性能和SEO排名。以下是结合技术、策略与法律的综合解决方案&#xff0c;帮助网站构建有效防护体系。 一、技术防护&#xff1a;阻断爬虫的“技术防线”…