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

文章目录

  • 数据预处理思路
  • 数据预处理方法
    • 1 标准化:去均值,方差规模化
    • 2 规模化稀疏数据
    • 3 规模化有异常值的数据
    • 4 正则化Normalization
    • 5 二值化–特征的二值化
    • 6 类别特征编码
    • 7 弥补缺失数据
    • 7 创建多项式特征

数据预处理思路

1.首先要明确有多少特征,哪些是连续的,哪些是类别的。
2.检查有没有缺失值,对确实的特征选择恰当方式进行弥补,使数据完整。
3.对连续的数值型特征进行标准化,使得均值为0,方差为1。
4.对类别型的特征进行one-hot编码。
5.将需要转换成类别型数据的连续型数据进行二值化。
6.为防止过拟合或者其他原因,选择是否要将数据进行正则化。
7.在对数据进行初探之后发现效果不佳,可以尝试使用多项式方法,寻找非线性的关系。
8.根据实际问题分析是否需要对特征进行相应的函数转换。

数据预处理方法

1 标准化:去均值,方差规模化

Standardization标准化:将特征数据的分布调整成标准正太分布,也叫高斯分布,也就是使得数据的均值为0,方差为1.标准化的原因在于如果有些特征的方差过大,则会主导目标函数从而使参数估计器无法正确地去学习其他特征。标准化的过程为两步:去均值的中心化(均值变为0);方差的规模化(方差变为1)。
在sklearn.preprocessing中提供了一个scale的方法,可以实现以上功能:

# 预处理数据的方法总结(使用sklearn-preprocessing)
from sklearn import preprocessing
import numpy as np # 1. 标准化:去均值,方差规模化 
# 创建一组特征数据,每一行表示一个样本,每一列表示一个特征
# Standardization标准化:将特征数据的分布调整成标准正太分布,也叫高斯分布,也就是使得数据的均值维0,方差为1.
# 标准化的原因在于如果有些特征的方差过大,则会主导目标函数从而使参数估计器无法正确地去学习其他特征。# 标准化的过程为两步:去均值的中心化(均值变为0);方差的规模化(方差变为1)。
# 在sklearn.preprocessing中提供了一个scale的方法,可以实现以上功能。
x = np.array([[1., -1., 2.],[2., 0., 0.],[0., 1., -1.]])
# 将每一列特征标准化为标准正太分布,注意,标准化是针对每一列而言的
x_scale = preprocessing.scale(x)
x_scale

preprocessing这个模块还提供了一个实用类StandarScaler,它可以在训练数据集上做了标准转换操作之后,把相同的转换应用到测试训练集中。
这是相当好的一个功能。可以对训练数据,测试数据应用相同的转换,以后有新的数据进来也可以直接调用,不用再重新把数据放在一起再计算一次了。
调用fit方法,根据已有的训练数据创建一个标准化的转换器# 另外,StandardScaler()中可以传入两个参数:with_mean,with_std.这两个都是布尔型的参数,
默认情况下都是true,但也可以自定义成false.即不要均值中心化或者不要方差规模化为1.

scaler = preprocessing.StandardScaler().fit(x) 
scaler
# 使用上面这个转换器去转换训练数据x,调用transform方法
scaler.transform(x)
#好了,比如现在又来了一组新的样本,也想得到相同的转换
new_x = [[-1., 1., 0.]]
scaler.transform(new_x)

MaxAbsScaler
原理与上面的很像,只是数据会被规模化到[-1,1]之间。也就是特征中,所有数据都会除以最大值。这个方法对那些已经中心化均值维0或者稀疏的数据有意义。

# MinMaxScaler
# 在MinMaxScaler中是给定了一个明确的最大值与最小值。它的计算公式如下:
# X_std = (X - X.min(axis=0)) /(X.max(axis=0) - X.min(axis=0))
# X_scaled = X_std / (max - min) + min
# 以下这个例子是将数据规与[0,1]之间,每个特征中的最小值变成了0,最大值变成了1,请看:
min_max_scaler =preprocessing.MinMaxScaler()
x_minmax = min_max_scaler.fit_transform(x)
x_minmax
# 同样的,如果有新的测试数据进来,也想做同样的转换咋办呢?请看:
x_test = np.array([[-3., -1., 4.]])
x_test_minmax =min_max_scaler.transform(x_test)
x_test_minmax

