机器学习测试笔记(16)——数据处理

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 机器学习测试笔记(16)——数据处理

1.数据处理的重要性


对于机器学习,选择一个好的算法是非常有用的,另外对测试集和训练集的数据进行处理也是非常重要的。通常情况下是为了消除量纲的影响。譬如一个百分制的变量与一个5分值的变量在一起怎么比较?只有通过数据标准化,都把它们标准到同一个标准时才具有可比性,一般标准化采用的是Z标准化,即均值为0,方差为1。当然也有其他标准化,比如0——1标准化等,可根据自己的数据分布情况和模型来选择。


那什么情况下需要对数据进行处理呢?主要看模型是否具有伸缩不变性。不是所有的模型都一定需要标准化,有些模型对量纲不同的数据比较敏感,比如SVM等。当各个维度进行不均匀伸缩后,最优解与原来不等价,这样的模型,除非原始数据的分布范围本来就不叫接近,否则必须进行标准化,以免模型参数被分布范围较大或较小的数据主导。但是如果模型在各个维度进行不均匀伸缩后,最优解与原来等价,例如logistic regression等,对于这样的模型,是否标准化理论上不会改变最优解。但是,由于实际求解往往使用迭代算法,如果目标函数的形状太“扁”,迭代算法可能收敛得很慢甚至不收敛。所以对于具有伸缩不变性的模型,最好也进行数据标准化。


标准化分为:RescalingNormalizingStandardizing,如下表所示:


名称

中文名

解释

Rescaling

重缩放/归一化

通常是指增加或者减少一个常数,然后乘以/除以一个常数,来改变数据的衡量单位。例如:将温度的衡量单位从摄氏度转化为华氏温度。

Normalizing

正则化

通常是指除以向量的范数。例如:将一个向量的欧氏长度等价于1。在神经网络中,"正则化"通常是指将向量的范围重缩放至最小化或者一定范围,使所有的元素都在[0,1]范围内。通常用于文本分类或者文本聚类中。

Standardizing

标准化

通常是为了消除不同属性或样方间的不齐性,使同一样方内的不同属性间或同一属性在不同样方内的方差减小。例如:如果一个向量包含高斯分布的随机值,你可能会通过除以标准偏差来减少均值,然后获得零均值单位方差的"标准正态"随机变量。


一般来说,提供以下方法来做标准化:

  • StandardScaler:计算训练集的平均值和标准差,以便测试数据集使用相同的变换。

提供以下方法来做归一化(将数据特征缩放至某一范围(scalingfeatures to a range)):

  • MinMaxScaler:将数据缩放至给定的最小值与最大值之间,通常是0与1之间。
  • MaxAbsScale:将最大的绝对值缩放至单位大小(数据集的标准差非常非常小,有时数据中有很多很多零(稀疏数据)需要保存住0元素)。
  • 中方法实现


from sklearn.datasets import make_blobs
# 导入画图工具
import matplotlib.pyplot as plt
# 导入数据划分模块、分为训练集和测试集
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
def my_preprocessing ():
# 产生40个新样本,分成2类,随机生成器的种子为8, 标准差为2
    X,y =make_blobs(n_samples=40,centers=2, random_state=5,cluster_std=2)
#将数据集用散点图方式进行可视化分析
   plt.scatter(X[:,0],X[:,1],c=y,cmap=plt.cm.cool)
    plt.show()

image.png


上面未做处理, x区间:(-12,0)y区间:(5,13)。现在我们使用StandardScaler进行处理。


#使用StandardScaler进行处理
x_1 =StandardScaler().fit_transform(X)
    plt.scatter(x_1[:,0],x_1[:,1],c=y,cmap=plt.cm.cool)
   plt.title("StandardScaler")
    plt.show()


处理后x区间:(-3,3)y轴:(-2,3)StandardScaler原理:将所有数据转换为均值为0,方差为1的状态。


2.2MinMaxScaler

