《菜菜的机器学习sklearn课堂,孔浩Java视频百度云盘
===============================================================================================
数据无量纲化
无量纲化:将不同规格的数据转换到同一规格,或不同分布的数据转换到某个特定分布
例如梯度和矩阵为核心的算法中,逻辑回归、支持向量机、神经网络,无量纲化可以加快求解速度;而在距离类模型,例如K近邻、K-Means聚类,无量纲化可以帮我们提升模型精度,避免某一个取值范围特别大的特征对距离计算造成影响。
决策树和树的集成算法是特例,对决策树我们不需要无量纲化,决策树可以把任意数据都处理得很好
数据的无量纲化可以是线性的,也可以是非线性的。
线性的无量纲化包括:
中心化处理(Zero-centered或者Mean-subtraction)
中心化的本质是让所有记录减去一个固定值,即让数据样本数据平移到某个位置
缩放处理(Scale)
缩放的本质是通过除以一个固定值,将数据固定在某个范围之中(取对数也算是一种缩放处理)
数据归一化 preprocessing.MinMaxScaler
注意区分 归一化 和 正则化
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视频百度云盘相关推荐
- ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)
视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...
- ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析
视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...
- 信息学奥赛真题解析(玩具谜题)
玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...
- 信息学奥赛之初赛 第1轮 讲解(01-08课)
信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...
- 信息学奥赛一本通习题答案(五)
最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...
- 信息学奥赛一本通习题答案(三)
最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...
- 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题
第1章 快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章 素数 第 3 章 约数 第 4 章 同余问题 第 5 章 矩阵乘法 第 6 章 ...
- 信息学奥赛一本通题目代码(非题库)
为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...
- 信息学奥赛一本通(C++版) 刷题 记录
总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...
- 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离
首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...
最新文章
- 模型优化的风向标:偏差与方差
- Spark入门实战系列--6.SparkSQL(中)--深入了解SparkSQL运行计划及调优
- JavaScript正则替换去除字符串中特殊字符
- 转:微服务设计、拆分原则
- 2020年中国职业教育行业白皮书
- java字符串字符排列组合_如何在Java中查找字符串的所有排列
- 数据库信息查询(作者不是我)
- selinux --chcon命令
- mysqlL时间戳和时间的获取/相互转换/格式化
- 单片机C语言程序设计实训 100例—基于 8051+Proteus仿真
- 《Java从入门到放弃》JavaSE入门篇:多线程(入门版)
- 手机聊天记录备份与恢复的方法汇总
- django之admin调整页面展示
- 记一次千人大项目的感受
- Adolescent Suicidal Risk Assessment in Clinician-Patient Interaction
- 根据userAgent获取浏览器/操作系统/设备类型等信息
- html制作透明正方形,用css3简单的制作3d半透明立方体图片详解
- Vue 中Lodop 实现批量打印
- MySQL学习(三) 数据类型约束、TCL语言、流程控制
- 阿里云ACP云计算工程师认证攻略--转载
热门文章
- HTML转义字符最全集合
- 计算机组成原理英文词汇,“计算机组成原理”课专业词汇英汉对照.pdf
- FineBI使用文档
- 坐标计算机在线使用,经纬度换算器(度分秒计算器在线使用)
- 电信无线服务器的密码是什么,电信光猫wifi默认密码是多少?
- Java快捷键标识符入门学习
- java编译命令是什么_java编译命令,java的编译命令是什么?
- access violation at address in module Read of address
- 当心路径层次太深,名字太长造成解压失败
- OpenGL超级宝典(第7版)之第九章片段处理与帧缓冲