机器学习 - 数据加载



假设您想启动一个机器学习项目,那么首先也是最重要的事情是什么?对于任何机器学习项目,都需要加载数据。

在机器学习中,数据加载是指从外部来源导入或读取数据,并将其转换为机器学习算法可以使用的格式的过程。然后对数据进行预处理,以去除任何不一致之处、缺失值或异常值。数据预处理完成后,将其分成训练集和测试集,然后用于模型训练和评估。

数据可以来自各种来源,例如CSV文件、数据库、Web API、云存储等。机器学习项目最常用的文件格式是CSV(逗号分隔值)。

加载CSV数据时的注意事项

CSV是一种纯文本格式,用于存储表格数据,其中每一行代表一条记录,每一列代表一个字段或属性。它被广泛使用,因为它简单、轻量级,并且可以很容易地被Python、R和Java等编程语言读取和处理。

在Python中,我们可以通过不同的方式将CSV数据加载到机器学习项目中,但在加载CSV数据之前,我们必须注意一些事项。

在本章中,让我们了解CSV文件的主要组成部分,它们如何影响数据的加载和分析,以及在将CSV数据加载到机器学习项目中之前,我们应该注意的一些事项。

文件头

这是CSV文件的首行,通常包含表中各列的名称。将CSV数据加载到机器学习项目时,文件头(也称为列标题或变量名)在数据分析和模型训练中可以发挥重要作用。以下是一些关于文件头的注意事项:

  • 一致性 - 文件头在整个CSV文件中应保持一致。这意味着每一行的列数及其名称都应相同。不一致会导致解析和分析问题。

  • 有意义的名称 - 列名应具有意义且描述性。这有助于理解数据并构建更准确的模型。避免使用“column1”、“column2”等通用名称。

  • 大小写敏感性 - 根据用于加载CSV文件的工具或库的不同,列名可能区分大小写。务必确保文件头的字母大小写与所用工具或库的预期大小写敏感性匹配。

  • 特殊字符 - 列名不应包含任何特殊字符,例如空格、逗号或引号。这些字符会导致解析和分析问题。应改用下划线或驼峰式命名法来分隔单词。

  • 缺失文件头 - 如果CSV文件没有文件头行,则必须手动指定列名或提供包含列名的单独文件或文档。

  • 编码 - 文件头的编码会影响加载CSV文件时对它的解释。务必确保文件头的编码与用于读取文件的工具或库兼容。

注释

