机器学习——数据预处理

数据预处理需要根据数据本身的特性进行,有不同的格式和不同的要求,有缺失值的要填,有无效数据的要剔,有冗余维的要选,这些步骤都和数据本身的特性紧密相关。数据预处理大致分为三个步骤:数据的准备、数据的转换、数据的输出。数据处理是系统工程的基本环节,也是提高算法准确度的有效手段。因此,为了提高算法模型的准确度,在机器学习中也要根据算法的特征和数据的特征对数据进行转换。这里将利用scikit-learn来转换数据,以便我们将处理后的数据应用到算法中,这样也可以提高算法模型的准确度。
主要介绍以下几种数据转换方法:调整数据尺度(RescaleData)、正态化数据(StandardizeData)、标准化数据(NormalizeData)、二值数据(BinarizeData)。

格式化数据

格式化数据流程:
1.导入数据
2.按照算法的输入和输出整理数据
3.格式化输入数据
4.总结显示数据的变化
scikit-leam提供了两种标准的格式化数据的方法,每一种方法都有适用的算法。利用这两种方法整理的数据,可以直接用来训练算法模型。方法如下:
1.适合和多重变换(Fitand Multiple Transform)
2.适合和变换组合(CombinedFit-and-Transform)
推荐优先选择适合和多重变换(Fit and Multiple Transform )方法。首先调用fit()函数来准备数据转换的参数,然后调用transform()函数来做数据的预处理。适合和变换组合(Combined Fit-and-Transform )对绘图或汇总处理具有非常好的效果。

调整数据尺度

如果数据的各个属性按照不同的方式度量数据,那么通过调整数据的尺度让所有的属性按照相同的尺度来度量数据,就会给机器学习的算法模型训练带来极大的方便。这个方法通常会将数据的所有属性标准化,并将数据转换成0和1之间的值,这对于梯度下降等算法是非常有用的,对于回归算法、神经网络算法和K近邻算法的准确度提高也起到很重要的作用。
在统计学中,按照对事物描述的精确度,对所采用的尺度从低级到高级分成四个层次:定类尺度、定序尺度、定距尺度和定比尺度。定类尺度是对事物类别属性的一种测度,按照事物的属性进行分组或分类。定序尺度是对事物之间的等级或顺序的一种测度,可以比较优劣或排序。定距尺度和定比尺度是对事物类别或次序之间间距的测量,定距尺度的特点是其不仅能将事物区分为不同的类型并进行排序,而且可以准确地指出类别之间的差距。而定比尺度则更近一步,它和定距尺度的差别在于它有一个固定的绝对“零”点。由于这两种测量尺度在绝大多数统计分析中没有本质的差别,所以很多时候都没有严格的区分。
在scikit-leam中,可以通过MinMaxScaler类来调整数据尺度。将不同计量单位的数据统一成相同的尺度,利于对事物的分类或分组。实际上,MinMaxScaler是将属性缩放到一个指定范围,或者对数据进行标准化并将数据都聚集到0附近,方差为1。数据尺度的统一,通常能够提高与距离相关的算法的准确度(如K近邻算法)。下面给出一个对数据进行缩放的例子。

#调整数据尺度(0.. )
from pandas import read_csv 
from numpy import set_printoptions
from sklearn.preprocessing import MinMaxScaler 
#导入数据
filename = 'pima_data.csv'
names= ['preg','plas','pres','skin','test','mass','pedi','age','class'] 
data = read_csv(filename, names=names) 
#将数据分为输入数据和输出结果
array = data.values 
X = array[ : , 0:8] 
Y = array [ : , 8] 
transformer= MinMaxScaler(feature_range=(0, 1)) 
#数据转换
newX = transformer.fittransform(X) 
#设定数据的打印
set_printoptions(precision = 3)
print(newX)

正态化数据

正态化数据(StandardizeData )是有效的处理符合高斯分布的数据的于段,输出结果以0为中位数,方差为1,并作为假定数据符合高斯分布的算法的输入。这些算法有线性回归、逻辑回归和线性判别分析等。在这里可以通过scikit-leam提供的StandardScaler类来进行正态化数据处理。

#正态化数据
from pandas import read_csv 
from numpy import set_printoptions
from sklearn.preprocessing import StandardScaler  
#导入数据
filename = 'pima_data.csv'
names= ['preg','plas','pres','skin','test','mass','pedi','age','class'] 
data = read_csv(filename, names=names) 
#将数据分为输入数据和输出结果
array = data.values 
X = array[ : , 0:8] 
Y = array [ : , 8] 
transformer= StandardScaler().fit(X)
#数据转换
newX = transformer.transform(X)
#设定数据的打印
set_printoptions(precision = 3)
print(newX)

标准化数据

标准化数据(NormalizeData )处理是将每一行的数据的距离处理成1(在线性代数中矢量距离为1)的数据又叫作“归一元”处理,适合处理稀疏数据(具有很多为0的数据),归一元处理的数据对使用权重输入的神经网络和使用距离的K近邻算法的准确度的提升有显著作用。使用scikit-leam中的Normalizer类实现。

#标准化数据
from pandas import read_csv 
from numpy import set_printoptions
from sklearn.preprocessing import Normalizer 
#导入数据
filename = 'pima_data.csv'
names= ['preg','plas','pres','skin','test','mass','pedi','age','class'] 
data = read_csv(filename, names=names) 
#将数据分为输入数据和输出结果
array = data.values 
X = array[ : , 0:8] 
Y = array [ : , 8] 
transformer= Normalizer().fit(X)
#数据转换
newX = transformer.transform(X)
#设定数据的打印
set_printoptions(precision = 3)
print(newX)

二值数据

二值数据(Binarize Data )是使用值将数据转化为二值,大于|竭值设置为l,小于阐值设置为0。这个过程被叫作二分数据或阐值转换。在生成明确值或特征工程增加属性的时候使用,使用scikit-learn中的Binarizer类实现。

#二值数据
from pandas import read_csv 
from numpy import set_printoptions
from sklearn.preprocessing import Binarizer 
#导入数据
filename = 'pima_data.csv'
names= ['preg','plas','pres','skin','test','mass','pedi','age','class'] 
data = read_csv(filename, names=names) 
#将数据分为输入数据和输出结果
array = data.values 
X = array[ : , 0:8] 
Y = array [ : , 8] 
transformer= Binarizer(threshold = 0.0).fit(X)
#数据转换
newX = transformer.transform(X)
#设定数据的打印
set_printoptions(precision = 3)
print(newX)
上一篇:Python爬取表情包


下一篇:keil里编译之后Code,RO-Data,RW-Data,ZI-Data详解