2 规模化稀疏数据

如果对稀疏数据进行去均值的中心化就会破坏稀疏的数据结构。虽然如此,我们也可以找到方法去对稀疏的输入数据进行转换,特别是那些特征之间的数据规模不一样的数据。
MaxAbsScaler 和maxabs_scale这两个方法是专门为稀疏数据的规模化所设计的。

3 规模化有异常值的数据

如果你的数据有许多异常值,那么使用数据的均值与方差去做标准化就不行了。在这里,你可以使用robust_scale 和 RobustScaler这两个方法。它会根据中位数或者四分位数去中心化数据。

4 正则化Normalization

正则化是将样本在向量空间模型上的一个转换,经常被使用在分类与聚类中。
函数normalize 提供了一个快速有简单的方式在一个单向量上来实现这正则化的功能。正则化有l1,l2等,这些都可以用上:

# 正则化Normalization# 正则化是将样本在向量空间模型上的一个转换,经常被使用在分类与聚类中。# 函数normalize 提供了一个快速有简单的方式在一个单向量上来实现这正则化的功能。
# 正则化有l1,l2等,这些都可以用上:
x_normalized = preprocessing.normalize(x, norm='l2') x_normalized
x

preprocessing这个模块还提供了一个实用类Normalizer,实用transform方法同样也可以对新的数据进行同样的转换

# preprocessing这个模块还提供了一个实用类Normalizer,实用transform方法同样也可以对新的数据进行同样的转换
# 根据训练数据创建一个正则器
normalizer =preprocessing.Normalizer().fit(x)
normalizer
# 对训练数据进行正则
normalizer.transform(x)
# 对新的测试数据进行正则
normalizer.transform([[-1., 1., 0.]])
# normalize和Normalizer都既可以用在密集数组也可以用在稀疏矩阵(scipy.sparse)中
# 对于稀疏的输入数据,它会被转变成维亚索的稀疏行表征(具体请见scipy.sparse.csr_matrix)

5 二值化–特征的二值化

特征的二值化是指将数值型的特征数据转换成布尔类型的值。可以使用实用类Binarizer。

# 特征的二值化是指将数值型的特征数据转换成布尔类型的值。可以使用实用类Binarizer
# 默认是根据0来二值化,大于0的都标记为1,小于等于0的都标记为0。
from sklearn import preprocessing
import numpy as np
# 创建一组特征数据,每一行表示一个样本,每一列表示一个特征
x = np.array([[1., -1., 2.], [2., 0., 0.], [0.,1., -1.]])
binarizer =preprocessing.Binarizer().fit(x)
binarizer.transform(x)
#当然也可以自己设置这个阀值,只需传出参数threshold即可
binarizer =preprocessing.Binarizer(threshold=1.5)
binarizer.transform(x)

6 类别特征编码

OneHotEncoder独热编码
独热编码(哑变量 dummy variable)是因为大部分算法是基于向量空间中的度量来进行计算的,为了使非偏序关系的变量取值不具有偏序性,并且到圆点是等距的。使用one-hot编码,将离散特征的取值扩展到了欧式空间,离散特征的某个取值就对应欧式空间的某个点。将离散型特征使用one-hot编码,会让特征之间的距离计算更加合理。离散特征进行one-hot编码后,编码后的特征,其实每一维度的特征都可以看做是连续的特征。就可以跟对连续型特征的归一化方法一样,对每一维特征进行归一化。比如归一化到[-1,1]或归一化到均值为0,方差为1。

什么情况下(不)用独热编码?

:独热编码用来解决类别型数据的离散值问题,

不用:将离散型特征进行one-hot编码的作用,是为了让距离计算更合理,但如果特征是离散的,并且不用one-hot编码就可以很合理的计算出距离,那么就没必要进行one-hot编码。有些基于树的算法在处理变量时,并不是基于向量空间度量,数值只是个类别符号,即没有偏序关系,所以不用进行独热编码。 Tree Model不太需要one-hot编码:对于决策树来说,one-hot的本质是增加树的深度。
总的来说,要是one hot encoding的类别数目不太多,建议优先考虑。

