官方教程https://matlabacademy.mathworks.com/
利用readtable函数导入表格数据或文本数据,然后返回表类型的数据
%data=readtable('myfile.xlsx')
%导入数据
letter='J.txt'
利用引用的方式查看变量
%x = mytable.Xdata;
%y = mytable.Ydata;
%查看letter的X和Y数据,然后可视化
plot(letter.X,letter.Y)
axis equal 横纵等宽
什么意思没懂: 我的理解是写的时候,水平距离写一个单位,等于实际测量时的1.5个单位
letter = readtable("M.txt")
letter.X=letter.X*1.5;
plot(letter.X,letter.Y)
axis equal
没懂: 我的理解是这个时间值,是写一个字母记录的时间数据,左边的图表示的是任一起始时间点开始写完一个字母所用的时间,右边的图表示,(归一化操作)就是都假定从0开始写完一个字母所用的时间,
可以看到纵坐标表示的是字母书写时垂直坐标的变化
letter = readtable("M.txt")
letter.X = 1.5*letter.X;
plot(letter.X,letter.Y)
axis equal
letter.Time = letter.Time - letter.Time(1) %这里表示归一化,即结果只是每个字母持续的时间
letter.Time = letter.Time/1000 %这里表示换算到毫秒
分析有哪些可以利用的特征
这里注意到是长宽比,因为写的时候相同字母可以有填满整个数控板,或者只在数控板的一小块区域书写,所以我认为不能单纯的用长度和宽度来衡量,因为没有考虑尺度的问题
%计算持续时间
dur=letter.Time(end)
%计算横纵比
%利用range函数,range函数返回的向量x的取值范围,range(x)=max(x)-min(X),返回的是标量
aratio=range(letter.Y)/range(letter.X)
给定数据包含三个变量,两个特征一个标签,470个收集的数据(来自不同的人)
load featuredata.mat
features %将载入的数据重命名为features
scatter(features.AspectRatio,features.Duration) %画散点图
scattter显示的不是很好,利用gscatter分组显示
gscatter(features.AspectRatio,features.Duration,features.Character)
根据标签来利用不同的颜色进行显示
load featuredata.mat
features
testdata
knnmodel=fitcknn(features,"Character")
%features为导入的表的数据,Character表示表中的标签,(即响应变量,即想让模型预测的类别),范数的输出就是一个拟合好的模型
%注意这里直接写Character而不是features.Character
%predClass = predict(model,newdata)
%输入是一个训练好的模型,以及要预测结果的测试集,注意这个测试集具有与训练集相同的响应变量
%输出是对每个测试样本的预测结果,组成一个数组
%给定的测试集中包含正确的分类结果,但是predict函数在预测时会忽略正确的变量,从而进行预测
predictions=predict(knnmodel,testdata)
knnmodel = fitcknn(features,"Character","NumNeighbors",5)
predictions = predict(knnmodel,testdata)
load featuredata.mat
testdata
knnmodel = fitcknn(features,"Character","NumNeighbors",5);
predictions = predict(knnmodel,testdata)
% 进行评估
iscorrect=(predictions==testdata.Character)
精确度
iscorrect=(predictions==testdata.Character)
accuracy=sum(iscorrect)/numel(predictions)
误分类度
misclassrate=sum(predictions~=testdata.Character)/numel(predictions)
混淆矩阵可视化准确性和误分类性
利用confusionchart函数可视化
confusionchart(ytrue,ypred)
yture 表示已知的真值标签向量
ypred 表示预测标签(结果)向量
confusionchart(testdata.Character,predictions
利用datastore函数
letterds=datastore("*_M_*.txt") %这里使用模糊处理
从数据存储中读取数据,利用read函数,调用一次读取一个文件
data=read(letterds) %data是一个表
读取所有文件,利用readall函数
data=readall(letterds) %相当于把所有文件中的数据都综合成了一个表
plot(data.X,data.Y)
letterds = datastore("*_M_*.txt");
data = read(letterds);
data = scale(data);
plot(data.X,data.Y)
axis equal
plot(data.Time,data.Y)
ylabel("Vertical position")
xlabel("Time")
function data=scale(data)
data.Time=(data.Time-data.Time(1))/1000;
data.X=1.5*data.X;
end
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