数据挖掘的五大流程

1.获取数据
2.数据预处理
从数据中检测、纠正或删除损坏的数据,对缺失值进行填补。
3.特征工程
将原始数据转换成更能代表预测模型的潜在问题的特征的过程,可以通过挑选最相关的特征、提取特征和创造特征来实现。
4.建模
5.上线,验证模型效果。

本文主要介绍数据预处理部分,sklearn中用于数据预处理的模块是preprocessingImpute
preprocessing:几乎包含数据预处理的所有内容。
Impute:填补缺失值专用。

数据无量纲化

无量纲化:是指将不同规格的数据转换到同一规格,或将不同分布的数据转换到同一分布。

数据的无量纲化可以使线性的也可以是非线性的,线性的无量纲化包括中心化(Zero-centered)处理和缩放处理(Scale)。
中心化的本质是将所有记录减去一个特定的值,即让数据平移到某个位置。缩放的本质是讲所有的记录除以一个特定的值,即将数据在固定的范围内伸缩。

数据归一化(Normalization)
将数据按照最小值中心化,再按极差(最大值-最小值)缩放,数据移动了最小个单位,并且会被收敛到[0,1]之间,这个过程叫做数据归一化。

在sklearn中使用preprocessing.MinMaxScaler来实现这个功能。MinMaxScaler中有一个重要参数feature_range,来控制我们希望把数据压缩到的范围,默认是[0,1]。