什么情况下(不)需要归一化?

需要: 基于参数的模型或基于距离的模型,都是要进行特征的归一化。

不需要:基于树的方法是不需要进行特征的归一化,例如随机森林,bagging 和 boosting等。
要想使得类别型的变量能最终被模型直接使用,可以使用one-of-k编码或者one-hot编码。这些都可以通过OneHotEncoder实现,它可以将有n种值的一个特征变成n个二元的特征。

# 类别特征编码# 我们知道特征可能是连续型的也可能是类别型的变量,比如说:
# [“male”, “female”], [“from Europe”, “from US”, “from Asia”], [“uses Firefox”, “uses Chrome”, “uses Safari”, “uses Internet Explorer”].
# 这些类别特征无法直接进入模型,它们需要被转换成整数来表征,比如:
# [“male”, “from US”, “uses Internet Explorer”] could be expressed as [0, 1, 3] while [“female”, “from Asia”, “uses Chrome”] would be [1, 2, 1].
# 然而上面这种表征的方式仍然不能直接为scikit-learn的模型所用,因为模型会把它们当成序列型的连续变量。# 要想使得类别型的变量能最终被模型直接使用,可以使用one-of-k编码或者one-hot编码。
# 这些都可以通过OneHotEncoder实现,它可以将有n种值的一个特征变成n个二元的特征。
# 特征1中有(0,1)两个值,特征2中有(0,1,2)3个值,特征3中有(0,1,2,3)4个值,所以编码之后总共有9个二元特征。
enc = preprocessing.OneHotEncoder()enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])
enc.transform([[0,1,3]]).toarray()
# 但是呢,也会存在这样的情况,某些特征中可能对一些值有缺失,
# 比如明明有男女两个性别,样本数据中都是男性,这样就会默认被判别为我只有一类值。
# 这个时候我们可以向OneHotEncoder传如参数n_values,用来指明每个特征中的值的总个数
enc = preprocessing.OneHotEncoder(n_values=[2,3,4]) 
# 指明每个特征中的值的总个数分别为 2 3 4
enc.fit([[1, 2, 3], [0, 2, 0]])
enc.transform([[1,0,0]]).toarray()

7 弥补缺失数据

在scikit-learn的模型中都是假设输入的数据是数值型的,并且都是有意义的,如果有缺失数据是通过NAN,或者空值表示的话,就无法识别与计算了。

要弥补缺失值,可以使用均值,中位数,众数等等。Imputer这个类可以实现。请看:

# 弥补缺失数据# 在scikit-learn的模型中都是假设输入的数据是数值型的,并且都是有意义的,如果有缺失数据是通过NAN,或者空值表示的话,就无法识别与计算了。
# 要弥补缺失值,可以使用均值,中位数,众数等等。Imputer这个类可以实现。请看:
import numpy as np
from sklearn.preprocessing import Imputer
imp = Imputer(missing_values='NaN', strategy='mean', axis=0)
imp.fit([[1, 2], [np.nan, 3], [7, 6]])
x = [[np.nan, 2], [6, np.nan], [7, 6]]
imp.transform(x)# Imputer类同样也可以支持稀疏矩阵,以下例子将0作为了缺失值,为其补上均值
import scipy.sparse as sp
# 创建一个稀疏矩阵
x = sp.csc_matrix([[1, 2], [0, 3], [7, 6]])
imp = Imputer(missing_values=0,
strategy='mean', verbose=0)
imp.fit(x)
x_test = sp.csc_matrix([[0, 2], [6, 0], [7,6]])
imp.transform(x_test)

7 创建多项式特征

有的时候线性的特征并不能做出美的模型,于是我们会去尝试非线性。非线性是建立在将特征进行多项式地展开上的。

比如将两个特征 (X_1, X_2),它的平方展开式便转换成5个特征(1, X_1, X_2, X_1^2, X_1X_2, X_2^2). 代码案例如下

