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

【机器学习】sklearn对数据预处理

文章目录

  • 数据处理步骤
  • 观察数据
  • 数据无量纲化
  • 缺失值处理
  • 处理分类型特征
  • 处理连续型特征


数据处理步骤

  1. 数据无量纲化
  2. 缺失值处理
  3. 处理分类型特征:编码与哑变量
  4. 处理连续型特征:二值化与分段

观察数据

通过pandas读取数据,通过headinfo方法大致查看一下数据
在这里插入图片描述在这里插入图片描述结论:

  1. 暂时无需进行无量纲化处
  2. AgeEmbarked需要进行缺失值处理
  3. 处理分类型特征:SexEmbarkedSurvived这几个特征的数据只有几类可以转换为数值型变量。
  4. 处理连续型特征:Age连续型可以进行段处理成几类。

数据无量纲化

在机器学习算法实践中,我们往往有着将不同规格的数据转换到同一规格,或不同分布的数据转换到某个特定分布的需求,这种需求统称为将数据“无量纲化”。

无量纲化后可以加快求解速度。

数据的无量纲化可以是线性的,也可以是非线性的。
线性的无量纲化包括中心化(Zero-centered或者Meansubtraction)处理和缩放处理(Scale)。中心化的本质是让所有记录减去一个固定值,即让数据样本数据平移到某个位置。缩放的本质是通过除以一个固定值,将数据固定在某个范围之中,取对数也算是一种缩放处理。

由于上述无需该处理,这个进行构造数据进行操作:

  1. 归一化

当数据(x)按照最小值中心化后,再按极差(最大值 - 最小值)缩放,数据移动了最小值个单位,并且会被收敛到[0,1]之间,而这个过程,就叫做数据归一化(Normalization,又称Min-Max Scaling)。

x ∗ = x i − m i n ( x ) m a x ( x ) − m a x ( x ) x^*=\frac{ x_i-min(x)}{max(x)-max(x) } x=max(x)max(x)ximin(x)

preprocessing.MinMaxScaler
(1) 构造数据

from sklearn.preprocessing import MinMaxScaler
import pandas as pd
data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
pd.DataFrame(data)

在这里插入图片描述(2)归一化

scaler = MinMaxScaler() #实例化
result_ = scaler.fit_transform(data) #训练和导出结果一步达成
result_

在这里插入图片描述可以逆转,把归一化的数据变回原来数据

scaler.inverse_transform(result) #将归一化后的结果逆转

在这里插入图片描述

MinMaxScaler类有一个很重要的参数feature_range默认是元组(0,1):把数据压缩到的范围。

#使用MinMaxScaler的参数feature_range实现将数据归一化到[0,1]以外的范围中
data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
scaler = MinMaxScaler(feature_range=(5,10)) #依然实例化
result = scaler.fit_transform(data) #fit_transform一步导出结果
result

在这里插入图片描述当X中的特征数量非常多的时候,fit会报错并表示,数据量太大了我计算不了,此时使用partial_fit作为训练接口scaler = scaler.partial_fit(data)

  1. 数据标准化

当数据(x)按均值(μ)中心化后,再按标准差(σ)缩放,数据就会服从为均值为0,方差为1的正态分布(即标准正态分布),而这个过程,就叫做数据标准化(Standardization,又称Z-score normalization),公式如下:
x ∗ = x − μ σ x^*=\frac{ x-μ}{σ} x=σxμ

preprocessing.StandardScaler

from sklearn.preprocessing import StandardScaler
data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
scaler = StandardScaler() #实例化
x_std = scaler.fit_transform(data) 

在这里插入图片描述一样可以逆转:

scaler.inverse_transform(x_std)

在这里插入图片描述

  1. 总结
    对于StandardScalerMinMaxScaler来说,空值NaN会被当做是缺失值,在fit的时候忽略,在transform的时候保持缺失NaN的状态显示。并且,尽管去量纲化过程不是具体的算法,但在fit接口中,依然只允许导入至少二维数组,一维数组导入会报错。

大多数机器学习算法中,会选择StandardScaler来进行特征缩放,因为MinMaxScaler对异常值非常敏感。在PCA,聚类,逻辑回归,支持向量机,神经网络这些算法中,StandardScaler往往是最好的选择。
在这里插入图片描述


缺失值处理

sklearn库中处理缺失值的类是SimpleImputer,这个类的相关参数:

