【问题标题】:How to load data for Classification in Matlab如何在 Matlab 中加载分类数据
【发布时间】:2012-06-03 16:43:47
【问题描述】:

我有一个包含数千个属性的文本文件(每列表示一个属性)和一个显示每行标签的列。所有数据都是数字,除了最后一列是标签。此列是字符串。我想使用诸如 gscatter() 之类的 matlab 分类函数对数据进行分类。问题是当我在 matlab 中使用加载文件名来加载我的数据时,我得到了这个错误(其中“no”是标签之一)

ASCII 文件 C:\Program Files\MATLAB\R2011b\train\train.txt 第 1 行的未知文本 “不”。

事实上,我不知道如何在 matlab 中加载我的数据,以便能够使用 matlab 函数对数据进行分类。

【问题讨论】:

标签: matlab file-io


【解决方案1】:

Load 仅适用于只有数字数据的 .mat 文件和文本文件,这就是您收到错误的原因。

虽然有许多函数可以读取文本文件。 根据您的数据文件的格式,您可以使用以下之一:

  • textread 非常通用,但需要您提供格式并打开和关闭文件。
  • csvread 仅读取逗号分隔的数字值,但您不必提供格式。
  • importdata很通用也很方便
  • fscanf 类似于 textread

鉴于您要处理的属性数量,我自己肯定会选择importdata

【讨论】:

  • Load 也可以用于文本文件,只要它们只包含数字矩阵。
  • 谢谢@Andrey,我没有意识到这一点。
【解决方案2】:

这是一个例子

train.txt

1,2,3,4,5,6,no
2,3,4,5,6,7,yes

myLoadScript.m

numAttribs = 6;        %# number of attributes (excluding the label)
frmt = [repmat('%f ',1,numAttribs) '%s'];
fid = fopen('train.txt', 'rt');
C = textscan(fid, frmt, 'Delimiter',',', 'CollectOutput',1);
fclose(fid);

结果:

>> C{1}
ans =
     1     2     3     4     5     6
     2     3     4     5     6     7

>> C{2}
ans = 
    'no'
    'yes'

应该很容易适应您的特定文件格式...

【讨论】:

  • 非常感谢您的帮助。现在,是否可以将这组数据划分为训练和测试?
猜你喜欢
  • 2021-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-11
  • 2016-06-26
相关资源
最近更新 更多