python数据集的预处理,用python对excel中的数据进行预处理
计算机编程语言数据预处理(包括处理数据离散值和归一化,分开处理训练集与测试集)
飞鱼
引用自百度的深度学习系统百度深度学习中的线性回归部分代码
数据预处理的代码分析
代码摘抄自PaddlePaddle,经过修改在Windows 10下Python3.6下编译通过
导入numpy作为NP导入matplotlib。py plot as pltimport OS feature _ names=[ CRIM , ZN , INDUS , CHAS , NOX , RM , AGE , DIS , RAD , TAX , PTRATIO , B , LSTAT , convert ]def feature _ range(maximums,minimums):import matplotlib # matplotlib。使用( Agg )导入matplotlib。py图为PLT图,ax=PLT。subplots()feature _ num=len(max/image ):OS . makedirs( ./image )fig . save fig( image/ranges。png ,dpi=48)PLT。关闭(图)定义加载数据(文件名,特征数=14,比率=0.8): #加载数据,数据之间由空格隔开data=np.fromfile(文件名,sep= )print(数据。shape[0])# 7084 print(数据。shape[0]/feature _ num)# 506 data=data。shape(int(data。shape[0]/feature _ num),feature _ num)print(data。shape)#(506,14)最大值,最小值,avgs=data.max(轴=0),data.min(轴=0),data.sum(轴=0)/data.shape[0]整理训练集与测试集offset=int(DATA。形状[0]*比率)UCI _列车_数据=数据[:offset]UCI _测试_数据=数据[偏移量:]加载_数据(rH:\1。数据)关于代码解释先用示例程序解释
将数组导入为np#x=np.array([1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0])x=np.array([1.0,9.0,300.0,4.0,400.0,60.0,7.0,8.0,90,100,11,12])print(x.shape)#(8,)feature_num=4print行四列print(x.shape[0])#2取出行数打印(x.shape[1])#4取出列数#重塑将一个一维转换成二维最大值,最小值,avgs=x.max(轴=0),x.min(轴=0)、x.sum(轴=0)/x.shape[0]print(最大值)#[5。6.7.8.]打印(最小值)#[1。2.3.4.]print(avgs)#[3 .4.5.6.]#平均值表示平均数 ndarray.max([int轴])函数功能:求多维数组中指定维度的最大值,默认求所有值的最大值。轴=0:求各圆柱的最大值轴=1:求各排的最大值[1.0, 9.0, 300.0, 4.0, 400.0, 60.0, 7.0, 8.0, 90,100,11,12])参数为0输出结果是[400.100.300.12.][1.9.7.4.][163.67 56.33 106.8.]其他函数参考最大 打印数量(最大[:-1])#[5。6.7.]去除最后一列打印(最小值[:-1])#[1。2.3.]对于范围内的I(特征编号-1):#归一化(规范化)x[:i]=(x[:i]-avgs[I])/(maximums[I]-minimums[I])print(x[:I]) 输出[-0.5 0.5][-0.5 0.5][-0.5 0.5]如果是[1.0, 9.0, 300.0, 4.0, 400.0, 60.0, 7.0, 8.0,90,100,11,12] 则输出[-0.40768588 0.59231412 -0.18462824][-0.52014652 0.04029304 0.47985348][ 0.66211604 -0.33788396 -0.32423208]# 第一个冒号代表获取行的起止行号# 第二个冒号代表获取列的起止行号以下文字全部引用自百度深度学习的线性回归连续值与离散值
看数据,我们的第一个发现是,在所有的13维属性中,有12维连续值和1维离散值(CHAS)。虽然离散值往往用0、1、2之类的数字来表示,但其含义与连续值不同,因为这里的区别没有实际意义。比如我们用0,1,2分别代表红,绿,蓝,就不能说“蓝与红”之间的距离比“绿与红”之间的距离远。所以通常情况下,对于一个有D个可能值的离散属性,我们会将其转换成值为0或1的D个二元属性或将每个可能值映射成一个多维向量。但是在这里,因为CHAS本身就是二元属性,所以省去了这个麻烦。
属性的归一化
稍加观察可以发现的另一个事实是,每个维度的属性的取值范围差别很大(如图2所示)。例如,属性B的取值范围是[0.32,
36.90],而属性NOX的取值范围为[0.3850,0.8170]。这里使用了一种常见的操作-规范化。规范化的目标是将每个属性的取值范围缩小到一个相似的区间,比如[-0.5,0.5]。这里我们用一个很常见的运算方法:减去均值,然后除以原值区间。
归一化(或特征缩放)至少有三个原因:数值范围过大或过小都会导致计算中浮点上溢或下溢。
不同的数值范围会导致不同的属性对模型的重要性不同(至少在训练的初始阶段),这种隐含的假设往往是不合理的。这会给优化过程造成困难,大大延长训练时间。
许多机器学习技巧/模型(如L1、L2正则项、向量空间模型-向量空间)
Model)是基于这样的假设,即所有属性值几乎都等于0,并且具有相似的取值范围。
整理训练集与测试集
我们把数据集分成两部分:一部分用来调整模型的参数,也就是训练模型,模型在这个数据集中的误差称为训练误差;另一个用于测试,模型在这个数据集上的误差叫做测试误差。我们训练模型的目的是通过从训练数据中发现规律来预测未知的新数据,所以测试误差是一个更能反映模型性能的指标。数据分割的比例要考虑两个因素:更多的训练数据会降低参数估计的方差,从而得到更可信的模型;但是,更多的测试数据会降低测试误差的方差,从而获得更可靠的测试误差。在本例中,分流比为8:2。
8:2
在更复杂的模型训练过程中,我们经常会用到多一个数据集:验证集。由于复杂模型中往往会有一些超参数需要调整,我们会尝试多个超参数的组合来分别训练多个模型,然后在验证集上比较它们的性能来选择最佳的一组超参数,最后用这组参数下训练的模型在测试集上评估测试误差。由于本章训练的模型比较简单,我们暂且忽略这个过程。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。