数据预处理

数据中不同特征的量纲可能不一致,数值间的差别可能很大,不进行处理可能会影响到数据分析的结果,因此,需要对数据按照一定比例进行缩放,使之落在一个特定的区域,便于进行综合分析。

常用的方法有两种:

最大 - 最小规范化:对原始数据进行线性变换,将数据映射到[0,1]区间

Z-Score标准化:将原始数据映射到均值为0、标准差为1的分布上

为什么要标准化/归一化?

提升模型精度:标准化/归一化后,不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。

加速模型收敛:标准化/归一化后,最优解的寻优过程明显会变得平缓,更容易正确的收敛到最优解。

如下图所示:

哪些机器学习算法需要标准化和归一化

1)需要使用梯度下降和计算距离的模型要做归一化,因为不做归一化会使收敛的路径程z字型下降,导致收敛路径太慢,而且不容易找到最优解,归一化之后加快了梯度下降求最优解的速度,并有可能提高精度。比如说线性回归、逻辑回归、adaboost、xgboost、GBDT、SVM、NeuralNetwork等。需要计算距离的模型需要做归一化,比如说KNN、KMeans等。

2)概率模型、树形结构模型不需要归一化,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率,如决策树、随机森林。

彻底理解标准化和归一化

示例数据集包含一个自变量(已购买)和三个因变量(国家,年龄和薪水),可以看出用薪水范围比年龄宽的多,如果直接将数据用于机器学习模型(比如KNN、KMeans),模型将完全有薪水主导。

#导入数据
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv('Data.csv')

缺失值均值填充,处理字符型变量

df['Salary'].fillna((df['Salary'].mean()), inplace= True)
df['Age'].fillna((df['Age'].mean()), inplace= True)
df['Purchased'] = df['Purchased'].apply(lambda x: 0 if x=='No' else 1)
df=pd.get_dummies(data=df, columns=['Country'])

最大 - 最小规范化

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaler.fit(df)
scaled_features = scaler.transform(df)
df_MinMax = pd.DataFrame(data=scaled_features, columns=["Age", "Salary","Purchased","Country_France","Country_Germany", "Country_spain"])

Z-Score标准化

from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
sc_X = sc_X.fit_transform(df)
sc_X = pd.DataFrame(data=sc_X, columns=["Age", "Salary","Purchased","Country_France","Country_Germany", "Country_spain"])

import seaborn as sns
import matplotlib.pyplot as plt
import statistics
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
fig,axes=plt.subplots(2,3,figsize=(18,12))
sns.distplot(df['Age'], ax=axes[0, 0])
sns.distplot(df_MinMax['Age'], ax=axes[0, 1])
axes[0, 1].set_title('归一化方差:% s '% (statistics.stdev(df_MinMax['Age'])))
sns.distplot(sc_X['Age'], ax=axes[0, 2])
axes[0, 2].set_title('标准化方差:% s '% (statistics.stdev(sc_X['Age'])))
sns.distplot(df['Salary'], ax=axes[1, 0])
sns.distplot(df_MinMax['Salary'], ax=axes[1, 1])
axes[1, 1].set_title('MinMax:Salary')
axes[1, 1].set_title('归一化方差:% s '% (statistics.stdev(df_MinMax['Salary'])))
sns.distplot(sc_X['Salary'], ax=axes[1, 2])
axes[1, 2].set_title('StandardScaler:Salary')
axes[1, 2].set_title('标准化方差:% s '% (statistics.stdev(sc_X['Salary'])))

可以看出归一化标准化方法产生的标准差小,使用归一化来缩放数据,则数据将更集中在均值附近。这是由于归一化的缩放是“拍扁”统一到区间(仅由极值决定),而标准化的缩放是更加“弹性”和“动态”的,和整体样本的分布有很大的关系。所以归一化不能很好地处理离群值,而标准化对异常值的鲁棒性强,在许多情况下,它优于归一化。

参考:https://towardsdatascience.com/data-transformation-standardisation-vs-normalisation-a47b2f38cec2

往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑获取一折本站知识星球优惠券,复制链接直接打开:https://t.zsxq.com/yFQV7am本站qq群1003271085。加入微信群请扫码进群:

