【问题标题】:normalize mat file in matlab在matlab中标准化mat文件
【发布时间】:2011-12-05 12:06:36
【问题描述】:

我有一个 mat 文件,其结构如下:

如何规范化数据并将其保存为 .dat 文件 (ascii)

【问题讨论】:

  • 你所说的“标准化”是什么意思?
  • 1) 找到最小和最大数据集 2) 找到归一化尺度最小值和最大值 3) 将数据集中的所有数字更改为 4) 归一化值
  • 我的意思是我可以手动将数据从 vec 复制到 mat 文件中并粘贴到 excel 中,然后另存为 csv 然后将 csv 转换为 .dat 但必须有一种方法可以直接另存为 .dat -ASCII

标签: matlab normalization


【解决方案1】:

我假设您想要规范化每一列。

有两种方法可以标准化:

(1) 将最小值设置为 0,将最大值设置为 1

dataset = bsxfun(@minus,dataset,min(dataset));
dataset = bsxfun(@rdivide,dataset,max(dataset));

(2) 将平均值设置为零,标准差设置为 1(如果您没有统计工具箱,请分别使用 meanstd 进行减法和除法,如上所述)。

dataset = zscore(dataset); 

编辑

为什么有人会使用选项 2 来规范化?

当您计算不同数据点之间的差异(相异性)时,您可能希望对不同维度进行同等权衡。由于方差较大的维度将主导相异性度量,因此您将方差归一化为 1。

【讨论】:

  • 为什么不只是 vec = randn(494021, 42);?
  • @Garrith Graham:因为您的数据中可能存在相关性。
  • 使用您的方法是否可以指定从数据集中获取的大小,您会注意到我的数据集我使用 vec = randn(494021, 42);我可以将其更改为仅从 n 列中获取 10 或 1000 条记录
  • @GarrithGraham:当然。将您的数据子集创建为subset = dataset(1:howeverManyRowsYouWant,:),然后使用subset 而不是dataset 运行我的代码。
  • 那行不通?它只是输出与M文件相同的子集
【解决方案2】:

你的标准化:

dataset = dataset-ones(size(dataset,1),1)*min(dataset) % subtract min
dataset = dataset ./ (ones(size(dataset,1),1)*max(dataset)+eps) % divide by max

【讨论】:

    猜你喜欢
    • 2015-01-06
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-07
    • 2015-04-13
    • 1970-01-01
    相关资源
    最近更新 更多