「Python」sklearn第一弹-标准化和非线性转化

简介: why?标准化对于大多数数据挖掘算法来说,数据集的标准化是基本要求。这是因为,如果特征不服从或者近似服从标准正态分布(即,零均值、单位标准差的正态分布)的话,算法的表现会大打折扣。

「Python」sklearn第一弹-标准化和非线性转化


标准化


why?标准化


对于大多数数据挖掘算法来说,数据集的标准化是基本要求。这是因为,如果特征不服从或者近似服从标准正态分布(即,零均值、单位标准差的正态分布)的话,算法表现大打折扣


实际上,我们经常忽略数据的分布形状,而仅仅做零均值、单位标准差的处理。在一个机器学习算法的目标函数里的很多元素所有特征都近似零均值,方差具有相同的阶。如果某个特征的方差的数量级大于其它的特征,那么,这个特征可能在目标函数中占主导地位,这使得模型不能从其它特征有效地学习。


Z-score


这种方法基于原始数据的均值mean和标准差standard deviation进行数据的标准化。

将特征A的原始值x使用z-score标准化到x’。


z-score标准化方法适用于特征A的最大值最小值未知的情况,或有超出取值范围的离群数据的情况。将数据按其特征(按列进行)减去其均值,然后除以其方差。最后得到的结果是,对每个特征/每列来说所有数据都聚集在0附近,方差值为1。

数学公式如下:

image.png

函数scale为数组形状的数据集的标准化提供了快捷的实现方式:

from sklearn import preprocessing
import numpy as np
X_train = np.array([[ 1., -1.,  2.],
                    [ 2.,  0.,  0.],
                    [ 0.,  1., -1.]])
X_scaled = preprocessing.scale(X_train)
>>>X_scaled
array([[ 0.  ..., -1.22...,  1.33...],
       [ 1.22...,  0.  ..., -0.26...],
       [-1.22...,  1.22..., -1.06...]])
>>> X_scaled.mean(axis=0) # 均值为0
array([ 0.,  0.,  0.])
>>> X_scaled.std(axis=0) # 标准方差1
array([ 1.,  1.,  1.])

Min-max


Min-max标准化方法是对原始数据进行线性变换。设minA和maxA分别为特征A的最小值和最大值,将A的一个原始值x通过min-max标准化映射成在区间[0,1]中的值x',其公式为:

image.png

通过MinMaxScaler实现:

X_train = np.array([[ 1., -1.,  2.],
                    [ 2.,  0.,  0.],
                    [ 0.,  1., -1.]])
min_max_scaler = preprocessing.MinMaxScaler()
X_train_minmax = min_max_scaler.fit_transform(X_train)
>>> X_train_minmax
array([[ 0.5       ,  0.        ,  1.        ],
      [ 1.        ,  0.5       ,  0.33333333],
      [ 0.        ,  1.        ,  0.        ]])

MaxAbs


MaxAbs通过除以每个特征的最大值将训练数据特征缩放至 [-1, 1] 范围内,这就意味着,训练数据应该是已经零中心化或者是稀疏数据。


公式如下:image.png

X_train = np.array([[ 1., -1.,  2.],
                    [ 2.,  0.,  0.],
                    [ 0.,  1., -1.]])
max_abs_scaler = preprocessing.MaxAbsScaler()
X_train_maxabs = max_abs_scaler.fit_transform(X_train)
>>> X_train_maxabs
array([[ 0.5, -1. ,  1. ],
       [ 1. ,  0. ,  0. ],
       [ 0. ,  1. , -0.5]])

非线性转化


why? 非线性转化就是将特征映射到均匀分布或者高斯分布(正态分布)


均匀分布


相比线性缩放,该方法不受异常值影响,它将数据映射到了零到一的均匀分布上,将最大的数映射为1,最小的数映射为0。其它的数按从小到大的顺序均匀分布在0到1之间,如有相同的数则取平均值。


如数据为np.array([[1],[2],[3],[4],[5]])则经过转换为:np.array([[0],[0.25],[0.5],[0.75],[1]]).

数据为np.array([[1],[2],[9],[10],[2]])则经过转换为:np.array([[0],[0.375],[0.75],[1.0],[0.375]])

1.png

代码调用:

from sklearn.preprocessing import QuantileTransformer
import numpy as np
data = np.array([[1],[2],[3],[4],[5]])
quantile_transformer = QuantileTransformer(random_state=666)
data = quantile_transformer.fit_transform(data)
>>>data
array([[0.  ],
       [0.25],
       [0.5 ],
       [0.75],
       [1.  ]])

高斯分布


映射到高斯分布是为了稳定方差,并最小化偏差。在最新版sklearn 0.20.x中PowerTransformer现在有两种映射方法

  • Yeo-Johnson映射,公式如下:

image.png

