机器学习常见数据处理方法

序言

许多机器学习算法都会对数据做出假设。它通常是一个非常好的以这种方式准备数据的想法,以最好地将问题的结构暴露给我们打算使用机器学习的算法。

介绍

机器学习数据准备阶段的四个操作:数据缩放(Rescale data)、数据标准化(Standardize data)、数据规范化(Normalize data)和数据二值化(Binarize data)。下面系列操作应该根据需要进行适当裁剪。

1. 数据缩放:使用MinMaxScaler将数据缩放到0到1之间。

2. 数据标准化:使用StandardScaler将数据标准化,使其均值为0,标准差为1。

3. 数据规范化:使用Normalizer将每个样本独立规范化,使其范数为1。

4. 数据二值化:使用Binarizer将数据二值化,使其取值为0或1。

案例源码分享

首先读取数据文件,然后修改列名,将数据转换为数组,并将输入和输出数据分开。接下来,分别对输入数据进行数据缩放、标准化、规范化和二值化操作,并打印出每个操作后的数据。

# coding: utf-8
"""
准备数据阶段
1. Rescale data
2. Standardize data
3. Normalize data
4. Binarize data
"""
from pathlib import Path
import pandas as pd
from numpy import set_printoptions
from sklearn.preprocessing import MinMaxScaler, StandardScaler, Normalizer, Binarizer
import matplotlib.pyplot as plt
plt.rcParams['figure.figsize'] = (3, 3) #(10, 6)

# 读取数据文件
filename = Path(__file__).parent / 'data/pima-indians-diabetes.csv'
data = pd.read_csv(filename)

# 修改列名以便于理解和后续分析
column_names = {'Pregnancies': 'pregnant_times',
                 'Glucose': 'glucose',
                 'BloodPressure': 'blood_pressure',
                 'SkinThickness': 'skin_thickness',
                 'Insulin': 'insulin',
                 'BMI': 'BMI',
                 'DiabetesPedigreeFunction': 'DPF',
                 'Age': 'age',
                 'Outcome': 'outcome'}
data.rename(columns=column_names, inplace=True)
array = data.values
print(array)
# Separate array into input and output components
X = array[:, 0:8]
Y = array[:, 8]

"""
该代码段展示了如何使用scikit-learn库中的MinMaxScaler类对数据进行归一化处理。
归一化是将数据缩放到统一的尺度范围内的一个预处理步骤,对于许多机器学习算法来说是非常重要的。
特别是当数据集中的特征具有不同的量纲和尺度时,归一化能够使得算法表现更加稳定和高效。

参数:
- X: 需要进行归一化处理的数据集,它应该是一个二维数组,每一行代表一个样本,每一列代表一个特征。

返回值:
- rescaledX: 归一化处理后得到的数据集,其特征范围被缩放到0到1之间。
"""
# 初始化MinMaxScaler对象,设定特征范围为0到1
scaler = MinMaxScaler(feature_range=(0, 1))

# 对数据X进行归一化处理
rescaledX = scaler.fit_transform(X)

# 设置打印选项,以三位小数的精度显示结果
set_printoptions(precision=3)

# 打印归一化后的数据集的前6行
print("Rescaled Data:\n", rescaledX[0:6, :])


# Standardize Data
"""
该代码块用于对数据进行标准化处理。
标准化是通过移除数据的均值并缩放到单位方差来实现的。具体地,对于一个样本x,
其标准化得分z计算公式为:z = (x - u) / s,
其中u为训练样本的均值,s为训练样本的标准差。

参数:
- X: 待处理的数据集。

返回值:
- standardizedX: 标准化处理后的数据集。
"""
# 初始化标准化处理器并拟合数据集X
standard_scaler = StandardScaler().fit(X)
# 对数据集X进行标准化处理
standardizedX = standard_scaler.transform(X)
# 设置打印选项以控制输出精度
set_printoptions(precision=3)
# 打印标准化后的数据集的前6行
print("Standardized Data:\n", standardizedX[0:6, :])

# Normalize Data
"""
该段代码用于对数据进行标准化处理。
标准化处理是将样本独立地调整为单位范数。即对数据集中的每个样本(即数据矩阵的每行),如果有至少一个非零组件,就会独立地进行重新缩放。
缩放的依据是数据集中范数最大的行向量。

参数:
- X: 待处理的数据矩阵,其中每一行代表一个样本。

返回值:
- normalizedX: 标准化处理后的数据矩阵。
"""
# 训练正常化器并应用到数据上
normalizer_scaler = Normalizer().fit(X)
normalizedX = normalizer_scaler.transform(X)

# 设置打印选项以显示三位小数
set_printoptions(precision=3)
# 打印前6个样本的标准化结果
print("Normalized Data:\n", normalizedX[0:6, :])

# Binarize Data
"""
该代码块用于二值化数据。二值化是指将数据转换为只有两个值(如0和1)的过程。
这在逻辑回归(设置阈值为0.0)或使神经网络的输出范围在[0, 1]之间(设置阈值为0.5)时非常有用。

参数:
- X: 待二值化的数据集。
- threshold: 二值化的阈值。如果元素大于等于该阈值,则二值化结果为1;否则为0。

返回值:
- binarizedX: 二值化后的新数据集。
"""
# 创建Binarizer实例并设置阈值为0.0,然后拟合数据X
binarizer = Binarizer(threshold=0.0).fit(X)
# 对数据X进行二值化处理
binarizedX = binarizer.transform(X)
# 设置打印选项,以三位小数的精度显示结果
set_printoptions(precision=3)
# 打印前6行二值化后的数据
print("Binarized Data:\n", binarizedX[0:6, :])

# 输出(略)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绎岚科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值