目录:
导入数据
- load:load函数可导入.mat格式的文件,load函数会将mat文件中的变量加载到matlab的工作区。
data = load('filename.mat');
- importdata:importdata函数可导入多种格式的文件,例如.txt、.csv、.xls,importdata函数将文件中的数据转换成矩阵存储。
data = importdata('filename.xls');
- readmatrix:readmatrix函数可导入多种格式的文件,例如.txt、.csv、.xls等,readmatrix函数将文件中的数据转换成矩阵存储,默认只读取数值数据。
data = readmatrix(‘文件名+后缀名’, ‘Sheet’, ‘工作表名字’, ‘Range’, ‘数据的范围’);
randperm
randperm函数可随机打乱一个数字序列,其内的参数决定了随机数的范围。
temp = randperm(81); %将1-81随机打乱返回一个81列的矩阵
rng&&rand
rng函数用于设置随机种子,rand函数用于取随机值。
产生伪随机数有一个种子,所谓的伪随机就是指有一定“规律”,而这个种子就是这个“规律”。rng(‘default’)就是用默认种子。不写也是一样的,只要你没改变过种子,matlab刚打开默认就是种子0
rng(‘default’);
rand(1,10);rng(0);
rand(1,10);rand(1,10);%前两个每次运行的结果都一样,两段代码产生的随机数也一样,而第三个每次不一样
normrnd
返回具有特殊要求的随机数,比如随机矩阵,满足正态分布的随机数等。
r=normrnd(mu,sigma); %生成服从正态分布(mu参数代表均值,sigma参数代表标准差)的随机数。输入的向量或矩阵mu和sigma必须形式相同,输出r也和它们形式相同。标量输入将被扩展成和其它输入具有相同维数的矩阵。
r=normrnd(mu,sigma,m); %生成服从正态分布(mu参数代表均值,sigma参数代表标准差)的随机数矩阵,矩阵的形式由m定义。m是一个1×2向量,其中的两个元素分别代表返回值r中行与列的维数。
r=normrnd(mu,sigma,m,n); %生成m×n形式的正态分布的随机数矩阵。
矩阵
定义
A = [1 2 3;4 5 6]; % 生成2x3的矩阵
A = [1,2,3;4,5,6]; % 生成2x3的矩阵A = a:h:b; %用于定义一维矩阵,a与b代表一维矩阵的区间,h代表一维矩阵的步长,b值可能取不到A = linspace(a,b,n); %用于定义一维矩阵,a与b代表一维矩阵的首尾值,n代表一维矩阵的元素个数,默认100
使用
- 下标索引法。A(2,3)可以提取出矩阵A中(2,3)位置的元素;A(2:4,3)可以提取A(2,3)到A(4,3)的所有元素,形成一个新的矩阵;A(2:4,2:4)可以提取A(2,2)到A(4,4)的所有元素,形成一个新的矩阵。
- 冒号法。A(2,:)可以提取A矩阵中第二行的所有元素;A(:,2)可以提取A矩阵中第三列的所有元素。
- 关键字end。指矩阵某行或某列的最后一个。
- 结构体法。例如,A.data可以提取矩阵A中的所有数据元素。
- 矩阵后加‘表示对矩阵进行转置。
size
[x,y] = size(A); %返回矩阵A的行和列,其中x记录A的行数,y记录A的列数,多返回值都可如此记录
size(A,1); %返回矩阵A的行数
size(A,2); %返回矩阵A的列数
inv
用于求矩阵的逆。
A = inv(B); %用于求矩阵B的逆并返回为A。
数据归一化
定义
归一化是将一组数据按照比例缩放,使之落入一个小的特定区间内。归一化可以消除数据特征之间的量纲差异,使得每个特征在权重计算中起到相同的作用,同时还可以增加算法的收敛速度,提高模型的预测精度。
作用
- 消除量纲和量纲单位的影响。不同的特征可能存在不同的量纲单位和取值范围,导致权重计算时其贡献不同,无法直观比较。通过归一化操作可以将不同类型、不同取值范围等不同的数据按照一定的规则统一转化为相同的范围,使得数据在同一数值区间内比较、处理更加合理、有意义。
- 减少数据波动对结果的干扰。数据的波动或噪声可能影响到模型的参数学习和预测效果。归一化操作可以将数据进行压缩、规范化,使得数据的振幅减小,波动贡献变得更加平均和规律,从而提高模型的稳定性和泛化能力。
- 提高模型精度。归一化能够提高模型的学习效率,优化杂乱数据的排列方式,使各个属性具有相近的重要性和取值范围。从而缩短算法的收敛时间,提高模型精度和保持模型的稳健性。
- 在神经网络中,归一化可以使每一层节点的输入数据在同一个范围内变化,使每个节点的计算结果有相似的量级,提高了梯度下降时的收敛速度。此外,还可以防止梯度爆炸和梯度消失现象的发生,提高神经网络的预测能力。
方式
- mapminmax:为matlab中封装的方法之一,为线性归一化的一种。表达式为:y = (ymax-ymin)*(x-xmin)/(xmax-xmin) + ymin,其中,x,y分别对应归一化前后数据。xmax,xmin分别对应处理前数据的最大值和最小值,而ymax,ymin则是处理后的数据的最大值最小值。对矩阵进行处理是对矩阵的每一行分别进行处理。
% X是待处理矩阵;Y是处理后的矩阵;YMIN是期望归一化后矩阵Y每行的最小值;YMAX是期望归一化后矩阵Y每行的最大值;PS为mapminmax操作的索引。
[Y,PS] = mapminmax(X,YMIN,YMAX);
% FP是一个结构体成员,主要是FP.ymin(相当于YMIN), FP.ymax(相当于YMAX)。
[Y,PS] = mapminmax(X,FP);
% 一般用于测试样本的归一化,X为待处理测试样本,PS为对应训练样本的操作索引,Y为处理完的测试样本
Y = mapminmax(‘apply’,X,PS);
% 逆归一化
X = mapminmax(‘reverse’,Y,PS);
- 线性归一化:就是简单公式表达:y = (x-min Value)/(max Value-min Value),将原数据等比例缩放到[0,1]范围内。
- 标准差归一化:y = (x-μ)/σ,其中,x,y分别对应归一化前后数据。μ代表这组数据的均差,σ代表这组数据的方差。适用于:原来数据近似高斯分布。同时是距离度量的。
- 对数归一化:y= log10(x),其中,x,y分别对应归一化前后数据。
reshape
reshape可将原矩阵排列成一个新矩阵。
B = reshape(A,6,4); %将A矩阵重新输出为6行4列的矩阵B,对A逐列扫描,对B逐列填充
B = reshape(A,6,[]);%将A矩阵重新输出为6行的矩阵B,对A逐列扫描,对B逐列填充B = reshape(A,3,4,2);%将A矩阵重新输出为3行4列2高的矩阵B,对A逐列扫描,对B逐列填充
括号
()
()一般跟在矩阵后;也可跟在函数后面,表示函数的形参;也可用于改变运算顺序。
A(3); %表示A中的第三个元素
A([2,4,5]); %返回列表[A(2),A(4),A(5)],即一个新矩阵B(:,1); %表示第一列的全部元素
B(1,:); %表示第一行的全部元素
B(:); %表示B中所有的元素。B(1,1:3); %表示第一行中第一列到第三列的元素
B(1:3,2); %表示第二列中第一行到第三行的元素
B(1,3:-1:1); %表示第一行中第3列到第1列的元素
B(3:-1:1,2); %表示第二列中第三行到第一行的元素
[]
[]可用于定义矩阵;拼接矩阵等。
[A,B]; %相当于水平拼接A和B,即horzcat(A,B);也可以直接用逗号“,”
[A;B]; %相当于垂直拼接A和B,即vertcat(A,B);也可以直接用分号“;”[]; %表示一个空数组
A(1,:)=[]; %表示删去A的第一行;
A(:,1)=[]; %表示删去A的第一列。[C,id]=setdiff(......); %接收两个返回值
{}
{}用于元胞cell型的数组(就是单元数组)的分配或引用。(可以理解为是个大的空间,里面可以容纳{} [ ] 等)
A = cell(a,b,c,...); %创建元胞数组% 元胞数组赋值两种方式
A(i,j)={};
A{i,j}=[];
% eg:
A(1,1)={[2,3;4,5]};% 大括号取出该位置的值
A{1,1}
创建模型layers与options
layers与options参数分别决定了你模型的网络架构与训练方式。layers参数包括你模型从输入走向输出的各层,options包括你训练网络的详细参数设定。
layers = [ %层级设置=[sequenceInputLayer(numFeatures) %序列输入层(即输入数量)bilstmLayer(numHiddenUnits,'OutputMode','last') %双向lstm层(隐藏单元个数,'输出模式','多对一')fullyConnectedLayer(numClasses) %全连接层(目标个数),目标个数即分类的类别数reluLayer %relu激活层softmaxLayer %softmax层(映射层)classificationLayer %输出分类层regressionLayer]; %返回层options = trainingOptions('adam', ... %选项 = 训练选项设置('累加器', 'ExecutionEnvironment','cpu', ... %'训练执行单元','cpu', 'GradientThreshold',1, ... %'梯度阈值',1,'MaxEpochs',maxEpochs, ... %'最大训练轮次',maxEpochs,'InitialLearnRate', 1e-2, ... %初始学习率'LearnRateSchedule', 'piecewise', ... %学习率下降方式'LearnRateDropFactor', 0.5, ... %学习率下降因子,就是学习率每次更新的时候都乘以0.1'LearnRateDropPeriod', 800, ... %学习率下降周期,每迭代20次就下降一次'MiniBatchSize',miniBatchSize, ... %'最小步距',miniBatchSize,'SequenceLength','longest', ... %'序列长度','整个序列','Shuffle','never', ... %'乱序','否','Verbose',false, ... %'在命令窗口中显示训练进度信息',否,'Plots','training-progress'); %'画图','训练过程');%{
选择优化器:累加器 'adam'(派生自自适应矩估计)求解器通常适合作为首先尝试的优化器。除此之外还有 'rmsprop'(均方根传播)和 'sgdm'(带动量的随机梯度下降)优化器,选取的标准要依据效果。最大训练轮次(MaxEpochs):训练多少轮,epoch是世代的意思,每次使用全部子集完成一次运算就是完成了一次epoch,训练轮次的设置要在防止数据过拟合的前提下尽量提高模型效果。最小步距 (MiniBatchSize):batch批次的意思,在梯度下降中一般来说要遍历所有样本,但有的时候样本个数特别大,不适合逐一遍历作梯度下降。此时我们就可以将样本划分若干子集,对子集进行遍历,针对每一个子集进行梯度下降,更新参数。MiniBatchSize是每个子集内样本个数,最小是1,最大是全部样本个数。序列长度(SequenceLength):“最长”-每个小批中的Pad序列具有与最长序列相同的长度。除此之外还有:‘shortest’—截断每个小批中的序列,使其长度与最短序列相同。‘positive integer’—每个小批量的序列具有与最长序列相同的长度,然后分割成指定长度的较小序列。如果发生分裂,则该函数创建额外的小批。乱序(Shuffle):'never’不打乱数据。除此之外还有:'once’在训练之前,对训练和验证数据进行一次洗牌、'every-epoch’在每个训练轮次之前洗牌训练数据。
%}
trainNetwork
训练模型
net = trainNetwork(imds,layers,options); %为图像分类问题训练网络。图像数据存储区imds存储输入的图像数据,layers定义网络体系结构,并options定义训练选项。
net = trainNetwork(ds,layers,options); %使用数据存储训练网络ds。对于具有多个输入的网络,请将此语法与组合或转换后的数据存储区结合使用。
net = trainNetwork(X,Y,layers,options); %为图像分类和回归问题训练网络。数字数组X包含预测变量,并Y包含分类标签或数字响应。
net = trainNetwork(sequences,Y,layers,options); %训练网络以解决序列分类和回归问题(例如LSTM或BiLSTM网络),其中sequences 包含序列或时间序列预测变量并Y包含响应。对于分类问题,Y是分类向量或分类序列的单元格数组。对于回归问题,Y是目标矩阵或数字序列的单元格数组。
net = trainNetwork(tbl,layers,options); %为分类和回归问题训练网络。该表 tbl包含数字数据或数据的文件路径。预测变量必须位于的第一列中tbl。有关目标或响应变量的信息,请参见tbl。
net = trainNetwork(tbl,responseName,layers,options); %为分类和回归问题训练网络。预测变量必须位于的第一列中tbl。该 responseName参数指定在响应变量tbl。
[net,info] = trainNetwork(___); %还可以使用先前语法中的任何输入参数返回有关训练的信息。net = trainNetwork(p_train,t_train,layers,options);
predict
predict函数可用来预测未来的数据值,可用于金融预测、天气预测、股票预测等。
Ypred = predict(Mdl,Xnew); %Mdl是训练好的模型;Xnew是新输入数据;Ypred是根据模型预测的值
绘图
plot(x1,y1,x2,y2,x3,y3...); %分别以xi、yi为横纵坐标画二维图
plot(x,y1,'k:',x,y2,'b--',x1,y3,'rp');
plotyy(x1,y1,x2,y2); %x1,y1相应一条曲线,x2,y2相应一条曲线。横坐标的标度同样,纵坐标有两个,左边的相应x1,y1数据对,右边的相应x2,y2数据对。
title('图形名称');
xlabel('x轴说明');
ylabel('y轴说明');
text(x,y,'图形说明');
legend(’图例1’,’图例2’,);
axis([xmin xmax ymin ymax zmin zmax]); %依照给出的x、y、z轴的最小值和最大值选择坐标系范围绘制曲线
axis equal; %纵横坐标轴採用等长刻度
axis square; %产生正方形坐标系(默觉得矩形)
axis auto; %使用默认设置
axis off; %取消坐标轴
axis on; %显示坐标轴
grid on/off; %命令控制画还是不画网格线
hold on/off; %命令是保持原有图形还是刷新原有图形
subplot(m,n,p); %该函数把当前窗体分成m×n个画图区,m行,每行n个画图区,区号按行优先编号。当中第p个区为当前活动区。每个画图区同意以不同的坐标系单独绘制图形。
figure(...); %用于创建图窗,用法多种多类,具体可自己按需要搜索
更多绘图操作可点击查看。
numel
a = numel(A); % A为矩阵时,返回A中的元素个数;A为图片时,返回A中的像素数
a = numel(A,条件); % 返回A中满足条件的数量
floor
对操作对象向下取整。
a = floor(A); %A为数值,则返回不大于A的最大整数;A为矩阵,则对A中所有元素进行向下取整
mean
mean函数用来求平均值
mean(A,1或2): %A为矩阵,当输入1时,返回A每列的平均值;当输入2时,返回A每行的平均值
mean(A); %默认返回每一列的平均值
std
std函数用来求标准差。标准差具有两种计算公式,如下:
std(A,flag,dim); %A为矩阵,flag可取值0或1,若取0,则使用上面那个式子,取1则使用下面那个式子;dim可取值1或2,若取值1则求每列的标准差,取值2则求每行的标准差。
std(A); %默认使用上面那个式子求每列的标准差
./与/
A ./ B; %当A、B为矩阵时,指A矩阵中的每个数值除以B矩阵的对应数值;当A、B为数值时,就是正常除法。
A / B; %当A、B为矩阵时,指A矩阵除以B矩阵;当A、B为数值时,就是正常除法。
ones函数
ones函数用于创建全1矩阵。
A = ones(5); % 生成5x5的全1矩阵。
A = ones(2,4); % 生成2x4的全1矩阵。
A = ones(2,4)*3; % 生成2x4的全3矩阵。
normpdf函数
返回正态分布概率密度函数在某店的函数值。
y = normpdf(x); %返回标准正态分布的概率密度函数 (pdf),在x中的值处计算函数值。
y = normpdf(x,mu); %返回具有均值 mu 和单位标准差的正态分布的 pdf,在x中的值处计算函数值。
y = normpdf(x,mu,sigma); %返回具有均值 mu 和标准差 sigma 的正态分布的 pdf,在 x 中的值处计算函数值。
sum函数
用于求矩阵某些元素的和。
S = sum(A); % A为向量则返回A的元素值和;A为矩阵则返回一个行向量,其中每个元素为对应列的值;如果A是多维数组,则sum(A)沿大小不等于1的第一个数组维度计算,并将这些元素视为向量。此维度会变为1,而所有其他维度的大小保持不变。
S = sum(A,'all'); % 计算A的所有元素的总和。
S = sum(A,dim); % 沿维度dim返回总和。
hist函数
hist有直方图的意思,直方图也被称为频数直方图,它用来显示数据集的分布情况。通常用于刻画概率分布函数。
N = hist(Y); % 将向量Y的元素平均分到十个等间隔的容器中,并且返回每个容器的元素个数。
N = hist(Y,M); % M是一个标量,表明使用M个箱子,默认使用十个箱子。
[h,xout]=hist(y,x); % 其中x是一个向量,返回x的长度个以x的元素为中心的容器内的,Y的分布情况。
% 注:在使用完hist对数据进行分布情况归纳后,一般使用bar函数将结果绘出。
% bar(xout,h,'FaceColor',[0.72,0.89,0.98]);% eg:
y=[1.1 2.2 3.3];x=[2 3 4];
[h,xout]=hist(y,x); %输出:h =[2 1 0],xout = [2 3 4]。
% 注意:第一个分组是(-inf,2.5],第二个是(2.5,3.5],第三个是(3.5,inf)。
repmat函数
B = repmat(A,n); % 返回一个数组,该数组在其行维度和列维度包含 A 的 n 个副本。A 为矩阵时,B 大小为 size(A)*n。
B = repmat(A,r1,...,rN); % 指定一个标量列表 r1,..,rN,这些标量用于描述 A 的副本在每个维度中如何排列。当 A 具有 N 维时,B 的大小为 size(A).*[r1...rN]。例如:repmat([1 2; 3 4],2,3) 返回一个 4×6 的矩阵。
B = repmat(A,r); % 使用行向量r指定重复方案。例如,repmat(A,[2 3]) 与 repmat(A,2,3) 返回相同的结果。% eg:
A=[1, 2; 3, 4];
B = repmat(A,2);
B =1 2 1 23 4 3 41 2 1 23 4 3 4A=[1, 2; 3, 4];
B = repmat(A,2,3)
B =1 2 1 2 1 23 4 3 4 3 41 2 1 2 1 23 4 3 4 3 4