参数含义&输入
missing_values告诉SimpleImputer,数据中的缺失值长什么样,默认空值np.nan
strategy我们填补缺失值的策略,默认均值。
输入“mean”使用均值填补(仅对数值型特征可用)
输入“median"用中值填补(仅对数值型特征可用)
输入"most_frequent”用众数填补(对数值型和字符型特征都可用)
输入“constant"表示请参考参数“fill_value"中的值(对数值型和字符型特征都可用)
fill_value当参数startegy为”constant"的时候可用,可输入字符串或数字表示要填充的值,常用0
copy默认为True,将创建特征矩阵的副本,反之则会将缺失值填补到原本的特征矩阵中去。

在这里插入图片描述
AgeEmbarked需要进行缺失值处理:

(1)Age

Age = data.loc[:,"Age"].values.reshape(-1,1) #sklearn当中特征矩阵必须是二维

reshape方法将其由一维处理到二维,sklearn对特征的处理,必须二维,不然会报错。

from sklearn.impute import SimpleImputer
imp_mean = SimpleImputer() #实例化,默认均值填补
imp_median = SimpleImputer(strategy="median") #用中位数填补
imp_0 = SimpleImputer(strategy="constant",fill_value=0) #用0填补

实例化3种方式填充。

imp_mean = imp_mean.fit_transform(Age) #fit_transform一步完成调取结果
imp_median = imp_median.fit_transform(Age)
imp_0 = imp_0.fit_transform(Age)
#在这里我们使用中位数填补Age
data.loc[:,"Age"] = imp_median
data.info()

在这里插入图片描述

也可以一步完成:

data.loc[:,"Age"] = SimpleImputer().fit_transform(Age)

在这里插入图片描述(2)Embarked
这个特征只缺了2个数据,可以直接删掉,影响不大。但是如果面对缺失较多的文字型数据可以使用众数进行填充most_frequent

data.loc[:,"Embarked"] = SimpleImputer(strategy = "most_frequent").fit_transform(Embarked)

在这里插入图片描述
补:pandas填充更方便:

data.loc[:,"Age"] = data.loc[:,"Age"].fillna(data.loc[:,"Age"].median())

处理分类型特征

在机器学习中,大多数算法,譬如逻辑回归,支持向量机SVM,k近邻算法等都只能够处理数值型数据,不能处理文字,在sklearn当中,除了专用来处理文字的算法,其他算法在fit的时候全部要求输入数组或矩阵,也不能够导入文字型数据(其实手写决策树和普斯贝叶斯可以处理文字,但是sklearn中规定必须导入数值型)。

将文字型数据转换为数值型:

在这里插入图片描述

  1. 标签数据[Yes,No,Unkown]=>[0,1,2] ,LabelEncoder类专门处理标签,可以输入一维向量,特征类的必须是二维及以上。
from sklearn.preprocessing import LabelEncoder
y = data.iloc[:,-1] #要输入的是标签,不是特征矩阵,所以允许一维
le = LabelEncoder() #实例化
le = le.fit(y) #导入数据
label = le.transform(y) #transform接口调取结果

label就是我们处理后的数据:
在这里插入图片描述可以通过classes_看原有的类别:
在这里插入图片描述也和其他的一样,可以一步到位,或者逆转:
在这里插入图片描述

data.iloc[:,-1] = label #让标签等于我们运行出来的结果
data.head()

在这里插入图片描述一步到位:

from sklearn.preprocessing import LabelEncoder
data.iloc[:,-1] = LabelEncoder().fit_transform(data.iloc[:,-1])
  1. SexEmbarked特征变量处理:OrdinalEncoder
from sklearn.preprocessing import OrdinalEncoder
#接口categories_对应LabelEncoder的接口classes_,一模一样的功能
data_ = data.copy()
data_.head()
OrdinalEncoder().fit(data_.iloc[:,1:-1]).categories_

在这里插入图片描述

data_.iloc[:,1:-1] = OrdinalEncoder().fit_transform(data_.iloc[:,1:-1])
data_.head()

【这样做不太对,原本毫无关联的文字型变量,现在变成有数学含义的数字型,赋予了大小等其他数学含义】

直接pass掉OrdinalEncoder类处理特征数据,采用OneHotEncoder独热编码:
在这里插入图片描述由原本的一列变成变成多列,列数为类别数。

from sklearn.preprocessing import OneHotEncoder
X = data.iloc[:,1:-1]
enc = OneHotEncoder(categories='auto').fit(X)
result = enc.transform(X).toarray()
result