from sklearn.preprocessing import PowerTransformer
import numpy as np
data = np.array([[1],[2],[3],[4],[5]])
pt = PowerTransformer(method='box-cox', standardize=False)
data = pt.fit_transform(data)

本文简单的介绍了数据标准化的含义以及非线性转化的方法与理由。相信大家一定对数据预处理有了更加深刻的认识了吧~🤤

相关文章
|
6月前
|
算法 Python
请解释Python中的关联规则挖掘以及如何使用Sklearn库实现它。
使用Python的mlxtend库,可以通过Apriori算法进行关联规则挖掘。首先导入TransactionEncoder和apriori等模块,然后准备数据集(如购买行为列表)。对数据集编码并转换后,应用Apriori算法找到频繁项集(设置最小支持度)。最后,生成关联规则并计算置信度(设定最小置信度阈值)。通过调整这些参数可以优化结果。
152 9
|
6月前
|
Python
请解释Python中的主成分分析(PCA)以及如何使用Sklearn库实现它。
PCA是数据降维工具,Python中可通过Sklearn的PCA类实现。以下是一个简例:导入numpy、PCA和数据集;加载鸢尾花数据,标准化;创建PCA对象,指定降维数(如2);应用PCA转换;最后输出降维结果。此示例展示了如何将数据从高维降至二维。
67 4
|
6月前
|
机器学习/深度学习 数据采集 算法
Python中的支持向量机(SVM)以及如何使用Sklearn库实现它
SVM是监督学习算法,用于分类和回归,Python中可通过Scikit-learn实现。步骤包括数据预处理、选择SVM模型(如线性或非线性,配合核函数)、训练模型找到最优超平面、模型评估、参数调整和新数据预测。Scikit-learn简化了这一流程,便于数据分析任务。
186 3
|
2月前
|
机器学习/深度学习 算法 数据可视化
8种数值变量的特征工程技术:利用Sklearn、Numpy和Python将数值转化为预测模型的有效特征
特征工程是机器学习流程中的关键步骤,通过将原始数据转换为更具意义的特征,增强模型对数据关系的理解能力。本文重点介绍处理数值变量的高级特征工程技术,包括归一化、多项式特征、FunctionTransformer、KBinsDiscretizer、对数变换、PowerTransformer、QuantileTransformer和PCA,旨在提升模型性能。这些技术能够揭示数据中的潜在模式、优化变量表示,并应对数据分布和内在特性带来的挑战,从而提高模型的稳健性和泛化能力。每种技术都有其独特优势,适用于不同类型的数据和问题。通过实验和验证选择最适合的变换方法至关重要。
43 5
8种数值变量的特征工程技术:利用Sklearn、Numpy和Python将数值转化为预测模型的有效特征
|
3月前
|
机器学习/深度学习 前端开发 数据挖掘
基于Python Django的房价数据分析平台,包括大屏和后台数据管理,有线性、向量机、梯度提升树、bp神经网络等模型
本文介绍了一个基于Python Django框架开发的房价数据分析平台,该平台集成了多种机器学习模型,包括线性回归、SVM、GBDT和BP神经网络,用于房价预测和市场分析,同时提供了前端大屏展示和后台数据管理功能。
|
3月前
|
存储 Python
【python】python标准化考试系统[单项选择题 简易版](源码)【独一无二】
【python】python标准化考试系统[单项选择题 简易版](源码)【独一无二】
|
4月前
|
机器学习/深度学习 数据采集 数据可视化
Python实现支持向量机SVM分类模型线性SVM决策过程的可视化项目实战
Python实现支持向量机SVM分类模型线性SVM决策过程的可视化项目实战
111 0
Python实现支持向量机SVM分类模型线性SVM决策过程的可视化项目实战
|
5月前
|
API 项目管理 开发者
PEP是Python改进的关键文档,用于提议新特性和标准化变更
【6月更文挑战第26天】PEP是Python改进的关键文档,用于提议新特性和标准化变更。它们提出功能设计,记录社区决策,建立标准,促进共识,并改进开发流程。PEP是Python不断演进和优化的核心机制,驱动语言的未来发展。**
47 2
|
4月前
|
机器学习/深度学习 算法 Python
【Python】已解决:ModuleNotFoundError: No module named ‘sklearn‘
【Python】已解决:ModuleNotFoundError: No module named ‘sklearn‘
1083 0
|
6月前
|
数据可视化 Python
请解释Python中的线性回归分析以及如何使用Sklearn库实现它。
【4月更文挑战第22天】使用Python的Sklearn库进行线性回归分析,包括7个步骤:导入库、准备数据、划分训练测试集、创建模型、训练、预测和评估。示例代码创建了一个简单的数据集,应用线性回归模型,计算了Mean Squared Error和R² Score,并展示了预测结果与实际值的可视化对比。
49 11