数据预处理:标准化、正则化、最大最小归一化、绝对值标准化

文章展示了使用Scikit-Learn库进行数据预处理的不同方法,包括标准化、最大最小归一化、MaxAbs归一化、正则化和Robust归一化。每种方法都有其优缺点,适用于不同的数据分布和场景。例如,标准化将数据转换为标准正态分布,而Robust归一化则更适用于包含异常值的数据集。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://scikit-learn.org/stable/modules/preprocessing.html

标准化

公式请添加图片描述

优点:适用大多数类型的数据,标准化之后的数据是以0为均值,方差为1的正态分布
缺点 :是一种中心化方法,会改变原有数据得分布结构
转换区间:均值为0,方差为1的标准正态分布
适用场景:不适合用于稀疏数据的处理


import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import preprocessing

def plot(data, title):
    sns.set_style('dark')
    f, ax = plt.subplots()
    ax.set(ylabel='frequency')
    ax.set(xlabel='height(blue) / weight(green)')
    ax.set(title=title)
    sns.distplot(data[:, 0:1], color='blue')
    sns.distplot(data[:, 1:2], color='green')
    plt.savefig(title + '.png')
    plt.show()

np.random.seed(42)
height = np.random.normal(loc=168, scale=5, size=1000).reshape(-1, 1)
weight = np.random.normal(loc=70, scale=10, size=1000).reshape(-1, 1)

original_data = np.concatenate((height, weight), axis=1)
plot(original_data, 'Original')

standard_scaler_data = preprocessing.StandardScaler().fit_transform(original_data)
plot(standard_scaler_data, 'StandardScaler')

在这里插入图片描述

最大最小归一化

公式请添加图片描述

优点:应用广泛,能较好的保持原有数据分布结构
缺点 :.对异常值(离群值)的存在非常敏感
转换区间:[0,1]
适用场景:不适合用于稀疏数据的处理


import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import preprocessing

def plot(data, title):
    sns.set_style('dark')
    f, ax = plt.subplots()
    ax.set(ylabel='frequency')
    ax.set(xlabel='height(blue) / weight(green)')
    ax.set(title=title)
    sns.distplot(data[:, 0:1], color='blue')
    sns.distplot(data[:, 1:2], color='green')
    plt.savefig(title + '.png')
    plt.show()

np.random.seed(42)
height = np.random.normal(loc=168, scale=5, size=1000).reshape(-1, 1)
weight = np.random.normal(loc=70, scale=10, size=1000).reshape(-1, 1)

original_data = np.concatenate((height, weight), axis=1)
plot(original_data, 'Original')

standard_scaler_data = preprocessing.MinMaxScaler().fit_transform(original_data)
plot(standard_scaler_data, 'StandardScaler')

在这里插入图片描述

MaxAbs归一化

公式请添加图片描述

优点:保持原有数据分布结构
缺点 :.对异常值(离群值)的存在非常敏感
转换区间:[-1,1]
适用场景:稀疏数据、稀疏CSR或CSC矩阵


import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import preprocessing

def plot(data, title):
    sns.set_style('dark')
    f, ax = plt.subplots()
    ax.set(ylabel='frequency')
    ax.set(xlabel='height(blue) / weight(green)')
    ax.set(title=title)
    sns.distplot(data[:, 0:1], color='blue')
    sns.distplot(data[:, 1:2], color='green')
    plt.savefig(title + '.png')
    plt.show()

np.random.seed(42)
height = np.random.normal(loc=168, scale=5, size=1000).reshape(-1, 1)
weight = np.random.normal(loc=70, scale=10, size=1000).reshape(-1, 1)

original_data = np.concatenate((height, weight), axis=1)
plot(original_data, 'Original')

standard_scaler_data = preprocessing.MinMaxScaler().fit_transform(original_data)
plot(standard_scaler_data, 'StandardScaler')

在这里插入图片描述

正则化

公式请添加图片描述 其中请添加图片描述

优点:单向量上来实现这正则化的功能
缺点 :.
转换区间
适用场景:经常被使用在分类与聚类中。


import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import preprocessing

def plot(data, title):
    sns.set_style('dark')
    f, ax = plt.subplots()
    ax.set(ylabel='frequency')
    ax.set(xlabel='height(blue) / weight(green)')
    ax.set(title=title)
    sns.distplot(data[:, 0:1], color='blue')
    sns.distplot(data[:, 1:2], color='green')
    plt.savefig(title + '.png')
    plt.show()

np.random.seed(42)
height = np.random.normal(loc=168, scale=5, size=1000).reshape(-1, 1)
weight = np.random.normal(loc=70, scale=10, size=1000).reshape(-1, 1)

original_data = np.concatenate((height, weight), axis=1)
plot(original_data, 'Original')

standard_scaler_data = preprocessing.Normalizer().fit_transform(original_data)
plot(standard_scaler_data, 'StandardScaler')

在这里插入图片描述

Robust归一化

公式请添加图片描述Q代表分位数

优点:能最大限度地保留数据集中的异常(离群点)
缺点 :.
转换区间
适用场景:最大限度保留数据集中的异常(离群值)


import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import preprocessing

def plot(data, title):
    sns.set_style('dark')
    f, ax = plt.subplots()
    ax.set(ylabel='frequency')
    ax.set(xlabel='height(blue) / weight(green)')
    ax.set(title=title)
    sns.distplot(data[:, 0:1], color='blue')
    sns.distplot(data[:, 1:2], color='green')
    plt.savefig(title + '.png')
    plt.show()

np.random.seed(42)
height = np.random.normal(loc=168, scale=5, size=1000).reshape(-1, 1)
weight = np.random.normal(loc=70, scale=10, size=1000).reshape(-1, 1)

original_data = np.concatenate((height, weight), axis=1)
plot(original_data, 'Original')

standard_scaler_data = preprocessing.RobustScaler().fit_transform(original_data)
plot(standard_scaler_data, 'RobustScaler')

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值