import numpy as np
from sklearn.preprocessing import
PolynomialFeatures
# 自建一组3*2的样本
x = np.arange(6).reshape(3, 2)
# 创建2次方的多项式
# 比如将两个特征 (X_1,
X_2),它的平方展开式便转换成5个特征(1, X_1,
X_2, X_1^2, X_1X_2, X_2^2). 代码案例如下:
poly = PolynomialFeatures(2)
poly.fit_transform(x)
# 也可以自定义选择只要保留特征相乘的项。 
# 即将 (X_1, X_2,
X_3) 转换成 (1, X_1, X_2, X_3, X_1X_2, X_1X_3, X_2X_3,
X_1X_2X_3).
x = np.arange(9).reshape(3, 3)
poly = PolynomialFeatures(degree=3,
interaction_only=True)
poly.fit_transform(x)#自定义特征的转换函数
# 通俗的讲,就是把原始的特征放进一个函数中做转换,这个函数出来的值作为新的特征。
# 比如说将特征数据做log转换,做倒数转换等等。
# FunctionTransformer 可以实现这个功能
import numpy as np
from sklearn.preprocessing import
FunctionTransformer
transformer = FunctionTransformer(np.log1p)
x = np.array([[0, 1], [2, 3]])
transformer.transform(x)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474900.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode MySQL 1179. 重新格式化部门表