from sklearn.preprocessing import MinMaxScaler
    x_2 = MinMaxScaler().fit_transform(X)
    plt.scatter(x_2[:,0],x_2[:,1],c=y,cmap=plt.cm.cool)
   plt.title("MinMaxScaler")
    plt.show()

image.png


x区间:(0,1)y轴:(0,1)MinMaxScaler原理:将所有数据压缩到长宽都是1的方块中去。

X_std = (X -X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0)) ;

X_scaler =X_std/ (max - min) + min


2.3RobustScaler

from sklearn.preprocessing import RobustScaler
    x_3 =RobustScaler().fit_transform(X)
    plt.scatter(x_3[:,0],x_3[:,1],c=y,cmap=plt.cm.cool)
   plt.title("RobustScale")
    plt.show()

image.png


x区间:(-3,2)y轴:(-1,2.0)。如果数据有离群点,对数据进行均差和方差的标准化效果并不好。这种情况可以使用RobustScaler 作为替代。它们有对数据中心化和数据的缩放鲁棒性更强的参数。


2.4Normalizer

 

from sklearn.preprocessing import Normalizer
    x_4 =Normalizer().fit_transform(X)
    plt.scatter(x_4[:,0],x_4[:,1],c=y,cmap=plt.cm.cool)
    plt.title("Normalizer")
    plt.show()

image.png


x区间:(-0.9,-0.1)y轴:(-0.5,1.0)Normalizer原理:把特征向量变成一个半径为1的圆或球(保留特征向量忽略数值)。


2.5 MaxAbsScaler、QuantileTransformer、Binarizer

from sklearn.preprocessing import MaxAbsScaler
from sklearn.preprocessing import QuantileTransformer
from sklearn.preprocessing import Binarizer
    x_5 =MaxAbsScaler().fit_transform(X)
    plt.scatter(x_5[:,0],x_5[:,1],c=y,cmap=plt.cm.cool)
   plt.title("MaxAbsScaler")
    plt.show()
    x_6 =QuantileTransformer().fit_transform(X)
    plt.scatter(x_6[:,0],x_6[:,1],c=y,cmap=plt.cm.cool)
   plt.title("QuantileTransformer")
    plt.show()
    x_7 =Binarizer().fit_transform(X)
    plt.scatter(x_7[:,0],x_7[:,1],c=y,cmap=plt.cm.cool)
   plt.title("Binarizer")
    plt.show()

  image.png


3.数据处理函数介绍


3.1fit()transform()fit_transform()fit_transform(trainData)区别

 

函数

意义

fit()

求得训练集X的均值,方差,最大值,最小值,这些训练集X固有的属性。

transform()

fit的基础上,进行标准化,降维,归一化等操作(看具体用的是哪个工具,如PCAStandardScaler等)。

fit_transform()

fit_transformfittransform的组合,既包括了训练又包含了转换。
transform()fit_transform()二者的功能都是对数据进行某种统一处理(比如标准化~N(0,1),将数据缩放(映射)到某个固定区间,归一化,正则化等)

fit_transform(trainData)

对部分数据先拟合fit,找到该part的整体指标,如均值、方差、最大值最小值等等(根据具体转换的目的),然后对该trainData进行转换transform,从而实现数据的标准化、归一化等等。


3.2 sklearn.preprocessing.StandardScaler

含义:标准化缩放

格式:

sklearn.preprocessing.StandardScaler(copy=True,with_mean=True, with_std=True)


参数

解释

copy

如果为false,就会用归一化的值替代原来的值;如果被标准化的数据不是np.arrayscipy.sparse CSR matrix, 原来的数据还是被copy而不是被替代

 with_std

boolean类型,默认为True,表示将数据方差规范到1

with_mean

boolean类型,默认为True,表示将数据均值规范到0


这里是用于做标准化,将数据的方差规范到1,均值规范到0,实际上就是标准正态分布的方差和均值。

方差:                            

均值:平均数


3.3 sklearn.preprocessing.MinMaxScaler

含义:最小最大值标准化

格式:

sklearn.preprocessing.MinMaxScaler(feature_range=(0,1), copy=True)


