欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Matlab机器学习2(Machine Learning Onramp)

程序员文章站 2022-05-22 07:54:05
...

Importing and Preprocessing Data

现在有一批手写字母的样本。每个字母都是从许多不同的志愿者那里收集的。有些人提供了一个字母的很多样本。每个示例保存在一个单独的文件中,所有文件存储在一个文件夹中。如:
user003_B_2.txt
这个文件是志愿者“user003”写的字母B的第二个样本。

创建Datastores

% 使用通配符为所有包_M_的txt文件创建一个datastore文件。
letterds = datastore('*_M_*.txt')

% 使用read函数可以从datastore文件中逐个读取数据
data = read(letterds)
plot(data.X,data.Y)

% 使用read函数读取datastore中的第二个文件
data = read(letterds)
plot(data.X,data.Y)

Matlab机器学习2(Machine Learning Onramp)
Matlab机器学习2(Machine Learning Onramp)
Matlab机器学习2(Machine Learning Onramp)
Matlab机器学习2(Machine Learning Onramp)

% 使用readall函数将datastore中的所有数据文件导入到同一个变量中
data = readall(letterds)
plot(data.X,data.Y)

我们一般需要对每个字母执行一些预处理,比如坐标比例的变化,计算其特征。但是,在使用readall时,无法确定一个文件的数据在何处结束,自下一个文件的数据在何处开始。如果你试图把这种用readall读取的所有的字母放在一起进行预处理肯定是不行的。

导入数据时进行数据预处理

通常要对原始数据做一系列的预处理时,使这个过程自动化的第一步是创建一个有固定操作的自定义函数。
Matlab机器学习2(Machine Learning Onramp)

% 创建一个对原始数据做坐标变换功能的函数
function data = scale(data)
data.Time = (data.Time - data.Time(1))/1000;
data.X = 1.5*data.X;
end

现在我还是要手动调用函数,才是能实现对原始数据的预处理。我希望能在从datastore中read数据的时候直接完成数据的预处理。使用转换函数transform接受一个datastore和转换规则函数作为输入,输出一个做完预处理的datastore。
Matlab机器学习2(Machine Learning Onramp)

% transform函数用来实现转换datastore文件
% 第一参数是希望转换的datastore
% 第二个参数是转换的规则,是一个函数句柄
% 其对应函数的输入参数,一定要和read函数读取datastore的结果结构相同
preprocds = transform(letterds,@scale)
% 对执行过预处理操作获得的新datastore直接使用readall读取
data = readall(preprocds)
plot(data.Time,data.Y)

Matlab机器学习2(Machine Learning Onramp)
Matlab机器学习2(Machine Learning Onramp)
字母的位置对分类来说并不重要。重要的是形状。对于许多机器学习问题,一个常见的预处理步骤是对数据进行归一化。
典型的归一化包括按平均值移动(以便移动数据的平均值为0)或将数据移动和缩放到一个固定的范围(如[-1,1])。
本例中将x和y都移动成均值为0,确保所有的字母都以同一点为中心。
Matlab机器学习2(Machine Learning Onramp)
任何涉及NaN的计算(包括mean等函数的默认使用)都将导致NaN。这在机器学习中很重要,因为在机器学习中,你的数据经常会丢失一些值。在手写数据中,当写作者从平板上取笔时,就会出现NaN。
可以使用“omitnan”选项来使用mean等统计函数来忽略丢失的值。

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
相关标签: Matlab 机器学习