《机器学习,Python实践》读书笔记之六

关于数据预处理

在对数据进行应用之前,需要对数据进行相应的处理。数据预处理是根据数据本身的特性进行的。有缺失值的要填,有无效数据的要剔,有冗余维的要选。

数据预处理大致分为以下三个步骤:

  • 数据的准备
  • 数据的转换
  • 数据的输出

常用的几种数据转换方法:

  • 调整数据尺度
  • 正态化数据
  • 标准化数据
  • 二值数据

数据预处理一般流程

数据预处理的一般流程分为以下四步:

  • 导入数据
  • 按照算法的输入和输出整理数据
  • 格式化输入数据
  • 总结显示数据的变化

scikit-learn提供了两种标准的格式化数据的方法。利用这两种方法整理的数据,可以直接用来训练算法模型。它们分别是:

  • 适合和多重变换
  • 适合和变换组合

数据预处理之调整数据尺度

调整数据尺度的目的在于,让数据的各个属性都按照相同的尺度来度量数据,从而给机器学习的算法模型带来方便。该方法通常会将数据的所有属性标准化,并将数据转换成0和1之间的值。

统计学中,按照对事物描述的精确度,对所采用的尺度从低级到高级分成四个层次,分别是:

  • 定类尺度:对事物类别属性的一种测度,按照事物的属性进行分组或分类
  • 定序尺度:对事物之间的等级或顺序的一种测度,可以比较优劣或排序
  • 定距尺度:不仅能将事物区分为不同的类型并进行排序,而且可以准确地指出类别之间的差距
  • 定比尺度:比定距尺度更近一步,其差别在于它有一个固定的绝对“零”点

scikit-learn中的MinMaxScaler类可以用来调整数据尺度,将不同计量单位的数据统一成相同的尺度,从而有利于对事物的分类或分组。

以下是书中的代码及对每句对应的作用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#导入必要的类库
from pandas import read_csv
from numpy import set_printoptions
from sklearn.preprocessing import MinMaxScaler

#设置分析的文件名
filename="pima.csv"
#设置数据标题
names=['preg','plas','pres','skin','test','mass','pedi','age','class']
#读入数据
data=read_csv(filename,names=names)
#将数据值赋给array数组
array=data.values
#print(array)可查看原始数据
#分解数据,将1-7列内容放到X中
X=array[:,0:8]
#分解数据,将第8列内容放到Y中
Y=array[:,8]
#设置处理方式及尺度范围
transformer=MinMaxScaler(feature_range=(0,1))
#对数据进行转换
newX=transformer.fit_transform(X)
#设置打印格式,precision为数据精度
set_printoptions(precision=3)
#输出数据
print(newX)

数据预处理之正态化数据

正态化数据是有效处理符合高斯分布的数据的方法,输出结果以0为中位数,方差为1,并作为假定数据符合高斯分布的算法的输入。

代码方面,除了在导入类库部分要import StandardScaler外,与调整数据尺度有两句变化,即:

1
2
3
4
#设置处理方式及尺度范围
transformer=MinMaxScaler(feature_range=(0,1))
#对数据进行转换
newX=transformer.fit_transform(X)

调整为

1
2
3
4
#设置处理方式
transformer=StandardScaler().fit(x)
#对数据进行转换
newX=transformer.transform(X)

数据预处理之标准化数据

标准化数据处理是将每一行的数据的距离处理成1的数据,又叫作“归一元”处理,适合处理稀疏数据(具有很多为0的数据)。

代码方面,除了在导入类库部分要import Normalizer外,与正态化数据有一句变化,即:

1
2
#设置处理方式
transformer=Normalizer().fit(x)

数据预处理之二值数据

二值数据是使用值将数据转化为二值,大于阈值设置为1,小于阈值设置为0。这个过程被称之为二分数据或阈值转换。

代码方面,除了在导入类库部分要import Binarizer外,与正态化数据有一句变化,即:

1
2
#设置处理方式,threshold为阈值
transformer=Binarizer(threshold=0.0).fit(x)

声明:该系列读书笔记所引用知识点均出于《机器学习,Python实践》