主页
  • 主页
  • 分类
  • 热文
  • 教程
  • 面试
  • 标签
Python 人工智能

Python 人工智能 教程

Python 人工智能 入门概念
Python 人工智能 开始使用
Python 人工智能 机器学习
Python 人工智能 数据准备
Python 人工智能 监督学习:分类
Python 人工智能 监督学习:回归
Python 人工智能 逻辑编程
Python 人工智能 无监督学习:聚类
Python 人工智能 自然语言处理 (NLP)
Python 人工智能 NLTK(自然语言工具包)
Python 人工智能 分析时间序列数据
Python 人工智能 语音识别
Python 人工智能 启发式搜索
Python 人工智能 游戏
Python 人工智能 神经网络
Python 人工智能 强化学习
Python 人工智能 遗传算法
Python 人工智能 计算机视觉
Python 人工智能 深度学习

教程

Python 人工智能 入门概念
Python 人工智能 开始使用
Python 人工智能 机器学习
Python 人工智能 数据准备
Python 人工智能 监督学习:分类
Python 人工智能 监督学习:回归
Python 人工智能 逻辑编程
Python 人工智能 无监督学习:聚类
Python 人工智能 自然语言处理 (NLP)
Python 人工智能 NLTK(自然语言工具包)
Python 人工智能 分析时间序列数据
Python 人工智能 语音识别
Python 人工智能 启发式搜索
Python 人工智能 游戏
Python 人工智能 神经网络
Python 人工智能 强化学习
Python 人工智能 遗传算法
Python 人工智能 计算机视觉
Python 人工智能 深度学习

Python 人工智能 数据准备


上一章 下一章

我们已经研究了监督学习和非监督学习算法。这些算法要求格式化的数据以开始训练过程。我们必须以某种方式准备或格式化数据,以便它可以作为机器学习算法的输入。

数据预处理

在日常生活中,我们会处理大量的数据,但这些数据是以原始形式存在的。为了将数据作为机器学习算法的输入,我们需要将其转换为有意义的数据。这就是数据预处理的重要性所在。换句话说,在将数据提供给机器学习算法之前,我们需要预处理数据。

数据预处理步骤

以下是使用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 - 应用预处理技术

在此步骤中,需要应用一种预处理技术。

以下部分描述了数据预处理技术。

数据预处理技术

数据预处理的技术描述如下:

二值化(Binarization)

这是一种预处理技术,当需要将数值转换为布尔值时使用。可以使用内置方法来二值化输入数据,例如,通过设置阈值为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.]]

去除均值(Mean Removal)

这是另一种非常常见的预处理技术,在机器学习中经常使用。基本上,它用于消除特征向量中的均值,使得每个特征都集中在零上。也可以从特征向量中的特征中移除偏差。可以通过以下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.]

缩放(Scaling)

这是另一种数据预处理技术,用于缩放特征向量。缩放特征向量是必要的,因为每个特征的值可以在很多随机值之间变化。换句话说,缩放是重要的,因为我们不希望任何一个特征人为地大或小。可以通过以下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.        ]]

归一化(Normalization)

这是另一种数据预处理技术,用于修改特征向量。这种修改对于在共同尺度上衡量特征向量是必要的。以下是两种可以在机器学习中使用的归一化:

L1 归一化

这也称为最小绝对偏差。这种归一化修改值,使得每一行的绝对值之和总是达到1。可以通过以下Python代码实现:

# 归一化数据
data_normalized_l1 = preprocessing.normalize(input_data, norm='l1')
print("\nL1 normalized data:\n", data_normalized_l1)

上述代码生成如下输出:

L1 归一化后的数据:

[[ 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代码实现:

# 归一化数据
data_normalized_l2 = preprocessing.normalize(input_data, norm='l2')
print("\nL2 normalized data:\n", data_normalized_l2)

上述代码会生成如下输出:

L2 归一化后的数据:

[[ 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 - 定义样本标签

导入包之后,我们需要定义一些样本标签,以便可以创建和训练标签编码器。现在我们将定义以下样本标签:

# 样本输入标签
input_labels = ['red', 'black', 'red', 'green', 'black', 'yellow', 'white']

步骤 3 - 创建并训练标签编码对象

在此步骤中,需要创建标签编码器并对其进行训练。以下Python代码将帮助完成此操作:

# 创建标签编码器
encoder = preprocessing.LabelEncoder()
encoder.fit(input_labels)

执行以上Python代码后,将会输出:

LabelEncoder()

步骤 4 - 通过编码随机顺序列表检查性能

此步骤可用于通过编码随机顺序列表来检查性能。可以编写以下Python代码来执行相同的操作:

# 编码一组标签
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代码来执行相同的操作:

# 解码一组值
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']

标记数据 vs 未标记数据

未标记数据主要由自然或人造物体的样本组成,可以从世界中轻松获得。它们包括音频、视频、照片、新闻文章等。

另一方面,标记数据则取一组未标记数据,并为该组未标记数据中的每一条加上具有意义的标签或类别。例如,如果我们有一张照片,则可以根据照片的内容打上标签,即它是男孩、女孩、动物或其他任何东西的照片。标记数据需要人类的专业知识或对给定未标记数据的判断。

有许多情况,未标记数据丰富且容易获得,但标记数据通常需要人类/专家来进行注释。半监督学习尝试结合标记和未标记数据以建立更好的模型。

上一章 下一章
阅读号二维码

关注阅读号

联系二维码

联系我们

© 2024 Yoagoa. All rights reserved.

粤ICP备18007391号

站点地图