from sklearn.preprocessing import MinMaxScaler
data=[[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
import pandas as pd
pd.DataFrame(data)

#实现归一化
scaler=MinMaxScaler()   #实例化
scaler=scaler.fit(data)  #fit数据,本质是生成最大值和最小值
result=scaler.transform(data)  #通过接口导出结果result


实现归一化后可以看到,两组数据的分布其实是一样的。

数据标准化(Standardization)
当数据(x)按均值(μ)中心化后,再按标准差(σ)缩放,数据就会服从为均值为0,方差为1的正态分布(即标准正态分布),这个过程就叫做数据标准化。公式如下:

from sklearn.preprocessing import StandardScaler  #导入标准化
data=[[-1, 2], [-0.5, 6], [0, 10], [1, 18]]scaler=StandardScaler() #实例化
x_std=scaler.fit_transform(data)x_std

也可以看到两组数据的分布相同

x_std.mean()   #查看均值,为0
x_std.std()   #查看方差,为1

**StandardScaler和MinMaxScaler选哪个? **

大多数机器学习算法中,会选择StandardScaler来进行特征缩放,因为MinMaxScaler对异常值非常敏感。

填补缺失值

  1. 通过类impute.SimpleImputer 来对缺失值进行填补。

class sklearn.impute.SimpleImputer(missing_values=nan, strategy=’mean’, fill_value=None, verbose=0, copy=True)


例如对于一组数据中的Age进行缺失值填补

Age=data.loc[:,"Age"].values.reshape(-1,1)  #reshape将数据升维
from sklearn.impute import SimpleImputer
imp_mean=SimpleImputer()  #默认均值填补
imp_median=SimpleImputer(strategy="median")  #中位数
imp_0=SimpleImputer(strategy="constant",fill_value=0)  #0
imp_mean=imp_mean.fit_transform(Age)
imp_median=imp_median.fit_transform(Age)
imp_0=imp_0.fit_transform(Age)

2.也可直接通过numpy和pandas进行填补

data_.loc[:,"Age"]=data.loc[:,"Age"].fillna(data.loc[:,"Age"].median)

直接删除有缺失值的行:

data_.dropna(axis=0,inplace=True)#.dropna(axis=0)删除所有有缺失值的行,.dropna(axis=1)删除所有有缺失值的列
#参数inplace,为True表示在原数据集上进行修改,为False表示生成一个复制对象,不修改原数据,默认False

处理分类型特征:编码与哑变量

有些机器学习算法,例如逻辑回归、SVM等只能处理数值型数据,不能处理文字型数据,这种情况下,需要对文字型数据进行编码,将文字型数据转换成数值型数据。

  • preprocessing.LabelEncoder:标签专用,能够将分类转换为分类数值
from sklearn.preprocessing import LabelEncoder     #标签专用,可以是一维数据
data.iloc[:,-1]=LabelEncoder().fit_transform(data.iloc[:,-1])
  • preprocessing.OrdinalEncoder:特征专用,能够将分类特征转换为分类数值。
from sklearn.preprocessing import OrdinalEncoder   #特征专用,需要输入二维以上数据
data_=data.copy()
data_.head()

OrdinalEncoder().fit(data_.iloc[:,1:-1]).categories_   #查看对应的种类

data_.iloc[:,1:-1]=OrdinalEncoder().fit_transform(data_.iloc[:,1:-1])
data_.head()

  • preprocessing.OneHotEncoder:独热编码,创建哑变量

    上述OrdinalEncoder将舱门Embarked(S,C,Q)一列转换成了数值类型变量(0,1,2),对于舱门原特征S,C,Q来说,相互之间没有任何联系,然而,转换成数值变量0,1,2后,这三个数值却有了大小、xi相加相乘的联系,这种转换会对算法的准确性产生一定的影响。
    类似于Embarked这种变量,我们称之为名义变量。对于有序变量,可以使用OrdinalEncoder来编码;对于名义变量,需要使用哑变量的方式进行编码。


这种编码方式,可以体现出“有你就没我”的不等关系,成为独热编码,将特征转换成哑变量。

from sklearn.preprocessing import OneHotEncoder
data.head()

X=data.iloc[:,1:-1]
enc=OneHotEncoder(categories="auto").fit(X)    #categories="auto"自动查看类别
result=enc.transform(X).toarray()
result

enc.get_feature_names()  #获取转换后代表的特征名称

处理连续型特征:二值化和分段

  • sklearn.preprocessing.Binarizer

根据阈值将数据二值化用于处理连续型变量,大于阈值的映射为1,小于阈值的映射为0.

例如将年龄二值化。

#将年龄二值化
data_2=data.copy()
from sklearn.preprocessing import Binarizer
X=data_2.iloc[:,0].values.reshape(-1,1)   #特征专用,需要二维
X

transformer=Binarizer(threshold=30).fit_transform(X)
transformer

data_2.iloc[:,0]=transformer
data_2.head()

  • preprocessing.KBinsDiscretizer
    将连续型变量划分为分类型变量的类,能够将连续变量排序后按顺序分箱后编码。
#将年龄进行分箱处理
from sklearn.preprocessing import KBinsDiscretizer
X=data.iloc[:,0].values.reshape(-1,1)
est=KBinsDiscretizer(n_bins=3,encode="ordinal",strategy="uniform")
est.fit_transform(X)

est=KBinsDiscretizer(n_bins=3,encode="onehot",strategy="uniform")
est.fit_transform(X).toarray()

机器学习——数据预处理相关推荐

  1. 机器学习数据预处理之离群值/异常值:图像对比法

    机器学习数据预处理之离群值/异常值:图像对比法 garbage in,garbage out. 异常值是分析师和数据科学家常用的术语,因为它需要密切注意,否则可能导致错误的估计. 简单来说,异常值是一 ...

  2. 机器学习数据预处理之离群值/异常值:箱图法(boxplot method)

    机器学习数据预处理之离群值/异常值:箱图法(boxplot method) garbage in,garbage out. 异常值是分析师和数据科学家常用的术语,因为它需要密切注意,否则可能导致错误的 ...

  3. 机器学习数据预处理之离群值/异常值:MAD法(绝对值差中位数法)+绝对中位差(Median Absolute Deviation,MAD)

    机器学习数据预处理之离群值/异常值:MAD法(绝对值差中位数法)+绝对中位差(Median Absolute Deviation,MAD) garbage in,garbage out. 异常值是分析 ...

  4. 机器学习数据预处理之缺失值:预测填充(回归模型填充、分类模型填充)

    机器学习数据预处理之缺失值:预测填充(回归模型填充.分类模型填充) garbage in, garbage out. 没有高质量的数据,就没有高质量的数据挖掘结果,数据值缺失是数据分析中经常遇到的问题 ...

  5. 机器学习数据预处理之缺失值:插值法填充+ lagrange插值+拉格朗日插值

    机器学习数据预处理之缺失值:插值法填充+ lagrange插值+拉格朗日插值 garbage in, garbage out. 没有高质量的数据,就没有高质量的数据挖掘结果,数据值缺失是数据分析中经常 ...

  6. 机器学习数据预处理之缺失值:插值法填充+多项式插值

    机器学习数据预处理之缺失值:插值法填充+多项式插值 garbage in, garbage out. 没有高质量的数据,就没有高质量的数据挖掘结果,数据值缺失是数据分析中经常遇到的问题之一.当缺失比例 ...

  7. 机器学习数据预处理之缺失值:特征删除

    机器学习数据预处理之缺失值:特征删除 garbage in, garbage out. 没有高质量的数据,就没有高质量的数据挖掘结果,数据值缺失是数据分析中经常遇到的问题之一.当缺失比例很小时,可直接 ...

  8. 机器学习数据预处理之缺失值:样本删除

    机器学习数据预处理之缺失值:样本删除 garbage in, garbage out. 没有高质量的数据,就没有高质量的数据挖掘结果,数据值缺失是数据分析中经常遇到的问题之一.当缺失比例很小时,可直接 ...

  9. 机器学习数据预处理之缺失值:众数(mode)填充

    机器学习数据预处理之缺失值:众数(mode)填充 garbage in, garbage out. 没有高质量的数据,就没有高质量的数据挖掘结果,数据值缺失是数据分析中经常遇到的问题之一.当缺失比例很 ...

  10. 机器学习数据预处理之缺失值:最小值最大值填充

    机器学习数据预处理之缺失值:最小值最大值填充 garbage in, garbage out. 没有高质量的数据,就没有高质量的数据挖掘结果,数据值缺失是数据分析中经常遇到的问题之一.当缺失比例很小时 ...

最新文章

  1. 如何在页面加载完成后再去做某事?什么方法可以判断当前页面加载已完成?...
  2. Mybatis用法小结
  3. Hasor JDBC 的难关,嵌套事务处理思路
  4. [Swift]LeetCode556. 下一个更大元素 III | Next Greater Element III
  5. [react] shouldComponentUpdate方法是做什么的
  6. 设计模式之模板方法和策略模式的区别(一)
  7. redis zset usage
  8. C++冒泡排序(初级版)
  9. Java开源生鲜电商平台-支付模块的设计与架构(源码可下载) Java开源生鲜电商平台-订单表的设计(源码可下载)...
  10. unicode字符和多字节字符的相互转换接口
  11. python em和web_浅析Python的web.py框架中url的设定方法
  12. 玩赚亚丁号---薅羊毛专业版
  13. Kjava林林工具箱源代码(jbuilder工程)
  14. V神以太坊:协议设计中的“封装复杂性” vs. “系统复杂性”
  15. C++知识讲解(一)
  16. Java:使用POI导出Excel文件后打开文件提示因为文件格式或文件扩展名无效而无法打开
  17. 《侍神令》中真正的“阴阳师”日常吃什么料理?新鲜鱼类最珍贵~
  18. 吊炸天的云原生,到底是个啥
  19. iOS开发 适配iOS10
  20. 数据库怎么设计字典表

热门文章

  1. VB编程操作AutoCAD块对象
  2. MVC与WebForm最大的区别
  3. 红旗6.0SP2发布啦!
  4. 一步一步完成坦克大战:一、游戏关键难点实现
  5. django之orm的高级操作以及xcc安全攻击
  6. Spring boot MultipartResolver
  7. 【原】如何实现IE6下块级元素的内容自动收缩
  8. Silverlight 4处理StartWith的BUG
  9. BeginPaint和GetDC有什么区别?【转】
  10. IT凭什么拿高薪?!