===============================================================================================

数据无量纲化


无量纲化:将不同规格的数据转换到同一规格,或不同分布的数据转换到某个特定分布

例如梯度和矩阵为核心的算法中,逻辑回归、支持向量机、神经网络,无量纲化可以加快求解速度;而在距离类模型,例如K近邻、K-Means聚类,无量纲化可以帮我们提升模型精度,避免某一个取值范围特别大的特征对距离计算造成影响。

决策树和树的集成算法是特例,对决策树我们不需要无量纲化,决策树可以把任意数据都处理得很好

数据的无量纲化可以是线性的,也可以是非线性的。

线性的无量纲化包括:

  • 中心化处理(Zero-centered或者Mean-subtraction)

    中心化的本质是让所有记录减去一个固定值,即让数据样本数据平移到某个位置

  • 缩放处理(Scale)

    缩放的本质是通过除以一个固定值,将数据固定在某个范围之中(取对数也算是一种缩放处理)

数据归一化 preprocessing.MinMaxScaler

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

归一化之后的数据服从正态分布,公式如下:

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

注意区分 归一化正则化

Normalization是归一化,不是正则化;正则化(Regularization) 不是数据预处理的一种手段

在sklearn当中,我们使用preprocessing.MinMaxScaler来实现数据归一化功能。

  • 它有一个重要参数feature_range,控制我们希望把数据压缩到的范围,默认是[0,1]

from sklearn.preprocessing import MinMaxScalerdata = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]] 

#不太熟悉numpy的小伙伴,能够判断data的结构吗?

#如果换成表是什么样子?

import pandas as pd

pd.DataFrame(data)

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210212182309724.png)

#实现归一化

scaler = MinMaxScaler() #实例化

scaler = scaler.fit(data) #fit,在这里本质是生成min(x)和max(x)

result = scaler.transform(data) #通过接口导出结果

result

“”"

array([[0. , 0. ],

   [0.25, 0.25],[0.5 , 0.5 ],[1.  , 1.  ]])

“”"


result_ = scaler.fit_transform(data) #训练和导出结果一步达成result_"""array([[0.  , 0.  ],[0.25, 0.25],[0.5 , 0.5 ],[1.  , 1.  ]])""" 

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

“”"

array([[ 5. , 5. ],

   [ 6.25,  6.25],[ 7.5 ,  7.5 ],[10.  , 10.  ]])

“”"


#使用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"""array([[ 5.  ,  5.  ],[ 6.25,  6.25],[ 7.5 ,  7.5 ],[10.  , 10.  ]])""" ```> 当X中的特征数量非常多的时候,fit会报错并表示:数据量太大了我计算不了  > 此时使用partial\_fit作为训练接口> > ```> scaler = scaler.partial_fit(data) > ```> **使用numpy来实现归一化**> > ```> import numpy as np> X = np.array([[-1, 2], [-0.5, 6], [0, 10], [1, 18]])> #归一化> X_nor = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))> X_nor> #逆转归一化> X_returned = X_nor * (X.max(axis=0) - X.min(axis=0)) + X.min(axis=0)> X_returned > ```### [](https://gitee.com/vip204888/java-p7)数据标准化 preprocessing.StandardScaler**数据标准化(Standardization,又称Z-score normalization)**:当数据(x)按均值(μ)中心化后,再按标准差(σ)缩放,数据就会服从为均值为0,方差为1的正态分布(即标准正态分布),公式如下:  x ∗ = x − μ σ x^\* = \\frac {x - \\mu} {\\sigma} x∗\=σx−μ​```from sklearn.preprocessing import StandardScalerdata = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]] 

scaler = StandardScaler() #实例化

scaler.fit(data) #fit,本质是生成均值和方差


scaler.mean_ #查看均值的属性mean_# array([-0.125,  9.   ])scaler.var_ #查看方差的属性var_# array([ 0.546875, 35.      ]) 

x_std = scaler.transform(data) #通过接口导出结果

x_std.mean() #导出的结果是一个数组,用mean()查看均值

