MATLAB 中的分类数组

2025年7月25日 | 阅读 8 分钟

引言

MATLAB 中用于封装数据的核心结构称为分类数组,它们旨在表示已分类或同等重要的类别中的数据。与数字或字符数组不同,分类数组用于有效分析非数字数据。这些数组将数据存储为标签或类别的字符串,并包含用于操作此数据类型的内置函数。

例如,可以有效地以分类数组格式存储调查响应数据集,例如 {'Male,' 'Female,' 'Female,' 'Male'}。不仅方便表示此类数据,而且如果使用诸如排序、过滤或分析之类的数据操作,还可以缩短内存占用空间并提高计算速度。

分类数组的关键特性

  • 在大数据集中处理重复类别具有特别的优势。
  • 将数据分组和过滤等困难降到最低。
  • 一个重要的优势是可以预定义多个类别,这提供了_一致性_,并且_不会因使用无效条目而_导致_错误_。

在数据分析中的重要性

  • 数据分组和聚合:分类数组在对数据进行排序方面很有用,并且在排序后,我们可以对已排序的数据执行求和、平均值或计数等活动。
  • 统计分析:在需要检查多种事件类型的情况下,通常使用泊松回归;当存在许多名义上的独立变量时,则需要逻辑回归。
  • 机器学习的特征编码:机器学习任务中,类标签或分类特征可以用分类数组表示。特别是在分类问题中,当需要对要使用的数据类别定义进行平滑处理时。
  • 内存和性能优化:与字符数组相比,分类数组在处理重复类别时占用的内存更少,因此适合大数据。它们再次对其他活动(如排序和过滤的优势)的功能增强产生影响。

在 MATLAB 中创建分类数组

MATLAB 中的模糊关系在处理包含类别的数据时非常有用,因此,MATLAB 提供了一种名为 Array 的类型,它是一个分类数组,用于调查数据、带标签的数据或任何重复带标签的数据。

创建的基本语法

要创建分类数组,需要借助 MATLAB 内置函数 categorical()。

示例

  • 它用于将一组元素转换为类别。
  • categorical() 函数与字符向量(或字符串)的单元格数组一起用作其参数。
  • MATLAB 可以检测到本问题中的独特类别“男性”和“女性”,并将其与数据关联起来。

自定义类别

也就是说,在创建分类数组时,可以提供有限的类别。这允许您事后添加可能未出现在您最初调查的数据集中的类别,但对您的调查仍然有用。

示例

  • 此外,值为 'apple'、'orange' 和 'banana' 的第二个参数直接指示了可接受类型的列表。
  • 虽然数据中只捕获了苹果和橙子两种类型,但香蕉也被认为是有效的选择。
  • 这种方法在需要考虑在后续数据中出现新类别的情况下很有益。

将数据转换为分类

如果您的数据是数字或单元格数组数据,则可以使用 categorical() 函数来实现。

示例(数字数据)

  • 对数字数据 [1, 2, 2, 3] 进行操作,然后将其转换为分类数组。
  • 在这种情况下,类别数量由 MATLAB 软件决定,类别可以是 1、2 和 3。
  • 可以使用分类数组对数据集进行比较或基于组的分析。
  • 输入是字符串、字符向量或字符串数组或字符数组的单元格数组。
  • MATLAB 将数据有效地分类到不同的分类集中,并为每个数据分配正确的类别。

示例(单元格数组)

创建分类数组的关键说明

  • 自动类别检测:在没有定义类别的情况下,MATLAB 也可以自行从数据集中识别类别。
  • 用户定义的类别:当您的数据集发生变化或您希望一组标签保持不变时,可以使用自定义类别。
  • 内存效率:由于使用了引用,分类数组在处理大量数据时(尤其是在标签重复时)内存效率很高。
  • 类型一致性:类别数组还可以保持数据类型的一致性,尤其是在集成或处理两个或多个数据集时。

在 MATLAB 中使用分类数组

访问数据

  • 访问元素的语法:要访问特定元素,请使用括号。

示例

  • 遍历数据:可以使用循环来处理分类数组。

示例

更改类别

  • 重新排序类别:切换 DVD 以按不同顺序读取类别,或切换处理器以按不同顺序处理类别。

示例

  • 添加新类别:将更多类别添加到已有的分类数组中。

示例

  • 重命名类别:更改现有类别的名称。

示例

组合分类数组

  • 垂直连接:将两个或多个相似、已加标签的分类集合附加在一起。

示例

  • 水平连接:将数组并排合并。请确保加载的类别对应于一组刺激。

示例

  • 确保一致性:如果不同,则必须以一种方式对一个或多个数组进行分类,以便所有要合并的数组都具有相同的类别。

示例

在 MATLAB 中操作分类数据

1. 重命名类别

如果您想更改任何分类数组中类别的标签,重命名会很有帮助。当您需要比 Excel 中的数字名称更具描述性或更标准的名称时,这一点尤其有用。

语法

使用 renamecats 函数重命名现有类别。

示例

假设您有一个具有类别 {'male,' 'female'} 的分类数组,并且您想将其重命名为 {'M', 'F'} 以求简洁。

输出

 
M  F  M  F   

2. 对分类数据进行排序

排序涉及根据类别顺序对分类数据进行排序。换句话说,默认情况下,MATLAB 根据类别在 .cls 文件中创建的顺序进行分类。

语法

使用 sort 函数按升序排列数据。

示例

考虑一个包含无序数据的分类数组。

输出

 
apple  banana  banana  orange   

3. 查找唯一类别

探索新类别有助于区分分类数组中的特殊性。

语法

使用 unique 函数从分类数组中提取唯一类别。

示例

假设您想查找数据集中的唯一类别。

输出

 
apple  banana  orange   

在 MATLAB 中对分类数组进行操作

1. 比较分类数组

分类数组用于比较组内和组间的特定类别,以评估相等性或某些连接。

  • 相等性比较:子部分包括关系运算符(==, ~=, <, >, 等),它们比较分类数组内部或之间的元素。

示例

  • 特定类别之间的比较:决定类别顺序是否意味着一种类型“小于”另一种类型,所有这些都与其他类型的类别相关。

示例

2. 计算类别出现次数

了解分类数据的分布,计算每个类别的出现次数非常重要。

  • 使用 countcats 函数进行计数:在 MATLAB 中,可以使用 countcats 函数来查找分类数组中每个类别出现的次数。

示例

输出

 
Categories: 'apple', 'banana', 'orange'
Count:      [3,        2,        1]   
  • 使用 summary 获取详细信息:要查看类别中的博客数量,summary 函数很有用,因为它会显示每个类别中的条目计数。

示例

3. 子集操作

通过制作分类数组的子集,可以根据需要的条件进行进一步分析。

  • 基于相等的过滤:提取具有特定类别的所有元素。

示例

  • 使用逻辑条件:要过滤元素列表,可以将逻辑条件连接起来以基于不同参数进行过滤。

示例

  • 提取特定类别的索引:确定类别在数组中出现的索引号。

示例