参数

解释

feature_range

为元组类型,范围某认为:[01],也可以取其他范围值。

copy

为拷贝属性,默认为True,表示对原数据组拷贝操作,这样变换后元数组不变,False示变换操作后,原数组也跟随变化,相当于c++中的引用或指针。


3.4 sklearn.preprocessing.RobustScaler

含义:使用对异常值鲁棒的统计信息来缩放特征。这个标量去除中值,并根据分位数范围(默认为IQR即四分位数范围)对数据进行缩放。IQR是第1个四分位数(25分位数)和第3个四分位数(75分位数)之间的范围。

格式:

sklearn.preprocessing.RobustScaler(with_centering,with_scaling,copy=True)


参数

解释

with_centering

boolean类型,默认为True。如果为真,在缩放前将数据居中。这将导致“转换”在尝试处理稀疏矩阵时引发异常,因为围绕它们需要构建一个密集的矩阵,在常见的用例中,这个矩阵可能太大而无法装入内存。

with_scaling

boolean类型,默认为True。如果为真,将数据缩放到四分位范围。quantile_range:元组(q_min, q_max) 0.0 < q_min < q_max < 100.0。默认:(25.0,75.0)=(1分位数,第3分位数)= IQR。用于计算' ' scale_ ' '的分位数范围。

copy 

 boolean类型,可选,默认为真。如果为False,则尽量避免复制,而改为就地缩放。这并不能保证总是有效的;例如,如果数据不是一个NumPy数组或scipy。稀疏CSR矩阵,仍可返回副本。

属性

解释

center_

浮点数数组。训练集中每个特征的中值。

scale_

浮点数数组。训练集中每个特征的(缩放的)四分位范围。


3.5 sklearn.preprocessing.Normalizer

含义:该函数归一化输入数组使它的范数或者数值范围在一定的范围内。

格式:

sklearn.preprocessing.Normalize(InputArraysrc,OutputArray dst, double alpha=1, doublebeta=0, int norm_type=NORM_L2, intdtype=-1, InputArray mask=noArray() )


参数

解释

src

输入数组

dst

输出数组,支持原地运算

alpha

range normalization模式的最小值

beta

range normalization模式的最大值,不用于norm normalization(范数归一化)模式。

normType

归一化的类型,可以有以下的取值:

NORM_MINMAX

数组的数值被平移或缩放到一个指定的范围,线性归一化,一般较常用。

NORM_INF

此类型的定义没有查到,根据OpenCV 1的对应项,可能是归一化数组的C-范数(绝对值的最大值)

NORM_L1

归一化数组的L1-范数(绝对值的和)

NORM_L2

归一化数组的(欧几里德)L2-范数

dtype

dtype为负数时,输出数组的type与输入数组的type相同;否则,输出数组与输入数组只是通道数相同,而tpye=CV_MAT_DEPTH(dtype).

mask

操作掩码,用于指示函数是否仅仅对指定的元素进行操作。


3.6 sklearn.preprocessing.MaxAbsScaler

含义:该函数为绝对值最大标准化

格式:

sklearn.preprocessing.Normalize(feature_range,copy )


参数

解释

feature_range

tuple (min,  max),默认值=(0,1),所需的转换数据范围。

copy 

布尔值,可选,默认为真,设置为False执行插入行规范化并避免复制(如果输入已经是numpy数组)

属性

解释

min_

ndarray,  shape (n_features),每个功能调整为最小。

scale_

ndarray,  shape (n_features) ,每个特征数据的相对缩放。

data_min_

ndarray,  shape (n_features) ,每个特征在数据中出现的最小值

data_max_

ndarray,  shape (n_features) ,每个特征在数据中出现的最大值

data_range_

ndarray,  shape (n_features) ,在数据中看到的每个特性范围 (data_max_ - data_min_)


3.7 sklearn.preprocessing.QuantileTransformer

格式:

sklearn.preprocessing.QuantileTransformer(*,n_quantiles=1000, output_distribution='uniform', ignore_implicit_zeros=False,subsample=100000, random_state=None, copy=True)


