scikit-learn中的归一化、标准化处理

本文深入解析归一化和标准化在机器学习中的应用,解释如何通过归一化将数据缩放到0到1的范围内,以及标准化如何使数据均值为0,方差为1,提升算法性能。

什么是归一化:

归一化就是把一组数(大于1)化为以1为最大值,0为最小值,其余数据按百分比计算的方法。如:1,2,3.,那归一化后就是:0,0.5,1

归一化步骤:

如:2,4,6

(1)找出一组数里的最小值和最大值,然后就算最大值和最小值的差值

min = 2;  max = 6; r = max - min = 4

(2)数组中每个数都减去最小值

2,4,6 变成 0,2,4

(3)再除去差值r

0,2,4 变成 0,0.5,1 ,就得出归一化后的数组了

机器学习中归一化与标准化处理。

      在大多数的机器学习算法和优化算法中,将特征值缩放到相同区间可以使得获取性能更好的模型。就梯度下降算法而言,例如有两个不同的特征,第一个特征的取值范围为1~10,第二个特征的取值范围为1~10000。在梯度下降算法中,代价函数为最小平方误差函数,所以在使用梯度下降算法的时候,算法会明显的偏向于第二个特征,因为它的取值范围更大。在比如,k近邻算法,它使用的是欧式距离,也会导致其偏向于第二个特征。对于决策树和随机森林以及XGboost算法而言,特征缩放对于它们没有什么影响。

python具体用法如下:归一化和归一化还原值(反归一化)

import pandas as pd
from sklearn.preprocessing import MinMaxScaler
 
if __name__ == "__main__":
    #读取葡萄酒数据集
    data = pd.read_csv("G:/dataset/wine.csv")
    #获取第二列Alcohol
    x =data["Alcohol"]
    #获取数据的基本情况
    print(x.describe())
    minMax = MinMaxScaler()
    #将数据进行归一化
    x_std = minMax.fit_transform(x)
#归一化还原
    origin_data = minMax.inverse_transform(x_std )
    print(x_std)

标准化(standardization)

标准化比归一化要更加实用,因为像逻辑斯蒂回归和支持向量机算法,刚开始训练的时候会将参数初始化为0或趋于0的随机极小值,如果是标准化的数据(均值为0,方差为1)对于它们而言,这更加容易利于权重的更新。将特征列标准化的计算公式如下:标准化和标准化还原。

import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import StandardScaler
 
if __name__ == "__main__":
    # 读取葡萄酒数据集
    data = pd.read_csv("G:/dataset/wine.csv")
    # 获取第二列Alcohol
    x = data["Alcohol"]
    std = StandardScaler()
    #将x进行标准化
    x_std = std.fit_transform(x)
    #归一化还原
    origin_data = std.inverse_transform(x_std )
    print(x_std)


 

scikit-learn 中,数据归一化是常见的预处理步骤,通常用于将不同尺度的特征统一到相同范围内,以提升模型的性能和收敛速度。scikit-learn 提供了多种归一化方法,主要通过 `sklearn.preprocessing` 模块实现。 ### 归一化方法及 API #### 1. `MinMaxScaler` 该方法将特征缩放到指定的最小值和最大值之间(默认为 0 到 1),适用于分布不均但无明显异常值的数据集。 ```python from sklearn.preprocessing import MinMaxScaler import numpy as np data = np.array([[1, 2], [2, 4], [3, 6]]) scaler = MinMaxScaler() scaled_data = scaler.fit_transform(data) ``` #### 2. `StandardScaler` 该方法对数据进行标准化,使其均值为 0,方差为 1,适用于数据分布近似正态的情况。 ```python from sklearn.preprocessing import StandardScaler scaler = StandardScaler() scaled_data = scaler.fit_transform(data) ``` #### 3. `Normalizer` 该方法对样本进行归一化,使每个样本的 L2 范数为 1,适用于基于距离的模型(如 KNN 或 SVM)。 ```python from sklearn.preprocessing import Normalizer normalizer = Normalizer(norm='l2') normalized_data = normalizer.transform(data) ``` #### 4. `RobustScaler` 该方法使用中位数和四分位距进行缩放,对异常值不敏感,适用于含有离群点的数据。 ```python from sklearn.preprocessing import RobustScaler scaler = RobustScaler() scaled_data = scaler.fit_transform(data) ``` 这些归一化方法均实现了统一的 API,支持 `fit`、`transform` 和 `fit_transform` 操作,便于在数据处理流程中集成[^3]。 ### 使用注意事项 - 在训练集上进行 `fit`,然后在测试集上仅使用 `transform`,以防止数据泄露。 - 对于稀疏矩阵,某些归一化方法(如 `StandardScaler`)支持稀疏输入,但需指定 `with_mean=False`。 - 在使用 `Pipeline` 时,可将归一化步骤与模型训练步骤组合,提高代码可读性和复用性。 ### 示例:结合线性回归使用归一化 ```python from sklearn.linear_model import LinearRegression from sklearn.pipeline import make_pipeline pipeline = make_pipeline(MinMaxScaler(), LinearRegression()) pipeline.fit(X_train, y_train) y_pred = pipeline.predict(X_test) ``` 此方式可确保在训练和预测阶段归一化操作的一致性,避免手动处理带来的误差[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值