机器学习——数据的预处理(总结大全)

article/2025/11/10 5:11:59

目录

数据清洗

1、重复观测处理

​2、缺失值处理

删除法

 替换法

 插补法

3、异常值处理

删减特征

         1. 去除唯一属性

数据查看

特征缩放

一、为什么要特征数据缩放?

二、特征缩放常用的方法

1、归一化(Normalization)

2、标准化(Standardization)

相同点及其联系


数据清洗

        在数据处理过程中,一般都需要进行数据的清洗工作,如数据集是 否存在重复、是否存在缺失、 数据是否具有完整性和一致性、数据中是 否存在异常值等。

1、重复观测处理

import pandas as pd
import numpy as npdata=pd.DataFrame([[8.3,6],[9.3,4],[6,8],[3,1],[3,1]])
# 重复观测的检测 
print('数据集中是否存在重复观测:\n',any(data.duplicated()))

# 删除重复项 
data.drop_duplicates(inplace = True)
# 重复观测的检测 
print('数据集中是否存在重复观测:\n',any(data.duplicated()))
print(data)

2、缺失值处理

        一般而言,当遇到缺失值(Python中用NaN 表示)时,可以采用三 种方法处置,分别是删除法、替换法和插补法。
  • 删除法

import pandas as pd
import numpy as npdata=pd.DataFrame([[8.3,6,],[9.3,4,],[6,8,8],[5,6],[3,1,8]],columns=('a','b','c'))
# 缺失观测的检测 
print('数据集中是否存在缺失值:\n',any(data.isnull()))
print(data)# 删除法之变量删除
data.drop(["c"],axis =1 ,inplace=True)
print(data)

# 删除法之记录删除 
data=data.dropna(axis=0,how='any')

解析:

​​​​​1、删除全为空值的行或列

      data=data.dropna(axis=0,how='all')   #行

      data=data.dropna(axis=1,how='all')   #列

2、删除含有空值的行或列

     data=data.dropna(axis=0,how='any')   #行

    data=data.dropna(axis=1,how='any')   #列

函数具体解释:

DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
函数作用:删除含有空值的行或列

axis:维度,axis=0表示index行,axis=1表示columns列,默认为0

how:"all"表示这一行或列中的元素全部缺失(为nan)才删除这一行或列,"any"表示这一行或列中只要有元素缺失,就删除这一行或列

thresh:一行或一列中至少出现了thresh个才删除。

subset:在某些列的子集中选择出现了缺失值的列删除,不在子集中的含有缺失值得列或行不会删除(有axis决定是行还是列)

inplace:刷选过缺失值得新数据是存为副本还是直接在原数据上进行修改。
 

  •  替换法

# 替换法之前向替换
#data.fillna(method = 'ffill')
# 替换法之后向替换
#data.fillna(method = 'bfill')
#替换法之补平均数
#data['c']=data['c'].fillna(data['c'].mean())
#替换法之补众数
#data['c']=data['c'].fillna(data['c'].mode())
#替换法之补中位数
data['c']=data['c'].fillna(data['c'].median())
print(data)

 

  •  插补法

 插值法是利用已知点建立合适的插值函数,未知值由对应点xi求出的函数值f(xi)近似代替

三、(数据分析)-数据清洗----缺失值处理__23__的博客-CSDN博客

3、异常值处理

4、特征编码处理

5、特征创建

删减特征

1. 去除唯一属性

唯一属性通常是一些id属性,这些属性并不能刻画样本自身的分布规律,所以简单地删除这些属性即可。


数据查看

  • 查看行列: data.shape
  • 查看数据详细信息: data.info(),可以查看是否有缺失值
  • 查看数据的描述统计分析: data.describe(),可以查看到异常数据
  • 获取前/后10行数据: data.head(10)、data.tail(10)
  • 查看列标签: data.columns.tolist()
  • 查看行索引: data.index
  • 查看数据类型: data.dtypes
  • 查看数据维度: data.ndim
  • 查看除index外的值: data.values,会以二维ndarray的形式返回DataFrame的数据
  • 查看数据分布(直方图): seaborn.distplot(data[列名].dropna())


特征缩放

一、为什么要特征数据缩放?

        有特征的取值范围变化大,影响到其他的特征取值范围较小的,那么,根据欧氏距离公式,整个距离将被取值范围较大的那个特征所主导。

为避免发生这种情况,一般对各个特征进行缩放,比如都缩放到[0,1],以便每个特征属性对距离有大致相同的贡献。

作用:确保这些特征都处在一个相近的范围。

优点:1、这能帮助梯度下降算法更快地收敛,2、提高模型精

直接求解的缺点:
1、当x1 特征对应权重会比x2 对应的权重小很多,降低模型可解释性
2、梯度下降时,最终解被某个特征所主导,会影响模型精度与收敛速度
3、正则化时会不平等看待特征的重要程度(尚未标准化就进行L1/L2正则化是错误的)