参数

解释

n_quantiles

int,默认值=1000n_samplesNumber要计算的分位数。它对应于用于离散累积分布函数的地标数。如果n_quantiles数大于样本数,则n_quantiles分位数被设置为样本数,因为较大的分位数不能给出累积分布函数估计的更好近似。

output_distribution

{'uniform', 'normal'}, 默认='uniform'转换数据的边界分布。选项为'uniform''normal'

ignore_implicit_zeros

布尔值, 默认=False,仅适用于稀疏矩阵。如果为True,则丢弃矩阵的稀疏项以计算分位数统计。如果为False,这些条目将被视为零。

subsample

int,默认=1e5,用于估计分位数以提高计算效率的最大样本数。注意,对于值相同的稀疏矩阵和密集矩阵,子采样过程可能不同。

random_state

int, RandomState instanceNonedefault=None确定子采样和平滑噪波的随机数生成。更多细节请参见子样本。在多个函数调用之间传递int以获得可再现的结果。

copy

布尔值,默认=True,设置为False以执行就地转换并避免复制(如果输入已经是numpy数组)。

属性

解释

n_quantiles_

Int 用于离散累积分布函数的实际分位数。

quantiles_

ndarray of shape (n_quantiles, n_features),与参考分位数相对应的值。

references_

ndarray of shape (n_quantiles, )参考分位数


3.8 sklearn.preprocessing.Binarizer

格式:

sklearn.preprocessing.Binarizer(threshold,copy)


参数

解释

threshold

浮点数,可选。小于或等于阈值的值映射到0,否则映射到1

copy 

布尔值,如果设置为False,则会避免复制。默认情况下为True


 

4. 数据处理的重要性


下面我们来看一下数据处理的重要性。


from sklearn.neural_network import MLPClassifier
from sklearn import datasets
def sklearn_for_Nerver():
       wine =datasets.load_wine()
       X_train,X_test,y_train,y_test= train_test_split(wine.data,wine.target,random_state=62)
       mlp =MLPClassifier(hidden_layer_sizes=[100],max_iter=4000,random_state=62)
       mlp.fit(X_train,y_train)
       print("改造前训练模型得分{:.2%}".format(mlp.score(X_train,y_train)))
       print("改造前测试模型得分{:.2%}".format(mlp.score(X_test,y_test)))
       scaler = MinMaxScaler()
       scaler.fit(X_train)
       X_train_pp =scaler.transform(X_train)
       X_test_pp =scaler.transform(X_test)
       mlp.fit(X_train_pp,y_train)
       print("改造后训练模型得分{:.2%}".format(mlp.score(X_train_pp,y_train)))
       print("改造后测试模型得分{:.2%}".format(mlp.score(X_test_pp,y_test)))


输出

改造前训练模型得分62.41%
改造前测试模型得分48.89%
改造后训练模型得分100.00%
改造后测试模型得分100.00%


大家可以看到改造以后的模型得分得到了显著的上升。

   

—————————————————————————————————


软件安全测试

https://study.163.com/course/courseMain.htm?courseId=1209779852&share=2&shareId=480000002205486

接口自动化测试

https://study.163.com/course/courseMain.htm?courseId=1209794815&share=2&shareId=480000002205486

DevOps 和Jenkins之DevOps

https://study.163.com/course/courseMain.htm?courseId=1209817844&share=2&shareId=480000002205486

DevOps与Jenkins 2.0之Jenkins

https://study.163.com/course/courseMain.htm?courseId=1209819843&share=2&shareId=480000002205486

Selenium自动化测试

https://study.163.com/course/courseMain.htm?courseId=1209835807&share=2&shareId=480000002205486

性能测试第1季:性能测试基础知识

https://study.163.com/course/courseMain.htm?courseId=1209852815&share=2&shareId=480000002205486

性能测试第2季:LoadRunner12使用

https://study.163.com/course/courseMain.htm?courseId=1209980013&share=2&shareId=480000002205486