0.0

x_std.std() #用std()查看方差

#1.0


scaler.fit_transform(data) #使用fit_transform(data)一步达成结果"""array([[-1.18321596, -1.18321596],[-0.50709255, -0.50709255],[ 0.16903085,  0.16903085],[ 1.52127766,  1.52127766]])""" 

scaler.inverse_transform(x_std) #使用inverse_transform逆转标准化

“”"

array([[-1. , 2. ],

   [-0.5,  6. ],[ 0. , 10. ],[ 1. , 18. ]])

“”"

对于StandardScaler和MinMaxScaler来说,空值NaN会被当做是**缺失值**,*   在fit的时候忽略*   在transform的时候保持缺失NaN的状态显示尽管去量纲化过程不是具体的算法,但在fit接口中,依然只允许导入至少二维数组,一维数组导入会报错。通常来说,我们输入的X会是我们的特征矩阵,现实案例中特征矩阵不太可能是一维所以不会存在这个问题。### [](https://gitee.com/vip204888/java-p7)StandardScaler 和 MinMaxScaler 如何选择?**看情况***   大多数机器学习算法中,会选择StandardScaler进行特征缩放,因为MinMaxScaler对异常值非常敏感*   在PCA,聚类,逻辑回归,支持向量机,神经网络这些算法中,StandardScaler往往是最好的选择MinMaxScaler在不涉及距离度量、梯度、协方差计算以及数据需要被压缩到特定区间时使用广泛,比如**数字图像处理中量化像素强度**时,都会使用MinMaxScaler将数据压缩于\[0,1\]区间之中。建议先试试看StandardScaler,效果不好换MinMaxScaler。除了StandardScaler和MinMaxScaler之外,sklearn中也提供了各种其他缩放处理(中心化只需要一个pandas广播一下减去某个数就好了,因此sklearn不提供任何中心化功能)*   在希望压缩数据,却不影响数据的稀疏性时(不影响矩阵中取值为0的个数时),我们会使用MaxAbsScaler*   在异常值多,噪声非常大时,我们可能会选用分位数来无量纲化,此时使用RobustScaler*   更多详情请参考以下列表:![在这里插入图片描述](https://img-blog.csdnimg.cn/20210212183003184.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzczNDA5NQ==,size_1,color_FFFFFF,t_70)[](https://gitee.com/vip204888/java-p7)缺失值----------------------------------------------------------------------**机器学习和数据挖掘中所使用的数据,永远不可能是完美的**。很多特征,对于分析和建模来说意义非凡,但对于实际收集数据的人却不是如此,因此数据挖掘之中,常常会有重要的字段缺失值很多,但又不能舍弃字段的情况。因此,数据预处理中非常重要的一项就是**处理缺失值**。* * *我们采用从泰坦尼克号提取出来的数据,这个数据有三个特征,如下:*   Age 数值型*   Sex 字符型*   Embarked 字符型

import pandas as pd

#index_col=0是因为原数据中第1列本就是索引

data = pd.read_csv(r"…\datasets\Narrativedata.csv",index_col=0)

data.head()