这些是可选的行,以指定的字符(例如“#”或“//”)开头,大多数读取CSV文件的程序都会忽略这些行。它们可用于提供有关文件数据的附加信息或上下文。

CSV文件中的注释通常不用于表示机器学习项目中将使用的文件数据。但是,如果CSV文件中存在注释,则必须考虑它们如何影响数据的加载和分析。以下是一些注意事项:

  • 注释标记 - 在CSV文件中,可以使用特定标记(例如“#”或“//”)来指示注释。必须知道使用了什么标记,以便加载过程能够正确忽略注释。

  • 位置 - 注释应放在与实际数据分开的行中。如果注释与实际数据位于同一行,则可能会导致解析和分析问题。

  • 一致性 - 如果在CSV文件中使用注释,则必须确保在整个文件中始终如一地使用注释标记。不一致会导致解析和分析问题。

  • 处理注释 - 根据用于加载CSV文件的工具或库的不同,注释可能会默认被忽略,或者可能需要设置特定参数。必须了解所用工具或库如何处理注释。

  • 对分析的影响 - 如果注释包含有关数据的重要信息,则可能需要将它们与数据本身分开处理。这可能会增加加载和分析过程的复杂性。

分隔符

这是用于分隔每一行中字段的字符。虽然名称暗示使用逗号作为分隔符,但根据文件,也可以使用制表符、分号或竖线等其他字符。

CSV文件中使用的分隔符会显著影响机器学习模型的准确性和性能,因此在将数据加载到机器学习项目中时,必须考虑以下事项:

  • 分隔符的选择 - CSV文件中使用的分隔符应根据所使用的数据仔细选择。例如,如果数据在值中包含逗号(例如“New York, NY”),则使用逗号作为分隔符可能会导致问题。

    在这种情况下,制表符或分号等其他分隔符可能更合适。

  • 一致性 - CSV文件中使用的分隔符应在整个文件中保持一致。混合使用不同的分隔符或不一致地使用空格会导致错误,并使准确解析数据变得困难。

  • 编码 − 分隔符还会受到 CSV 文件编码的影响。例如,如果 CSV 文件使用非 ASCII 分隔符并以 UTF-8 编码,则某些机器学习库或工具可能无法正确读取它。务必确保编码和分隔符与所使用的机器学习工具兼容。

  • 其他考虑因素 − 在某些情况下,可能需要根据所使用的机器学习工具自定义分隔符。例如,某些库可能需要特定分隔符,或者可能不支持某些分隔符。务必检查所用机器学习工具的文档,并根据需要自定义分隔符。

引号

这些是可选字符,可用于括起包含分隔符字符或换行符的字段。例如,如果某个字段包含逗号,则将其用引号括起来可确保将逗号视为字段的一部分,而不是分隔符。将 CSV 数据加载到 ML 项目中时,需要考虑以下几个关于引号用法的因素:

  • 引号字符 − CSV 文件中使用的引号字符应在整个文件中保持一致。最常用的引号字符是双引号 ("),但有些文件可能使用单引号或其他字符。务必确保使用的引号字符与用于读取 CSV 文件的工具或库一致。

  • 带引号的值 − 在某些情况下,CSV 文件中的值可能用引号括起来,以将其与其他值区分开来。例如,如果某个字段包含逗号,则可能将其用引号括起来,以防止将其解释为新字段。将数据加载到 ML 项目中时,务必确保正确处理带引号的值。

  • 转义引号 − 如果某个字段包含用于括起值的引号字符,则必须对其进行转义。这通常通过重复引号字符来完成。例如,如果引号字符是双引号 ("),并且某个字段包含值 "John "the Hammer" Smith",则应将其用引号括起来,并将内部引号转义,如下所示:"John ""the Hammer"" Smith"。

  • 引号的使用 − CSV 文件中引号的使用可能因用于生成文件的工具或库而异。某些工具可能会在每个字段周围使用引号,而其他工具可能仅在包含特殊字符的字段周围使用引号。务必确保引号的使用与用于读取文件的工具或库一致。

  • 编码 − 引号的使用也可能受到 CSV 文件编码的影响。如果文件以非标准方式编码,则在将数据加载到 ML 项目中时可能会导致问题。务必确保 CSV 文件的编码与用于读取文件的工具或库兼容。

加载 CSV 数据文件的各种方法

在使用 ML 项目时,最关键的任务是将数据正确加载到其中。如前所述,ML 项目最常用的数据格式是 CSV,它具有各种形式,解析难度也各不相同。

在本节中,我们将讨论在 Python 中将 CSV 数据文件加载到机器学习项目中的一些常用方法:

使用 CSV 模块

这是 Python 中的一个内置模块,它提供读取和写入 CSV 文件的功能。您可以使用它将 CSV 文件读取到列表或字典对象中。以下是 Python 中的实现示例:

import csv
with open('mydata.csv', 'r') as file:
   reader = csv.reader(file)
   for row in reader:
      print(row)

此代码读取名为 mydata.csv 的 CSV 文件,并打印文件中的每一行。

使用 Pandas 库

这是 Python 中一个流行的数据操作库,它提供了一个 read_csv() 函数,用于将 CSV 文件读取到 pandas DataFrame 对象中。这是一种非常方便的加载数据和执行各种数据操作任务的方法。以下是 Python 中的实现示例:

import pandas as pd

data = pd.read_csv('mydata.csv')

此代码读取名为 mydata.csv 的 CSV 文件,并将其加载到名为 data 的 pandas DataFrame 对象中。

使用 Numpy 库

这是 Python 中的一个数值计算库,它提供了一个 genfromtxt() 函数,用于将 CSV 文件加载到 numpy 数组中。以下是 Python 中的实现示例:

import numpy as np

data = np.genfromtxt('mydata.csv', delimiter=',')

此代码读取名为 mydata.csv 的 CSV 文件,并将其加载到名为“data”的 numpy 数组中。

使用 Scipy 库

这是 Python 中的一个科学计算库,它提供了一个 loadtxt() 函数,用于将文本文件(包括 CSV 文件)加载到 numpy 数组中。以下是 Python 中的实现示例:

import numpy as np

from scipy import loadtxt
data = loadtxt('mydata.csv', delimiter=',')

此代码读取名为 mydata.csv 的 CSV 文件,并将其加载到名为“data”的 numpy 数组中。

使用 Sklearn 库

这是 Python 中一个流行的机器学习库,它提供了一个 load_iris() 函数,用于加载 iris 数据集,这是一个常用的分类任务数据集。以下是 Python 中的实现示例:

from sklearn.datasets import load_iris

data = load_iris().data

此代码加载包含在 sklearn 库中的 iris 数据集,并将其加载到名为 data 的 numpy 数组中。

广告