性能测试第3季:JMeter工具使用

https://study.163.com/course/courseMain.htm?courseId=1209903814&share=2&shareId=480000002205486

性能测试第4季:监控与调优

https://study.163.com/course/courseMain.htm?courseId=1209959801&share=2&shareId=480000002205486

Django入门

https://study.163.com/course/courseMain.htm?courseId=1210020806&share=2&shareId=480000002205486

啄木鸟顾老师漫谈软件测试

https://study.163.com/course/courseMain.htm?courseId=1209958326&share=2&shareId=480000002205486

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
2月前
|
机器学习/深度学习 JSON 算法
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-Seg模型进行图像分割的完整流程,包括图像分割的基础知识、YOLOv5-Seg模型的特点、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。通过实例代码,指导读者从自定义数据集开始,直至模型的测试验证,适合深度学习领域的研究者和开发者参考。
671 3
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
|
2月前
|
测试技术
自动化测试项目实战笔记(三):测试用户注册(验证码错误,成功,出现弹框时处理)
本文是关于自动化测试项目实战笔记,主要介绍了如何测试用户注册功能,包括验证码错误、注册成功以及弹框处理的测试步骤和代码实现。
106 2
自动化测试项目实战笔记(三):测试用户注册(验证码错误,成功,出现弹框时处理)
|
2月前
|
机器学习/深度学习 弹性计算 自然语言处理
前端大模型应用笔记(二):最新llama3.2小参数版本1B的古董机测试 - 支持128K上下文,表现优异,和移动端更配
llama3.1支持128K上下文,6万字+输入,适用于多种场景。模型能力超出预期,但处理中文时需加中英翻译。测试显示,其英文支持较好,中文则需改进。llama3.2 1B参数量小,适合移动端和资源受限环境,可在阿里云2vCPU和4G ECS上运行。
112 1
|
2月前
|
人工智能 算法 测试技术
自动化测试项目实战笔记(二):解决验证码识别问题
这篇文章介绍了三种自动化测试中验证码识别的方法:使用Python的pytesseract和PIL模块、利用第三方API如万维易源,以及使用开源的ddddocr库,还提到了一些注意事项,比如如何获取验证码区域的截图。
82 2
|
2月前
|
机器学习/深度学习 计算机视觉 Python
模型预测笔记(三):通过交叉验证网格搜索机器学习的最优参数
本文介绍了网格搜索(Grid Search)在机器学习中用于优化模型超参数的方法,包括定义超参数范围、创建参数网格、选择评估指标、构建模型和交叉验证策略、执行网格搜索、选择最佳超参数组合,并使用这些参数重新训练模型。文中还讨论了GridSearchCV的参数和不同机器学习问题适用的评分指标。最后提供了使用决策树分类器进行网格搜索的Python代码示例。
107 1
|
2月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
71 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
2月前
|
机器学习/深度学习 并行计算 数据可视化
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用PaddleClas框架完成多标签分类任务,包括数据准备、环境搭建、模型训练、预测、评估等完整流程。
122 0
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
|
2月前
|
机器学习/深度学习 JSON 算法
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
本文介绍了DeepLab V3在语义分割中的应用,包括数据集准备、模型训练、测试和评估,提供了代码和资源链接。
243 0
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
|
2月前
|
机器学习/深度学习 数据采集 算法
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
这篇博客文章介绍了如何使用包含多个网络和多种训练策略的框架来完成多目标分类任务,涵盖了从数据准备到训练、测试和部署的完整流程,并提供了相关代码和配置文件。
62 0
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
|
2月前
|
测试技术 数据安全/隐私保护 Python
自动化测试项目实战笔记(四):测试用户登录(账号密码错误,成功,出现弹框等情况)
本文介绍了使用Selenium进行自动化测试时如何测试用户登录的不同情况,包括账号密码错误、登录成功以及处理登录时出现的弹框,并提供了相应的Python代码实现。
75 0
自动化测试项目实战笔记(四):测试用户登录(账号密码错误,成功,出现弹框等情况)