Machine Learning 简明教程

Machine Learning - Data Loading

  1. 假设你想启动一个 ML 项目,那么你首先需要什么最重要的事情?那就是我们需要加载的数据来启动任何 ML 项目。

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

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

Consideration While Loading CSV data

CSV 是存储表格数据的一种纯文本格式,其中每一行表示一条记录,每一列表示一个字段或属性。由于其简单、轻便以及可以被诸如 Python、R 和 Java 等编程语言轻松读取和处理,因此它被广泛使用。

在 Python 中,我们可以通过不同方式将 CSV 数据载入到 ML 项目中,但在载入 CSV 数据之前,必须考虑一些事项。

在本章中,让我们了解 CSV 文件的主要组成部分、它们可能如何影响数据的载入和分析,以及在将 CSV 数据载入到 ML 项目之前我们应该考虑的一些事项。

File Header

这是 CSV 文件的第一行,它通常包含表中列的名称。在将 CSV 数据载入到 ML 项目时,文件头(也称为列头或变量名)可以在数据分析和模型训练中发挥重要作用。以下是有关文件头的一些需要记住的注意事项:

  1. Consistency - 头行应贯穿整个 CSV 文件,保持一致。这意味着每行的列数及其名称都应相同。不一致性会导致解析和分析方面的问题。

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

  3. Case sensitivity - 根据用于载入 CSV 文件的工具或库,列名可能是区分大小写的。务必确保头行的大小写与正在使用的工具或库的预期大小写敏感性相匹配。

  4. Special characters - 列名不应包含任何特殊字符,例如空格、逗号或引号。这些字符会导致解析和分析方面的问题。相反,使用下划线或驼峰式大小写来分隔单词。

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

  6. Encoding - 头行的编码会影响在载入 CSV 文件时的解释。务必确保头行的编码与用于读取文件的工具或库兼容。

Comments

这些是可选的行,它们以指定字符(例如“#”或“//”)开头,并且会被读取 CSV 文件的大多数程序忽略。它们可用于提供有关文件中数据的一些额外信息或背景。

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

  1. Comment markers - 在 CSV 文件中,可以使用特定标记(例如“#”或“//”)来指示注释。了解正在使用什么标记非常重要,以便载入过程能够正确忽略注释。

  2. Placement - 注释应放在与实际数据不同的行中。如果在包含实际数据的行中加入了注释,则可能会导致解析和分析方面的问题。

  3. Consistency - 如果在 CSV 文件中使用了注释,则务必确保在整个文件中一致地使用注释标记。不一致性会导致解析和分析方面的问题。

  4. Handling comments - 根据用于载入 CSV 文件的工具或库,注释可能默认被忽略,或者可能需要设置特定参数。了解注释是如何由正在使用的工具或库处理的非常重要。

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

Delimiter

这是分隔每一行中的字段的字符。虽然名称表明使用逗号作为分隔符,但根据文件,还可以使用制表符、分号或管道等其他字符。

用于 CSV 文件的分隔符会显著影响机器学习模型的准确性和性能,因此在将数据载入到 ML 项目时考虑以下事项非常重要:

  1. Delimiter choice − CSV 文件中使用的分隔符应根据所用数据仔细选择。例如,如果数据中包含逗号(例如“纽约市,纽约州”),那么使用逗号作为分隔符可能会导致问题。在这种情况下,可能更适合使用不同的分隔符,如制表符或分号。

  2. Consistency − CSV 文件中使用的分隔符应在整个文件中保持一致。混合使用不同的分隔符或不一致地使用空格会导致错误,并且难以准确解析数据。

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

  4. Other considerations − 在某些情况下,可能需要根据所用机器学习工具自定义分隔符。例如,某些库可能需要特定的分隔符或可能不支持某些分隔符。务必检查所用机器学习工具的文档并根据需要自定义分隔符。

Quotes

这些是可用于封闭包含分隔符或新行字符的字段的可选字符。例如,如果字段中包含逗号,将字段用引号引起可确保逗号将视为字段的一部分,而不是分隔符。在将 CSV 数据加载到 ML 项目时,有几个注意事项需要牢记关于引号的使用 −

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

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

  3. Escaping quotes − 如果字段中包含用于引起值的引号字符,则必须对其进行转义。这通常通过对引号字符加倍来完成。例如,如果引号字符是双引号 (") 且字段中包含值“约翰“锤子”史密斯”,则会用引号引起该值,并且内部引号会像这样进行转义:“约翰“”锤子“”史密斯”。

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

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

Various Methods of Loading a CSV Data File

在使用 ML 项目时,最关键的任务是将数据正确加载到其中。如前所述,ML 项目最常见的数据格式是 CSV,它具有多种风格和不同的难度才能进行解析。

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

Using the CSV Module

这是一个 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 文件并打印文件中的每一行。

Using the Pandas Library

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

import pandas as pd

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

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

Using the Numpy Library

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

import numpy as np

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

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

Using the Scipy Library

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

import numpy as np

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

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

Using the Sklearn Library

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

from sklearn.datasets import load_iris

data = load_iris().data

此代码加载包含在 sklearn 库中的鸢尾花数据集,然后将其加载到名为 data 的 numpy 数组中。