【机器学习基础】Python数据预处理:彻底理解标准化和归一化相关推荐

  1. 回归素材(part9)--PYTHON机器学习手册-从数据预处理到深度学习

    学习笔记,仅供参考,有错必纠 PYTHON机器学习手册-从数据预处理到深度学习 通过正则化减少方差 我们可以使用岭回归或者Lasso回归,介绍回归模型的方差.

  2. Python数据预处理:机器学习、人工智能通用技术(1)

    1 什么是数据预处理 数据预处理简而言之就是将原始数据装进一个预处理的黑匣子之后,产生出高质量数据用来适应相关技术或者算法模型.为了大家更明确的了解数据预处理,我们举个新闻分类的例子: 将原始的数据直 ...

  3. 机器学习模型的数据预处理和可视化

    本文为 AI 研习社编译的技术博客,原标题 : Data Pre-processing and Visualization for Machine Learning Models 作者 |* Nata ...

  4. python数据处理实例-Python数据预处理实例详解

    Python----数据预处理代码实例 本文实例为大家分享了Python数据预处理的具体代码,供大家参考,具体内容如下 1.导入标准库 import numpy as np import matplo ...

  5. Python数据预处理——格式转换及抽取数据文本信息

    课程地址:https://www.imooc.com/learn/1105 1. 数据预处理简介 1.1 什么是数据预处理 数据预处理简单来说就是:将原始数据装进一个预处理的黑匣子之后,产生出高质量数 ...

  6. Python数据预处理数据的方法总结(使用sklearn-preprocessing)

    文章目录 数据预处理思路 数据预处理方法 1 标准化:去均值,方差规模化 2 规模化稀疏数据 3 规模化有异常值的数据 4 正则化Normalization 5 二值化–特征的二值化 6 类别特征编码 ...

  7. [Python] 数据预处理(缺失值、异常值、重复值) [相关方法参数说明、代码示例、相关概念]

    前言 系列文章目录 [Python]目录 视频及资料和课件 链接:https://pan.baidu.com/s/1LCv_qyWslwB-MYw56fjbDg?pwd=1234 提取码:1234 文 ...

  8. python数据预处理的代码_【Python基础系列】常见的数据预处理方法(附代码)

    ↑↑↑点击上方蓝字,回复资料,嘿嘿,10个G的惊喜 本文简单介绍python中一些常见的数据预处理,包括数据加载.缺失值处理.异常值处理.描述性变量转换为数值型.训练集测试集划分.数据规范化. 1. ...

  9. 深入浅出python机器学习_9.1_数据预处理_sklearn.preprocessing.StandardScaler MinMaxScaler RobustScaler Normalizer

    # 使用StandardScaler进行数据预处理import numpyimport matplotlib.pyplot as pltfrom sklearn.datasets import mak ...

最新文章

  1. 数字技术对就业的影响分析
  2. python经典题库和答案_吐血总结,Python经典面试题及答案
  3. mysql router docker_Docker镜像瘦身 - SegmentFault 思否
  4. 1200+标星,3千多人点赞,这本书让你系统了解机器学习可解释性丨开源免费阅读...
  5. @resource和@Autowired区别
  6. poj 2057 树形DP,数学期望
  7. UVA 536——Tree Recovery
  8. 多标签文本分类数据集_标签感知的文档表示用于多标签文本分类(EMNLP 2019)...
  9. python中的with使用方法[探索5]
  10. 大数据在新型智慧城市的作用
  11. 【学亮IT手记】Java 8新特性实例介绍
  12. Python-继人物词频统计三国演义之后-三国词云(Wordcloud)
  13. Scarpy源码分析6
  14. 安卓软件开发需要学什么你知道吗?
  15. SAP PS 第15节 预算管理
  16. kaggle 2018 data science bowl 细胞核分割学习笔记
  17. 如何用Python画一只肥肥的柯基狗狗——turtle库绘制椭圆与弧线实践
  18. mtk6595资料帖和问题帖集合
  19. CDA数据分析师深圳校区就业班第17期正式开班!
  20. 【Qt Creator】配置代码编辑器字体

热门文章

  1. libgdx 学习笔记七 Libgdx模块概述
  2. python 学习之输出流重定向
  3. mysql中修改表的默认编码和表中字段的编码
  4. GCD -- 倒计时
  5. struts2总体介绍
  6. Oracle 11g 建表 表名大小写问题
  7. 在.net2.0中实现Action和Func方法
  8. 滚动焦点图实现原理和实践[原创视频]
  9. mysqL学习之实例
  10. 新发传染病临床案例研究 Emerging Infectious Diseases. Clinical Case Studies