当前位置: 首页 > backend >正文

08_预处理与缩放

描述

机器学习的一些算法(如神经网络、SVM)对数据缩放非常敏感。通常的做法是对特征进行调节,使数据表示更适合与这些算法。

scikit-learn中提供了4中数据缩放方法:

  • StandardScaler:确保每个特征平均值为0,方差为1,使所有特征都位于同一量级
  • RobusScaler:工作原理与StandardScaler类似,确保每个特性的统计属性都位于同一范围
  • MinMaxScaler:移动数据,使所有数据都刚好位于0到1之间。
  • Normalizer:对每个个数据点进行缩放,使得特征向量的欧式长于等于1。(它将数据点投射到半径为1的圆上,这意味这每个数据点的缩放比都不相同。如果只有数据方向重要,而特征向量的长度无关紧要,那么通常用这种所方式归一化)

数据变换

import mglearn
mglearn.plots.plot_scaling()

应用数据变换

将核SVM(SVC)应用到cancer数据集上,并使用MinMaxScaler来预处理数据。

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_splitcancer = load_breast_cancer()
X_train,X_test,Y_train,Y_test = train_test_split(cancer.data,cancer.target,random_state=1)
print(X_train.shape)
print(X_test.shape)

导入MinMaxScaler,然后实例化,调用fit方法拟合缩放器。最后使用缩放器transform方法,对训练数据进行缩放

from sklearn.preprocessing import MinMaxScalerscaler = MinMaxScaler()
scaler.fit(X_train)
X_train_scaled = scaler.transform(X_train)
## 可以使用fit_transform代替fit、transform,一步到位
# X_train_scaled = scaler.fit_transform(X_train)

变换后的数据形状与原始数据相同,特征只是发生了移动和缩放。可以看到,现在所有特征都位于 0 到 1 之间。

对测试数据进行相同的缩放

为了让监督模型能够在测试集上运行,对训练集和测试集应用完全相同的变换是很重要。

例子1:训练使用缩放后的数据、测试使用原始数据

svc = SVC()
svc.fit(X_train_scaled,Y_train)print(svc.score(X_train_scaled,Y_train),svc.score(X_test,Y_test))

例子2:训练、测试都使用缩放后的数据

svc = SVC()
svc.fit(X_train_scaled,Y_train)
X_test_scaled = scaler.transform(X_test)print(svc.score(X_train_scaled,Y_train),svc.score(X_test_scaled,Y_test))

对比上面两个个例子,可以看到,测试集没有缩放的情况下(例子1),模型明显是一个过拟合的状态。

对训练集和测试集应用完全相同的变换后(例子3),模型训练、测试都拿到一个很不错的得分。(还可以针对SVC的参数进行调优,这里只是验证数据缩放对模型的影响)

预处理对监督学习的作用

通过上例的例子,可以看到数据缩放的作用非常显著。虽然数据缩放不涉及任何复杂的数学,但良好的做法仍然是使用 scikit-learn 提供的缩放机制,而不是自己重新实现它们。(在支持核向量机中手动实现了数据缩放)
可以通过改变使用的类将一种预处理算法轻松替换成另一种,因为所有的预处理类都具有相同的接口,都包含 fit 和 transform 方法:

from sklearn.preprocessing import StandardScalerscaler = StandardScaler()
scaler.fit(X_train)
X_train_scaled = scaler.transform(X_train)
X_test_scaled = scaler.transform(X_test)svc = SVC()
svc.fit(X_train_scaled,Y_train)
print(svc.score(X_train_scaled,Y_train),svc.score(X_test_scaled,Y_test))
http://www.xdnf.cn/news/9184.html

相关文章:

  • 关于 smali:1. Smali 基础语法入门
  • 一款不错的嵌入式开发自动化测试平台
  • Trivy 镜像漏洞扫描:从零入门到实战指南
  • java基础(面向对象进阶高级)泛型(API一)
  • 智能AI之常用协议普及
  • HarmonyOS优化应用文件上传下载慢问题性能优化
  • CMU-15445(5)——PROJECT#1-BufferPoolManager-Task#3
  • kali切换为中文
  • 输入一串字符,统计其中字母的个数
  • Python5.26打卡(day27)
  • 【SQL server】 SQL子查询:与连接的区别、类型划分、相关与非相关子查询对比
  • YOLOv12增加map75指标
  • [QMT量化交易小白入门]-五十七、ETF历史行情分钟线下载
  • 25盘古石初赛wp(部分)
  • Java----自动装箱和自动拆包 与 泛型
  • 大模型的检索增强生成综述研究
  • 用python写节奏大师小游戏
  • TMS320F28388使用sysconfig配置SCI通信(RS485+FIFO+Modbus)
  • 第4章-操作系统知识
  • 《反事实棱镜:折射因果表征学习的深层逻辑》
  • SymPy | 其他未知数表示方程中的某一未知数
  • 测绘技术重塑低空经济格局
  • 火语言UI组件--标记
  • 蚂蚁TuGraph图数据库行业落地,开启数据处理新“视界”
  • MySQL进阶实战:窗口函数 VS 聚合函数,性能与场景全对比
  • Java 版本升级指南:从 Java 8 到 Java 11/17/21 的核心优势与新特性
  • ABAP Tools for Clean ABAP
  • dify-api的.env配置文件
  • 前端配置nginx代理
  • 预算超支、进度延误?工程企业如何实现精准管理?