数据预处理

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

常用的方法有两种:

最大 - 最小规范化:对原始数据进行线性变换,将数据映射到[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'])))

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

python 分类算法的数据要归一化嘛_Python数据预处理:彻底理解标准化和归一化...相关推荐

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

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

  2. python分类算法_用Python实现KNN分类算法

    本文实例为大家分享了Python KNN分类算法的具体代码,供大家参考,具体内容如下 KNN分类算法应该算得上是机器学习中最简单的分类算法了,所谓KNN即为K-NearestNeighbor(K个最邻 ...

  3. python分类算法报告_Python机器学习(1)——决策树分类算法

    1.决策树算法 决策树用树形结构对样本的属性进行分类,是最直观的分类算法,而且也可以用于回归.不过对于一些特殊的逻辑分类会有困难.典型的如异或(XOR)逻辑,决策树并不擅长解决此类问题. 决策树的构建 ...

  4. python分类算法_python数据挖掘中的分类算法有哪些?

    一直以来,对于机器学习领域,Python都是人们津津乐道的话题,大家知道我们在用python学习机器技术时候,用到的方法内容和一般情况下的是一样的吗?想必,了解过的小伙伴一定是知道有哪些的,不知道的小 ...

  5. python分类算法的应用_07-机器学习_(lineage回归分类算法与应用) ---没用

    机器学习算法day04_Logistic回归分类算法及应用 课程大纲 Logistic回归分类算法原理 Logistic回归分类算法概述 Logistic回归分类算法思想 Logistic回归分类算法 ...

  6. python分类算法的应用_Python基于sklearn库的分类算法简单应用示例

    Python基于sklearn库的分类算法简单应用示例 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  Python基于sklearn库的分类算法简单应用示例.tx ...

  7. python分类算法的应用_Python使用sklearn库实现的各种分类算法简单应用小结

    本文实例讲述了Python使用sklearn库实现的各种分类算法简单应用.分享给大家供大家参考,具体如下: KNN from sklearn.neighbors import KNeighborsCl ...

  8. python 分类算法_python机器学习之KNN分类算法

    本文为大家分享了python机器学习之KNN分类算法,供大家参考,具体内容如下 1.KNN分类算法 KNN分类算法(K-Nearest-Neighbors Classification),又叫K近邻算 ...

  9. python数据科学导论 中南_Python数据科学导论

    译者序 前言 关于本书 关于作者 关于封面插图 章 大数据世界中的数据科学1 1.1 数据科学和大数据的好处和用途2 1.2 数据种类3 1.2.1 结构化数据3 1.2.2 非结构化数据3 1.2. ...

  10. python数据可视化的特点_Python数据可视化, 看这一篇就够了

    开个玩笑了,其实可视化想做深入,只看这一篇,必然是不够的了~ 入个门估计差不多可以的. 为什么写这一篇呢?算是继续上一篇最嗨的歌最快的车:Data Fountain光伏发电量预测 Top1 开源分享​ ...

最新文章

  1. debian部署mysql和tomcat_【超级详细】在Debian/kali/linux服务器下搭建Tomcat7+mysql+jdk8环境...
  2. 转hdmi_苹果本轻松接大屏,毕亚兹雷电接口转HDMI/VGA转换器评测
  3. 用纯css来实现一个优惠券
  4. 漫步线性代数十五——余弦和投影
  5. (16)FPGA面试题MOORE 与 MEELEY状态机
  6. Oracle包和包体
  7. Airflow 中文文档:命令行界面
  8. 【网络信息安全】网络信息安全概述
  9. 动态传参, 名称空间, 嵌套, gloabal, nonlocal
  10. (转)使用JMeter进行Web压力测试
  11. 智能优化算法:鼠群算法
  12. ubuntu一些记录
  13. Android Studio欢迎界面和登陆界面的设计(小白)
  14. 数字孪生技术下的智慧医院再添新功能,室内地图导航让你“医”路畅通
  15. js小游戏-别踩白块儿
  16. Linux内核为大规模支持100Gb/s网卡准备好了吗?并没有
  17. centOS 7无法连接网络详细解决办法
  18. RoughSets属性约简算法
  19. aardio学习记录-1.基本概念和自定义类的调用
  20. 年底大标季来袭,一步之遥2.0投标培训班助你实力升级!

热门文章

  1. 给妹子讲python_给妹子讲python-S01E01好用的列表
  2. c语言学生管理p1指向编译错误,在ubuntu下用C语言编写一个学生管理系统,编译时出错,紧急求救!!!...
  3. 2020年最好用的手机是哪一款_2020年千元机中性能最好的4款手机,印象最让你深刻的是哪一款?...
  4. css中如何将a标签设置居中,cssa标签设置成block后,怎么让文字垂直居中_html/css_WEB-ITnose...
  5. 基于Android的数据采集系统,一种基于Android的新型用户数据采集发送系统
  6. android系统自动休眠代码流程,android系统休眠与唤醒驱动流程详细分析.doc
  7. Jenkins持续集成学习-搭建jenkins问题汇总
  8. Centos7下编译安装Nginx、Mysql、PHP(文章底部包含一键安装脚本)
  9. win7电脑桌面壁纸曝光过高影响图标怎么办?亲测实用解决方法
  10. iptables基础(01)