哪些机器学习算法不需要(需要)做归一化?

        概率模型(树形模型)不需要归一化,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率,如决策树、RF。而像Adaboost、SVM、LR、Knn、KMeans之类的最优化问题就需要归一化。

二、特征缩放常用的方法

1、归一化(Normalization)

  • 数值的归一,丢失数据的分布信息,对数据之间的距离没有得到较好的保留,但保留了权重。
  • 1.小数据/固定数据的使用;2.不涉及距离度量、协方差计算、数据不符合正态分布的时候;3.进行多指标综合评价的时候。

 将数值规约到(0,1)或(-1,1)区间。

一个特征X的范围[min,max]

import pandas as pd
import numpy as npdata=pd.DataFrame([[8.3,6],[9.3,4],[6,8],[3,1]])
print(data)data[0]=(data[0]-data[0].min())/(data[0].max()-data[0].min())
data[1]=(data[1]-data[1].min())/(data[1].max()-data[1].min())
print(data)

结果:

2、标准化(Standardization)

  • 数据分布的归一,较好的保留了数据之间的分布,也即保留了样本之间的距离,但丢失了权值
  • 1.在分类、聚类算法中,需要使用距离来度量相似性;2.有较好的鲁棒性,有产出取值范围的离散数据或对最大值最小值未知的情况下。

 将数据变换为均值为0,标准差为1的分布切记,并非一定是正态的。

其中μ为所有样本数据的均值,σ为所有样本数据的标准差。

先求均值(mean)

再求方差(std)

 

import numpy as np
from sklearn.preprocessing import StandardScalerdata=np.array([[2,2,3],[1,2,5]])
print(data)
print()scaler=StandardScaler()
# fit函数就是要计算这两个值
scaler.fit(data)
# 查看均值和方差
print(scaler.mean_)
print(scaler.var_)
# transform函数则是利用这两个值来标准化(转换)
X=scaler.transform(data)
print()
print(X)

结果:

  

大家可以用以上公式进行验证一下

 这两组数据的均值是否为0,方差(σ2)是否为1

相同点及其联系

  • 归一化广义上是包含标准化的,以上主要是从狭义上区分两者。本质上都是进行特征提取,方便最终数据的比较。都是为了缩小范围,便于后续的数据处理。
  • 加快梯度下降,损失函数收敛; 提升模型精度; 防止梯度爆炸(消除因为输入差距过大而带来的输出差距过大,进而在反向传播的过程当中导致梯度过大,从而形成梯度爆炸)
     


http://chatgpt.dhexx.cn/article/TtU4rYU1.shtml

相关文章

js中鼠标事件mouseover、mouseenter和mouseleave、mouseout的区别

mouseover:当鼠标移入元素或其子元素都会触发事件,所以有一个重复触发,冒泡过程。对应的移除事件是mouseout mouseenter:当鼠标移除元素本身(不包含元素的子元素)会触发事件,也就是不会冒泡,对应…

mouseover和mouseenter的异同

引言 在自己动手练习一些项目实例的时候,发现mouseover和mouseenter这俩事件功能有点相似,但应用场景却不同。 所以想整篇博客梳理梳理 mouseover和mouseenter的不同点: 不同点有两方面: 事件的触发时机是否支持冒泡 一、事件…

JS——mouseover和mouseenter的区别

区别举例补充 区别 mouseover:鼠标移入事件所绑定的元素或其子元素时,都会触发该事件。(具有冒泡特性) mouseenter:只有鼠标移入事件所绑定的元素时,才会触发该事件。(不具有冒泡特性) 举例 mouseover&a…

mouseenter和mouseover的区别

mouseover:当鼠标移入目标元素或者移入目标元素的子元素,都会触发该事件。所以有一个重复触发,冒泡的过程。对应的一出事件mouseout。 mouseenter:当鼠标移入目标元素时(不包括子元素),会触发该…

jQuery学习:mouseenter与mouseover区别

mouseenter:只有移入当前元素才会触发&#xff0c;对应mouseleave hover使用的是mouseenter与mouseleave mouseover&#xff1a;在移入子元素时也会触发&#xff0c;对应mouseout <div id"div1">div1<div id"div2">div2</div></div&…

mouseentermouseleave

mouseenter&mouseleave 简介 mouseenter当指针设备&#xff08;通常是鼠标&#xff09;移动到连接了侦听器的元素上时&#xff0c;会触发该事件。 mouseover 当指针设备&#xff08;通常是鼠标&#xff09;移动到附加了侦听器的元素或其子项之一上时&#xff0c;会触发该事…

mouseenter

这几天做下拉菜单&#xff0c;一直想实现鼠标停留在以及菜单即可显示二级菜单并可以浏览二级菜单的功能&#xff0c;最初走了很多弯路。 dropdown 写在是用Bootstrap.js …

mouseenter与mouseover的区别