在这里插入图片描述可以查看每一列的含义:

enc.get_feature_names_out()

在这里插入图片描述也可以还原到原来的两列:
在这里插入图片描述然后需要做的就是,给原数据拼接上面的数据,删除独热编码之前的类,重命名索引名:

#axis=1,表示跨行进行合并,也就是将量表左右相连,如果是axis=0,就是将量表上下相连
newdata = pd.concat([data,pd.DataFrame(result)],axis=1)

在这里插入图片描述

newdata.drop(["Sex","Embarked"],axis=1,inplace=True)
newdata.columns =["Age","Survived","Female","Male","Embarked_C","Embarked_Q","Embarked_S"]

在这里插入图片描述

总结:
在这里插入图片描述


处理连续型特征

  1. 二值化:
    根据阈值将数据二值化(将特征值设置为0或1),用于处理连续型变量。大于阈值的值映射为1,而小于或等于阈值的值映射为0。默认阈值为0时,特征中所有的正值都映射到1。
from sklearn.preprocessing import Binarizer
X = data_2.iloc[:,0].values.reshape(-1,1) #类为特征专用,所以不能使用一维数组
transformer = Binarizer(threshold=30).fit_transform(X)
transformer

在这里插入图片描述

data_2.iloc[:,0] = transformer
  1. 分段:KBinsDiscretizer
    这是将连续型变量划分为分类变量的类,能够将连续型变量排序后按顺序分箱后编码。总共包含三个重要参数:
参数含义&输入
n_bins每个特征中分箱的个数,默认5,一次会被运用到所有导入的特征
encode编码的方式,默认“onehot”
onehot”:做哑变量,之后返回一个稀疏矩阵,每一列是一个特征中的一个类别,含有该类别的样本表示为1,不含的表示为0
ordinal”:每个特征的每个箱都被编码为一个整数,返回每一列是一个特征,每个特征下含有不同整数编码的箱的矩阵
onehot-dense”:做哑变量,之后返回一个密集数组。
strategy用来定义箱宽的方式,默认"quantile"
“uniform”:表示等宽分箱,即每个特征中的每个箱的最大值之间的差为(特征.max() - 特征.min())/(n_bins)
“quantile”:表示等位分箱,即每个特征中的每个箱内的样本数量都相同
“kmeans”:表示按聚类分箱,每个箱中的值到最近的一维k均值聚类的簇心得距离都相同
from sklearn.preprocessing import KBinsDiscretizer
X = data.iloc[:,0].values.reshape(-1,1)
est = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='uniform', subsample=None)
est.fit_transform(X)

在这里插入图片描述采用独热编码分成多列:

est = KBinsDiscretizer(n_bins=3, encode='onehot', strategy='uniform', subsample=None)
#查看转换后分的箱:变成了哑变量
est.fit_transform(X).toarray()

在这里插入图片描述


相关文章:

【机器学习】sklearn对数据预处理

文章目录 数据处理步骤观察数据数据无量纲化缺失值处理处理分类型特征处理连续型特征 数据处理步骤 数据无量纲化缺失值处理处理分类型特征:编码与哑变量处理连续型特征:二值化与分段 观察数据 通过pandas读取数据,通过head和info方法大致查…...

【智慧燃气】智慧燃气解决方案总体概述--终端层、网络层

关键词:智慧燃气、智慧燃气系统、智慧燃气平台、智慧燃气解决方案、智慧燃气应用、智能燃气 智慧燃气解决方案是基于物联网、大数据、云计算、移动互联网等先进技术,结合燃气行业特征,通过智能设备全面感知企业生产、环境、状态等信息的全方…...

Tomcat隔离web原理和热加载热部署

Tomcat 如何打破双亲委派机制 Tomcat 的自定义类加载器 WebAppClassLoader 打破了双亲委派机制,它首先自己尝试去加载某个类,如果找不到再代理给父类加载器,其目的是优先加载 Web 应用自己定义的类。具体实现就是重写 ClassLoader 的两个方法…...

使用ffmpeg和python脚本下载网络视频m3u8(全网最全面)

网上给娃找了些好看的电影和一些有趣的短视频,如何保存下来呢?从网上找各种工具?都不方便。于是想到何不编程搞定,搞个脚本。对程序员来说这都不是事儿。且我有华为云服务器,完全可以把地址记下,后台自动下…...