文章目录1. 题目2. 解题1. 题目 部门表 Department: ------------------------ | Column Name | Type | ------------------------ | id | int | | revenue | int | | month | varchar | ------------------------ (id, mo…

消息推送生命周期_一套完整的APP推送体系方案|附思维导图

写这篇文章的初衷是前几天在脉脉上看到一个问题:线上app push故障,该不该给用户发送补救推送信息?联想到自己当初作为实习菜鸟也犯过类似的推送事故,好在补救处理尚可,最终结果不错。这次仔细看了问题下的每一条回答&a…

七、jdk工具之jconsole命令(Java Monitoring and Management Console)

目录 一、jdk工具之jps(JVM Process Status Tools)命令使用 二、jdk命令之javah命令(C Header and Stub File Generator) 三、jdk工具之jstack(Java Stack Trace) 四、jdk工具之jstat命令(Java Virtual Machine Statistics Monitoring Tool) 四、jdk工具…

kaggle共享单车数据分析及预测(随机森林)

文章目录一、数据收集1.1、项目说明1.2、数据内容及变量说明二、数据处理2.1、导入数据2.2、缺失值处理2.3、Label数据(即count)异常值处理2.4、其他数据异常值处理2.5、时间型数据数据处理三、数据分析3.1 描述性分析3.2、探索性分析3.2.1、整体性分析3.2.2、相关性分析3.2.3、…

LeetCode MySQL 197. 上升的温度

文章目录1. 题目2. 解题1. 题目 给定一个 Weather 表,编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 Id。 --------------------------------------------- | Id(INT) | RecordDate(DATE) | Temperature…

c 语言输出后不关闭_穿书+娱乐圈 |再不跑路就要被迫C位出道了花瓶女配和影帝组CP后豪门娇美人是爽文剧本...

书单再不跑路就要被迫C位出道了花瓶女配和影帝组CP后豪门娇美人是爽文剧本1再不跑路就要被迫C位出道了作者:墨流霜文案:顾星染一觉醒来发现自己是某小说炮灰,未来会嫁给某女主爱慕者,度过悲惨的下半生。她为了逆天改命&#xff0c…

基于FPGA的图像处理(一)--System Generator介绍

计算机视觉系统通常需要进行大量的信息处理才能够得到所需要的信息。目前主要有CPU、GPU、ASIC、DSP、FPGA等计算平台。 常用的计算机视觉系统通过通用计算机进行视觉信息处理,但是,由于CPU的计算能力有限,对于一些计算复杂度很高的视觉算法&…

营销组合(4P营销)分析案例:采用SPSS+Excel进行分析

文章目录1、研究目的:营销决策2、研究内容:营销组合分析2.1规模预测分析2.1.1 预测思路与方法2.1.2季节分解法预测市场规模2.2 产品属性分析2.2.1 KANO模型基本思想2.2.2 KANO模型的数据分析步骤2.2.2.1 数据准备2.2.2.2 Better—Worse系数矩阵2.3 定价决…

LeetCode MySQL 1445. 苹果和桔子

文章目录1. 题目2. 解题1. 题目 表: Sales ------------------------ | Column Name | Type | ------------------------ | sale_date | date | | fruit | enum | | sold_num | int | ------------------------ (sale_date,fruit) 是该表主…

台达plc自由口通讯_台达PLC和ABB机器人Devicenet通讯

之前有经常遇见台达PLC和第三方机器人进行Devicenet通讯,故作以下整理,方便再次使用。以台达模块DVPDNET-SL与ABB IRC5通讯为例,方法如下:1.硬件连线将PLC模块端和Robot端按照引脚定义接好网线。2.设定模块地址。3.设定模块通讯速…

关于Unix哲学

今天看了一篇文章关于Unix哲学的,写的不错这里做个摘录。 原文地址:http://www.ruanyifeng.com/blog/2009/06/unix_philosophy.html 1. 清晰原则。 代码要写得尽量清晰,避免晦涩难懂。清晰的代码不容易崩溃,而且容易理解和维护。重…

电子商城战略分析(采用定性与定量分析方法)

文章目录研究目的:战略选择研究内容:环境分析宏观环境分析市场环境分析竞争环境分析定性与定量分析方法定性:SWOT分析定量:内外因素评价矩阵内外因素数据获取内外因素得分计算评分的计算权重的计算最终得分的计算制作战略选择矩阵…

LeetCode MySQL 1393. 股票的资本损益

文章目录1. 题目2. 解题1. 题目 Stocks 表: ------------------------ | Column Name | Type | ------------------------ | stock_name | varchar | | operation | enum | | operation_day | int | | price | int | ------------…

厂办大集体改制不签字_许昌二印,磨砂技术被外国觊觎,老工人说烂在肚子里也不外漏...

仓库租赁成为学习班和俱乐部场所市区计划改造提升老厂院10个,许昌市第二印刷厂有其一。今天,我们一起了解,许昌市第二印刷厂。当时,全国仅三家印刷厂能印制磨砂烟盒,市第二印刷厂位列其中。(你当年抽的磨砂许昌的包装&…

Kaggle:Video Game Sales电子游戏销售分析(Tableau展示)

文章目录项目介绍分析思路导图数据导入数据探索数据展示项目介绍 项目来源:Kaggle; 项目介绍:由vgchartz.com的一个刮版生成的,有一份综合的游戏行业销售数据,希望产生一份综合的游戏行业报告; 数据介绍&a…

LeetCode MySQL 1204. 最后一个能进入电梯的人(累加/变量/窗口函数)

文章目录1. 题目2. 解题1. 题目 表: Queue ---------------------- | Column Name | Type | ---------------------- | person_id | int | | person_name | varchar | | weight | int | | turn | int | ---------------------- person_id 是这个…

facenet训练自己的数据_①如何帮助自己简易分析体测数据②没有私教一个人无法开始训练?...

我们进健身房后,办卡以后,会有教练联系免费帮你做检测,检测后会拿出一张纸,聊完天,你就拿出一张卡,抱着一两个月我就会有巨大改变的决心,你辛苦赚的万八千就消失了.这张纸真的有这么…

Power Bi:零售数据可视化

文章目录理解数据含义确定需要解决的问题根据问题新建度量值确定背景、主题、字体及字体大小结果展示理解数据含义 本次可视化共有四张表,根据数据说明文档选择自己需要的特征,不需要的数据列隐藏。 确定需要解决的问题 根据问题新建度量值 确定背景…

excel打开csv错误换行_「乱吐槽·乱学习」excel高手捷径:一招鲜,吃遍天③

大家好,我是阿乱。话说三十而立,至于立的是什么玩意儿就见仁见智吧(≧∇≦)ノ,不过旗杆什么的先放下来哈,咱们这里说的是身上得有多几个技能,好让我们立于不败之地嘛。当然也欢迎年轻人加入啦,反…

POJ 3694 Network

大意:让你求无向图的桥(割边) 思路:一次查询,重建一次图,然后求一次割边,TLE。去网上开了看资料,可以用LCA暴力查询,唔,改天看看LCA。 TLE CODE: …