![在这里插入图片描述](https://img-blog.csdnimg.cn/2021021218414948.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzczNDA5NQ==,size_1,color_FFFFFF,t_70)### [](https://gitee.com/vip204888/java-p7)缺失值填补 impute.SimpleImputer

class sklearn.impute.SimpleImputer (

missing_values=nan, strategy='mean', fill_value=None, verbose=0,copy=True)
这个类是专门用来填补缺失值的。它包括四个重要参数:*   **missing\_values**  告诉SimpleImputer,数据中的缺失值长什么样,默认空值np.nan*   **strategy**  我们填补缺失值的策略,默认均值  输入"mean"使用均值填补(仅对数值型特征可用)  输入"median"用中值填补(仅对数值型特征可用)  输入"most\_frequent"用众数填补(对数值型和字符型特征都可用)  输入"constant"表示请参考参数"fill\_value"中的值(对数值型和字符型特征都可用)*   **fill\_value**  当参数startegy为"constant"的时候可用,可输入字符串或数字表示要填充的值,常用0*   **copy**  默认为True,将创建特征矩阵的副本,反之则会将缺失值填补到原本的特征矩阵中去

import pandas as pd

#index_col=0是因为原数据中第1列本就是索引

data = pd.read_csv(r"…\datasets\Narrativedata.csv",index_col=0)

data.head()


data.info()# 由运行结果可知Age和Embarked有缺失值"""<class 'pandas.core.frame.DataFrame'>Int64Index: 891 entries, 0 to 890Data columns (total 4 columns):#   Column    Non-Null Count  Dtype  ---  ------    --------------  -----  0   Age       714 non-null    float641   Sex       891 non-null    object 2   Embarked  889 non-null    object 3   Survived  891 non-null    object dtypes: float64(1), object(3)memory usage: 34.8+ KB""" 

查看数据

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

Age[:20]

“”"

array([[22.],

   [38.],[26.],[35.],[35.],[nan],[54.],[ 2.],[27.],[14.]])

“”"

用各个值填补演示:

#填补年龄, 分别用均值、中位数、0填补

from sklearn.impute import SimpleImputer

imp_mean = SimpleImputer() #实例化,默认均值填补

imp_median = SimpleImputer(strategy=“median”) #用中位数填补

imp_0 = SimpleImputer(strategy=“constant”,fill_value=0) #用0填补

#fit_transform一步完成调取结果

imp_mean = imp_mean.fit_transform(Age) #均值填补

imp_median = imp_median.fit_transform(Age) #中值填补

imp_0 = imp_0.fit_transform(Age) # 使用0填补

imp_mean[:20] # 查看用均值填补后的前20条数据

imp_median[:10] # 查看用中值填补后的前20条数据

imp_0[:10] # 查看用0填补后的前20条数据

在这里我们用中位数填补Age,用众数填补Embarked:

#在这里我们使用中位数填补Age

data.loc[:,“Age”] = imp_median

#data.info()

#使用众数填补Embarked

Embarked = data.loc[:,“Embarked”].values.reshape(-1,1)

imp_mode = SimpleImputer(strategy = “most_frequent”)

data.loc[:,“Embarked”] = imp_mode.fit_transform(Embarked)

data.info() #

由结果可知填补已经完成了

“”"

<class ‘pandas.core.frame.DataFrame’>

Int64Index: 891 entries, 0 to 890

Data columns (total 4 columns):

Column Non-Null Count Dtype


0 Age 891 non-null float64

1 Sex 891 non-null object

2 Embarked 891 non-null object

3 Survived 891 non-null object

dtypes: float64(1), object(3)

memory usage: 34.8+ KB

“”"

data.head(20) #显示填补后的前20条数据

> 用Pandas和Numpy进行填补其实更加简单> > ```> import pandas as pd> data = pd.read_csv(r"..\datasets\Narrativedata.csv",index_col=0)> data.head()> data.loc[:,"Age"] = data.loc[:,"Age"].fillna(data.loc[:,"Age"].median())> #.fillna 在DataFrame里面直接进行填补> data.dropna(axis=0,inplace=True)> #.dropna(axis=0)删除所有有缺失值的行,.dropna(axis=1)删除所有有缺失值的列> #参数inplace,为True表示在原数据集上进行修改,为False表示生成一个复制对象,不修改原数据,默认False > ```[](https://gitee.com/vip204888/java-p7)处理分类型特征:编码与哑变量---------------------------------------------------------------------------------## 总结总的来说,面试是有套路的,一面基础,二面架构,三面个人。**最后,小编这里收集整理了一些资料,其中包括面试题(含答案)、书籍、视频等。希望也能帮助想进大厂的朋友,[点击这里即可免费获取](https://gitee.com/vip204888/java-p7)**![三面蚂蚁金服成功拿到offer后,他说他累了](https://img-blog.csdnimg.cn/img_convert/6e1de72e700d50187bb448d5b996b074.png)![三面蚂蚁金服成功拿到offer后,他说他累了](https://img-blog.csdnimg.cn/img_convert/fb11aa8acc3b5a75becb9ca8ce014dda.png)![三面蚂蚁金服成功拿到offer后,他说他累了](https://img-blog.csdnimg.cn/img_convert/d560c2e5e5732a8d295091f95a0b8e5a.png)ata.loc[:,"Age"].fillna(data.loc[:,"Age"].median())> #.fillna 在DataFrame里面直接进行填补> data.dropna(axis=0,inplace=True)> #.dropna(axis=0)删除所有有缺失值的行,.dropna(axis=1)删除所有有缺失值的列> #参数inplace,为True表示在原数据集上进行修改,为False表示生成一个复制对象,不修改原数据,默认False > ```[](https://gitee.com/vip204888/java-p7)处理分类型特征:编码与哑变量---------------------------------------------------------------------------------## 总结总的来说,面试是有套路的,一面基础,二面架构,三面个人。**最后,小编这里收集整理了一些资料,其中包括面试题(含答案)、书籍、视频等。希望也能帮助想进大厂的朋友,[点击这里即可免费获取](https://gitee.com/vip204888/java-p7)**[外链图片转存中...(img-JW5TJbew-1628422399860)][外链图片转存中...(img-hNZbkJMO-1628422399862)][外链图片转存中...(img-CTuNkZkH-1628422399863)]

《菜菜的机器学习sklearn课堂,孔浩Java视频百度云盘相关推荐

  1. ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  2. ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  3. 信息学奥赛真题解析(玩具谜题)

    玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...

  4. 信息学奥赛之初赛 第1轮 讲解(01-08课)

    信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...

  5. 信息学奥赛一本通习题答案(五)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  6. 信息学奥赛一本通习题答案(三)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  7. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  8. 信息学奥赛一本通题目代码(非题库)

    为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...

  9. 信息学奥赛一本通(C++版) 刷题 记录

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...

  10. 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离

    首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...

最新文章

  1. 模型优化的风向标:偏差与方差
  2. Spark入门实战系列--6.SparkSQL(中)--深入了解SparkSQL运行计划及调优
  3. JavaScript正则替换去除字符串中特殊字符
  4. 转:微服务设计、拆分原则
  5. 2020年中国职业教育行业白皮书
  6. java字符串字符排列组合_如何在Java中查找字符串的所有排列
  7. 数据库信息查询(作者不是我)
  8. selinux --chcon命令
  9. mysqlL时间戳和时间的获取/相互转换/格式化
  10. 单片机C语言程序设计实训 100例—基于 8051+Proteus仿真
  11. 《Java从入门到放弃》JavaSE入门篇:多线程(入门版)
  12. 手机聊天记录备份与恢复的方法汇总
  13. django之admin调整页面展示
  14. 记一次千人大项目的感受
  15. Adolescent Suicidal Risk Assessment in Clinician-Patient Interaction
  16. 根据userAgent获取浏览器/操作系统/设备类型等信息
  17. html制作透明正方形,用css3简单的制作3d半透明立方体图片详解
  18. Vue 中Lodop 实现批量打印
  19. MySQL学习(三) 数据类型约束、TCL语言、流程控制
  20. 阿里云ACP云计算工程师认证攻略--转载

热门文章

  1. HTML转义字符最全集合
  2. 计算机组成原理英文词汇,“计算机组成原理”课专业词汇英汉对照.pdf
  3. FineBI使用文档
  4. 坐标计算机在线使用,经纬度换算器(度分秒计算器在线使用)
  5. 电信无线服务器的密码是什么,电信光猫wifi默认密码是多少?
  6. Java快捷键标识符入门学习
  7. java编译命令是什么_java编译命令,java的编译命令是什么?
  8. access violation at address in module Read of address
  9. 当心路径层次太深,名字太长造成解压失败
  10. OpenGL超级宝典(第7版)之第九章片段处理与帧缓冲