导入和预处理数据
导入和预处理数据
创建数据存储
- 使用通配符(*或?)为匹配特定模式的文件或文件夹创建一个数据存储。
letterds= datastore("*_M_*.txt")
使用 datastore 函数为所有包含字母 M 的文件创建一个数据存储。这些文件的名称中包含 M,扩展名为 .txt。将该数据存储存储在名为 letterds 的变量中。
- 可以使用 read 函数从数据存储的文件中导入数据。
data = read(letterds);
第一次使用 read 函数将从第一个文件导入数据。第二次使用该函数将从第二个文件导入数据,依此类推。
- readall 函数将数据存储中所有文件的数据导入单个变量中
data = readall(letterds)
无法简单地确定来自一个文件的数据在哪里结束以及来自下一个文件的数据在哪里开始。造成特征无法准确提取
添加数据变化
通常,需要对原始数据的每个采样应用一系列预处理操作。自动化此过程的第一步是创建一个应用您的特定预处理操作的自定义函数。
在脚本的末尾添加自定义函数。对于数据预处理,该函数应接受从数据存储返回的数据作为输入。它应将变换后的数据作为输出返回。
function dataout = functionName(datain)
% do something with datain
dataout = ...
end
要将一个函数用作另一个函数的输入,请通过在函数名称的开头添加 @ 符号来创建函数句柄。
transform(ds,@myfun)
函数句柄是对函数的引用。如果没有 @ 符号,MATLAB 会将函数名称解释为对该函数的调用。
典型的归一化包括按均值偏移(使偏移后的数据的均值为 0)或者将数据偏移并缩放到固定范围内(例如 [-1, 1])。对书写的字母的 x 和 y 数据都进行偏移,使其均值为 0,这将确保所有字母都以同一点为中心。
两个分量中减去均值位置:
data.X = data.X - mean(data.X);
data.Y = data.Y - mean(data.Y);
请注意,这会造成问题,使绘图显示空白。
任何涉及 NaN 的计算(包括以默认方式使用 mean 之类的函数)都将得到 NaN。这在机器学习中很重要,因为在机器学习中,数据经常有缺失值。在字迹数据中,只要书写者将触笔从平板电脑提起,就会出现一个 NaN。
可以使用 "omitnan" 选项让 mean 之类的统计函数忽略缺失值。
mean(x,"omitnan")
letterds = datastore("*_V_*.txt");
data = read(letterds);
data = scale(data);
plot(data.X,data.Y)
axis equal
plot(data.Time,data.Y)
ylabel("Vertical position")
xlabel("Time")
preprocds = transform(letterds,@scale)
data = readall(preprocds)
plot(data.Time,data.Y)
function data = scale(data)
data.Time = (data.Time - data.Time(1))/1000;
data.X = 1.5*data.X;
data.X = data.X-mean(data.X,"omitnan")
data.Y = data.Y-mean(data.Y,"omitnan")
end