这是两个事件类型&#xff0c;都是表示鼠标经过触发事件。 还有对应的mouseleave和mouseout&#xff0c;表示鼠标移开触发事件 区别是&#xff1a;mouseenter、mouseleave 不触发冒泡事件 mouseover、mouseout 会触发冒泡事件 首先事件触发后会产生两个阶段&#xff0c;一个是…

简单了解mouseover与mouseenter的使用场景

我们知道鼠标经过和离开的事件有俩种&#xff1a; mouseenter与mouseover&#xff0c;那么这里俩个事件有什么区别呢&#xff1f; mouseenter&#xff1a;给谁注册的事件&#xff0c;就必须经过谁&#xff0c;才能触发该事件 简单来说mouseenter不能冒泡&#xff0c;也就是说经…

mouseenter鼠标事件

mouseenter鼠标事件 1.当鼠标移动到元素上时就会触发mouseenter事件 2.类似mouseover&#xff0c;它们两者之间的差别是 mouseover鼠标经过自身盒子会触发&#xff0c;经过子盒子还会触发。mouseenter只会经过自身盒子触发 这样的原因就是 mouseenter不会冒泡。 <!DOCTYP…

mouseenter和mouseleave与mouseover和mouseout的区别

一、mouseenter&#xff08;指针穿过&#xff0c;子集不执行&#xff09; 当鼠标指针穿过&#xff08;进入&#xff09;被选元素时&#xff0c;会发生 mouseenter 事件。 mouseenter() 方法触发 mouseenter 事件&#xff0c;或添加当发生 mouseenter 事件时运行的函数。 注意…

mouseenter、mouseleave、mouseover和mouseout的区别

mouseenter(进入)、mouseleave、mouseover(覆盖)和mouseout是常用来判断鼠标移出和移入的事件句柄&#xff0c;虽然功能上差不多&#xff0c;但是细节却有不同的地方。 <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>随…

mouseover事件和mouseenter事件以及mouseleave事件和mouseout事件的区别

1.mouseover事件与mouseenter事件 mouseover事件&#xff1a;不论鼠标指针穿过被选元素或其子元素&#xff0c;都会触发 mouseover 事件。 mouseenter事件&#xff1a;只有在鼠标指针穿过被选元素时&#xff0c;才会触发 mouseenter 事件。 2.mouseout事件与mouseleave事件 …

Git - 教程(廖雪峰)

史上最浅显易懂的Git教程&#xff01; 为什么要编写这个教程&#xff1f;因为我在学习Git的过程中&#xff0c;买过书&#xff0c;也在网上Google了一堆Git相关的文章和教程&#xff0c;但令人失望的是&#xff0c;这些教程不是难得令人发指&#xff0c;就是简单得一笔带过&am…

廖雪峰git学习(3)分支管理【待续】

创建与合并分支 创建分支 git checkout -b dev #创建并切换到分支dev相当于以下两条 git branch dev #创建分支dev git checkout dev #切换到分支dev git branch #可查看当分支 合并分支 git merge dev #将dev分支与master分支合并 删除分支 git branch -d dev#删除dev分支

Git操作——廖雪峰Git教程

这个笔记主要记录的命令&#xff0c;用来翻查命令使用。 学习了一部分&#xff0c;剩下的部分后续更新o(&#xffe3;▽&#xffe3;)ブ 廖雪峰的Git教程 零散的命令&#xff1a; 显示当前目录——pwd显示隐藏目录——ls -ah查看文件 —— cat <文件名> 创建版本库 …

廖雪峰git教程学习记录

1. 下载安装 git官网下载&#xff1a;https://git-scm.com/downloads 百度网盘链接: https://pan.baidu.com/s/1quoLbBcbWaGJ05do4DX9Pw 提取码: xqe3 直接下载安装&#xff0c;完成后在开始菜单找“Git”--“Git Bash” 点击打开&#xff0c;如下图形式显示 安装成功。 2. …

Python 爬虫:把廖雪峰的教程转换成 PDF 电子书

。前两天&#xff0c;有读者在微信公众平台 问道&#xff1a;可以推荐一本 Python 入门的教程吗&#xff1f;我说&#xff1a;廖雪峰的 Python 教程她说&#xff1a;有没有电子书呢&#xff1f;我说&#xff1a;没有&#xff0c;但你可以用 Google 搜一下&#xff0c;找到了记得…

git常用命令总结--廖雪峰老师Git教程命令总结

学习了廖雪峰老师的Git教程之后的命令总结&#xff0c;重点更新第十项关于git和远程仓库的东西。 如果没有学过&#xff0c;这是传送门 2021.02.19更新&#xff1a;第十章第12节--切换远程分支并拉取远程分支到本地&#xff0c;第十章第13节--git不用每次都要输入用户名密码 …

学习廖雪峰的Git教程

学习廖雪峰的git教程&#xff1a;http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 1.创建版本库&#xff1a; 在一个空目录下&#xff1a;git init 把这个目录变成Git可以管理的仓库。 2.添加文件到仓库&#xff1a; 添加文件到仓库目…