- Python AI 教程
- 首页
- Python AI – 基础概念
- Python AI – 入门指南
- Python AI – 机器学习
- Python AI – 数据准备
- 监督学习:分类
- 监督学习:回归
- Python AI – 逻辑编程
- 无监督学习:聚类
- 自然语言处理
- Python AI – NLTK 包
- 分析时间序列数据
- Python AI – 语音识别
- Python AI – 启发式搜索
- Python AI – 游戏
- Python AI – 神经网络
- 强化学习
- Python AI – 遗传算法
- Python AI – 计算机视觉
- Python AI – 深度学习
- Python AI 资源
- Python AI – 快速指南
- Python AI – 有用资源
- Python AI – 讨论
Python AI – 数据准备
我们已经学习了监督和无监督机器学习算法。这些算法需要格式化的数据才能开始训练过程。我们必须以某种方式准备或格式化数据,以便将其作为输入提供给机器学习算法。
本章重点介绍机器学习算法的数据准备。
数据预处理
在日常生活中,我们处理大量数据,但这些数据都是原始形式。为了将数据作为机器学习算法的输入,我们需要将其转换为有意义的数据。这就是数据预处理发挥作用的地方。换句话说,在将数据提供给机器学习算法之前,我们需要对其进行预处理。
数据预处理步骤
按照以下步骤在 Python 中预处理数据:
步骤 1 - 导入有用的包 - 如果我们使用 Python,那么这将是将数据转换为特定格式(即预处理)的第一步。它可以按如下方式完成:
import numpy as np import sklearn.preprocessing
在这里,我们使用了以下两个包:
NumPy - NumPy 本质上是一个通用的数组处理包,旨在有效地操作任意记录的大型多维数组,而不会在处理小型多维数组时牺牲太多速度。
Sklearn.preprocessing - 此包提供了许多常用的实用程序函数和转换器类,用于将原始特征向量更改为更适合机器学习算法的表示形式。
步骤 2 - 定义样本数据 - 导入包后,我们需要定义一些样本数据,以便我们可以在这些数据上应用预处理技术。我们现在将定义以下样本数据:
input_data = np.array([2.1, -1.9, 5.5],
[-1.5, 2.4, 3.5],
[0.5, -7.9, 5.6],
[5.9, 2.3, -5.8])
步骤 3 - 应用预处理技术 - 在此步骤中,我们需要应用任何预处理技术。
以下部分描述了数据预处理技术。
数据预处理技术
数据预处理技术如下所述:
二值化
当我们需要将数值转换为布尔值时,可以使用此预处理技术。我们可以使用内置方法对输入数据进行二值化,例如,通过以下方式使用 0.5 作为阈值:
data_binarized = preprocessing.Binarizer(threshold = 0.5).transform(input_data)
print("\nBinarized data:\n", data_binarized)
现在,在运行上述代码后,我们将获得以下输出,所有大于 0.5(阈值)的值将转换为 1,所有小于 0.5 的值将转换为 0。
二值化数据
[[ 1. 0. 1.] [ 0. 1. 1.] [ 0. 0. 1.] [ 1. 1. 0.]]
均值移除
这是机器学习中使用的另一种非常常见的预处理技术。它基本上用于消除特征向量中的均值,以便每个特征都以零为中心。我们还可以消除特征向量中特征的偏差。要对样本数据应用均值移除预处理技术,我们可以编写如下所示的 Python 代码。代码将显示输入数据的均值和标准差:
print("Mean = ", input_data.mean(axis = 0))
print("Std deviation = ", input_data.std(axis = 0))
运行上述代码行后,我们将获得以下输出:
Mean = [ 1.75 -1.275 2.2] Std deviation = [ 2.71431391 4.20022321 4.69414529]
现在,以下代码将移除输入数据的均值和标准差:
data_scaled = preprocessing.scale(input_data)
print("Mean =", data_scaled.mean(axis=0))
print("Std deviation =", data_scaled.std(axis = 0))
运行上述代码行后,我们将获得以下输出:
Mean = [ 1.11022302e-16 0.00000000e+00 0.00000000e+00] Std deviation = [ 1. 1. 1.]
缩放
这是另一种用于缩放特征向量的预处理技术。需要对特征向量进行缩放,因为每个特征的值可以在许多随机值之间变化。换句话说,缩放很重要,因为我们不希望任何特征人为地过大或过小。借助以下 Python 代码,我们可以对输入数据(即特征向量)进行缩放:
# 最小-最大缩放
data_scaler_minmax = preprocessing.MinMaxScaler(feature_range=(0,1))
data_scaled_minmax = data_scaler_minmax.fit_transform(input_data)
print ("\nMin max scaled data:\n", data_scaled_minmax)
运行上述代码行后,我们将获得以下输出:
最小-最大缩放数据
[ [ 0.48648649 0.58252427 0.99122807] [ 0. 1. 0.81578947] [ 0.27027027 0. 1. ] [ 1. 0. 99029126 0. ]]
归一化
这是另一种用于修改特征向量的预处理技术。这种修改对于以共同的尺度测量特征向量是必要的。以下是在机器学习中可以使用两种类型的归一化:
L1 归一化
它也称为最小绝对偏差。这种归一化修改值,以便每行中绝对值的总和始终为 1。它可以通过以下 Python 代码在输入数据上实现:
# Normalize data
data_normalized_l1 = preprocessing.normalize(input_data, norm = 'l1')
print("\nL1 normalized data:\n", data_normalized_l1)
以上代码行生成以下输出:
L1 normalized data: [[ 0.22105263 -0.2 0.57894737] [ -0.2027027 0.32432432 0.47297297] [ 0.03571429 -0.56428571 0.4 ] [ 0.42142857 0.16428571 -0.41428571]]
L2 归一化
它也称为最小二乘法。这种归一化修改值,以便每行中平方和始终为 1。它可以通过以下 Python 代码在输入数据上实现:
# Normalize data
data_normalized_l2 = preprocessing.normalize(input_data, norm = 'l2')
print("\nL2 normalized data:\n", data_normalized_l2)
以上代码行将生成以下输出:
L2 normalized data: [[ 0.33946114 -0.30713151 0.88906489] [ -0.33325106 0.53320169 0.7775858 ] [ 0.05156558 -0.81473612 0.57753446] [ 0.68706914 0.26784051 -0.6754239 ]]
数据标记
我们已经知道,机器学习算法需要特定格式的数据。另一个重要的要求是,在将数据作为机器学习算法的输入发送之前,必须对其进行正确标记。例如,如果我们谈论分类,则数据上有很多标签。这些标签以单词、数字等形式存在。sklearn 中与机器学习相关的函数期望数据必须具有数字标签。因此,如果数据采用其他形式,则必须将其转换为数字。将单词标签转换为数字形式的过程称为标签编码。
标签编码步骤
按照以下步骤在 Python 中对数据标签进行编码:
步骤 1 - 导入有用的包
如果我们使用 Python,那么这将是将数据转换为特定格式(即预处理)的第一步。它可以按如下方式完成:
import numpy as np from sklearn import preprocessing
步骤 2 - 定义样本标签
导入包后,我们需要定义一些样本标签,以便我们可以创建和训练标签编码器。我们现在将定义以下样本标签:
# Sample input labels input_labels = ['red','black','red','green','black','yellow','white']
步骤 3 - 创建和训练标签编码器对象
在此步骤中,我们需要创建标签编码器并对其进行训练。以下 Python 代码将有助于执行此操作:
# Creating the label encoder encoder = preprocessing.LabelEncoder() encoder.fit(input_labels)
运行上述 Python 代码后,输出如下:
LabelEncoder()
步骤 4 - 通过对随机排序列表进行编码来检查性能
此步骤可用于通过对随机排序列表进行编码来检查性能。可以编写以下 Python 代码来执行相同的操作:
# encoding a set of labels
test_labels = ['green','red','black']
encoded_values = encoder.transform(test_labels)
print("\nLabels =", test_labels)
标签将按如下方式打印:
Labels = ['green', 'red', 'black']
现在,我们可以获取编码值列表,即单词标签转换为数字,如下所示:
print("Encoded values =", list(encoded_values))
编码值将按如下方式打印:
Encoded values = [1, 2, 0]
步骤 5 - 通过解码一组随机数字来检查性能
此步骤可用于通过解码一组随机数字来检查性能。可以编写以下 Python 代码来执行相同的操作:
# decoding a set of values
encoded_values = [3,0,4,1]
decoded_list = encoder.inverse_transform(encoded_values)
print("\nEncoded values =", encoded_values)
现在,编码值将按如下方式打印:
Encoded values = [3, 0, 4, 1]
print("\nDecoded labels =", list(decoded_list))
现在,解码值将按如下方式打印:
Decoded labels = ['white', 'black', 'yellow', 'green']
标记数据与未标记数据
未标记数据主要包含自然或人为创建的对象的样本,这些样本可以轻松地从世界中获取。它们包括音频、视频、照片、新闻文章等。
另一方面,标记数据获取一组未标记数据,并为该未标记数据的每一部分添加一些有意义的标签或类别。例如,如果我们有一张照片,则可以根据照片的内容添加标签,即它是男孩或女孩或动物或其他任何东西的照片。标记数据需要人类专业知识或对给定未标记数据片段的判断。
在许多情况下,未标记数据丰富且易于获取,但标记数据通常需要人工/专家进行注释。半监督学习试图结合标记和未标记数据来构建更好的模型。