【考研408常用数据结构】C/C++实现代码汇总

文章目录 前言数组多维数组的原理、作用稀疏数组 链表单向链表的增删改查的具体实现思路约瑟夫环问题(可不学)双向链表 树二叉搜索树中序线索二叉树哈夫曼树的编码与译码红黑树B树B树 堆顺序与链式结构队列实现优先队列排序算法(重点&#xf…...

Flink学习笔记(二):Flink内存模型

文章目录 1、配置总内存2、JobManager 内存模型3、TaskManager 内存模型4、WebUI 展示内存5、Flink On YARN 模式下内存分配6、Flink On Yarn 集群消耗资源估算6.1、资源分配6.2、Flink 提交 Yarn 集群的相关命令6.3、Flink On Yarn 集群的资源计算公式 1、配置总内存 Flink J…...

信息系统项目管理师第四版学习笔记——项目绩效域

干系人绩效域 干系人绩效域涉及与干系人相关的活动和职能。在项目整个生命周期过程中,有效执行本绩效域可以实现的预期目标主要包含:①与干系人建立高效的工作关系;②干系人认同项目目标;③支持项目的干系人提高了满意度&#xf…...

PyTorch 深度学习之加载数据集Dataset and DataLoader(七)

1. Revision: Manual data feed 全部Batch:计算速度,性能有问题 1 个 :跨越鞍点 mini-Batch:均衡速度与性能 2. Terminology: Epoch, Batch-Size, Iteration DataLoader: batch_size2, sheffleTrue 3. How to define your Dataset 两种处…...

小谈设计模式(26)—中介者模式

小谈设计模式(26)—中介者模式 专栏介绍专栏地址专栏介绍 中介者模式分析角色分析抽象中介者(Mediator)具体中介者(ConcreteMediator)抽象同事类(Colleague)具体同事类(C…...

7种设计模式

1. 工厂模式 优点:封装了对象的创建过程,降低了耦合性,提供了灵活性和可扩展性。 缺点:增加了代码的复杂性,需要创建工厂类。 适用场景:当需要根据不同条件创建不同对象时,或者需要隐藏对象创建…...

el-table合计行合并

效果如下 因为合计el-table的合并方法是不生效的,所以需要修改css下手 watch: {// 应急物资的合计合并planData: {immediate: true,handler() {setTimeout(() > {const tds document.querySelectorAll(".pro_table .el-table__footer-wrapper tr>td");tds[0]…...

新手如何快速上手HTTP爬虫IP?

对于刚接触HTTP爬虫IP的新手来说,可能会感到有些困惑。但是,实际上HTTP爬虫IP并不复杂,只要掌握了基本的操作步骤,就可以轻松使用。本文将为新手们提供一个快速上手HTTP爬虫IP的入门指南,帮助您迅速了解HTTP爬虫IP的基…...

(十五)VBA常用基础知识:正则表达式的使用

vba正则表达式的说明 项目说明Pattern在这里写正则表达式,例:[\d]{2,4}IgnoreCase大小写区分,默认false:区分;true:不区分Globaltrue:全体检索;false:最小匹配Test类似p…...

vue配置@路径

第一步:安装path,如果node_module文件夹中有path就不用安装了 安装命令:npm install path --save 第二步:在vue.config.js文件(如果没有就新建)中配置 const path require("path"); function …...

Ubuntu 18.04 OpenCV3.4.5 + OpenCV3.4.5 Contrib 编译

目录 1 依赖安装 2 下载opencv3.4.5及opencv3.4.5 contrib版本 3 编译opencv3.4.5 opencv3.4.5_contrib及遇到的问题 1 依赖安装 首先安装编译工具CMake,命令安装即可: sudo apt install cmake 安装Eigen: sudo apt-get install libeigen3-…...

【网络基础】IP 子网划分(VLSM)

目录 一、 为什么要划分子网 二、如何划分子网 1、划分两个子网 2、划分多个子网 一、 为什么要划分子网 假设有一个B类IP地址172.16.0.0,B类IP的默认子网掩码是 255.255.0.0,那么该网段内IP的变化范围为 172.16.0.0 ~ 172.16.255.255,即…...

【OCR】合同上批量贴印章

一、需求 OCR算法在处理合同等文件时,会由于印章等遮挡导致文本误识别。因此在OCR预处理时,有一个很重要的步骤是“去除印章”。其中本文主要聚焦在“去除印章”任务中的数据构建步骤:“合同伪印章”的数据构建。下面直接放几张批量合成后效果…...

Stable diffusion 用DeOldify给黑白照片、视频上色

老照片常常因为当时的技术限制而只有黑白版本。然而现代的 AI 技术,如 DeOldify,可以让这些照片重现色彩。 本教程将详细介绍如何使用 DeOldify 来给老照片上色。. 之前介绍过基于虚拟环境的 基于DeOldify的给黑白照片、视频上色,本次介绍对于新手比较友好的在Stable diff…...

在服务器上解压.7z文件

1. 更新apt sudo apt-get update2. 安装p7zip sudo apt-get install p7zip-full3. 解压.7z文件 7za x WN18RR.7z...

【opencv】windows10下opencv4.8.0-cuda C++版本源码编译教程

【opencv】windows10下opencv4.8.0-cuda C版本源码编译教程 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【opencv】windows10下opencv4.8.0-cuda C版本源码编译教程前言准备工具cuda/cudnncmakeopencv4.8.0opencv_contrib CMake编译VS2019编…...

使用Python轻松管理Word页脚

在日常的办公自动化中,处理Word文档是许多人绕不开的环节。无论是生成报告、合同,还是制作项目文档,Word都是一个不可或缺的工具。然而,当文档数量庞大,或者需要频繁更新时,那些看似简单的重复性任务&#…...

丹青识画GPU算力优化部署教程:显存占用降低40%实操

丹青识画GPU算力优化部署教程:显存占用降低40%实操 1. 引言:当艺术邂逅算力,如何优雅地“瘦身”? 想象一下,你刚部署好一个能看懂画作、还能用书法题诗的AI应用——“丹青识画”。它融合了前沿的多模态AI与东方美学&…...

突破平台限制:WorkshopDL重构Steam创意工坊资源获取体验

突破平台限制:WorkshopDL重构Steam创意工坊资源获取体验 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL WorkshopDL作为一款仅10MB大小的开源工具,通过智…...

LiuJuan20260223Zimage开箱体验:基于Z-Image LoRA,这个专精模型到底有多好用?

LiuJuan20260223Zimage开箱体验:基于Z-Image LoRA,这个专精模型到底有多好用? 你有没有遇到过这样的情况:想用AI画一个特定的人物,比如你故事里的主角,或者一个IP形象,但生成的图片要么不像&am…...

Qwen3.5-2B图文对话实战:上传实验数据图→自动识别坐标轴+趋势分析+结论建议

Qwen3.5-2B图文对话实战:上传实验数据图→自动识别坐标轴趋势分析结论建议 1. 引言:当AI遇见科研数据分析 作为一名科研工作者,你是否经常遇到这样的场景:实验室刚跑出一组数据,你迫不及待想分析趋势,却发…...

终极OpenCore EFI自动化配置指南:OpCore-Simplify让你15分钟完成专业级黑苹果配置

终极OpenCore EFI自动化配置指南:OpCore-Simplify让你15分钟完成专业级黑苹果配置 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复…...

CVPR 2025新作SAGE实战:用SAM语义先验+知识蒸馏,搞定红外与可见光图像融合

SAGE实战指南:如何将CVPR 2025前沿成果落地红外与可见光图像融合项目 在计算机视觉领域,多模态图像融合技术正经历着从传统方法到深度学习驱动的范式转变。2025年CVPR会议提出的SAGE(Semantic-Aware Guided Enhancement)方法&…...

通过信道优化数据传输的通信链路的实现附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…...

AXOrderBook:解密A股订单簿重建与FPGA硬件加速的深度技术方案

AXOrderBook:解密A股订单簿重建与FPGA硬件加速的深度技术方案 【免费下载链接】AXOrderBook A股订单簿工具,使用逐笔行情进行订单簿重建、千档快照发布、各档委托队列展示等,包括python模型和FPGA HLS实现。 项目地址: https://gitcode.com…...

深入解析RK3576 Android14中camera3_profiles_rkxxxx.xml的自定义数据格式支持

1. RK3576 Android14相机配置文件的秘密 最近在调试RK3576平台的相机模块时,遇到了一个棘手的问题:需要为定制摄像头添加特殊数据格式。当我打开camera3_profiles_rkxxxx.xml文件时,发现它只支持BLOB、YCbCr_420_888和IMPLEMENTATION_DEFINED…...