ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

机器学习——数据预处理

2021-05-13 11:04:54  阅读:241  来源: 互联网

标签:机器 尺度 学习 算法 names import array 数据 预处理


数据预处理需要根据数据本身的特性进行,有不同的格式和不同的要求,有缺失值的要填,有无效数据的要剔,有冗余维的要选,这些步骤都和数据本身的特性紧密相关。数据预处理大致分为三个步骤:数据的准备、数据的转换、数据的输出。数据处理是系统工程的基本环节,也是提高算法准确度的有效手段。因此,为了提高算法模型的准确度,在机器学习中也要根据算法的特征和数据的特征对数据进行转换。这里将利用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)

标签:机器,尺度,学习,算法,names,import,array,数据,预处理
来源: https://blog.csdn.net/qq_42138271/article/details/116716533

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有