目录
基础知识:
一、监督学习:是指给算法一个数据集其中包含正确答案,算法的目的就是给出更多的正确答案。
例如回归问题:回归是指我们的目标是预测一个连续值输出
例如分类问题:其目的预测离散值输出
二、监督学习:对于给定的数据集,无监督学习算法可能判定该数据集有两个不同的簇。
例如聚类算法。
三、代价函数
梯度下降:
由代价函数引出梯度下降的知识,然后得出梯度下降算法
梯度下降算法:
根据梯度下降算法和线性回归模型得出线性回归算法:
线性回归算法:
矩阵相乘:
线代基础知识中的矩阵相乘的利用
(这里讲解了许多线代方面的知识例如矩阵加法、逆和矩阵、矩阵乘法特征之类的就不多讲解了)
多元梯度梯度和正规方程:
多元梯度下降:
多元梯度下降两个知识点:
-
特征缩放(Feature Scaling): 特征缩放是指将输入特征的值进行缩放或标准化,以便更好地进行梯度下降优化。这是因为不同特征可能具有不同的数值范围,如果不进行特征缩放,梯度下降可能会因为特征值的差异而收敛缓慢或不稳定。两种常见的特征缩放方法是:
- 均值归一化(Mean Normalization):将特征值减去其均值,然后除以标准差。这使得特征的均值接近于零,标准差接近于一。
- 最小-最大缩放(Min-Max Scaling):将特征值缩放到一个固定的范围,通常是[0, 1]。这种方法可以保持特征值的相对比例。
-
学习率(Learning Rate): 学习率是梯度下降算法中的一个超参数,它决定了每次更新模型参数时应该改变多少。学习率的选择对于梯度下降的性能至关重要。如果学习率太小,模型训练可能会收敛得很慢,而如果学习率太大,可能会导致模型参数跳过最优解并发散。
通常,学习率的选择是一个经验性的过程。可以尝试不同的学习率值,并观察模型的性能。常见的学习率调整策略包括固定学习率、学习率衰减和自适应学习率方法(如Adam优化算法)。
正规方程:
正规方程和梯度下降对比(缺优点):
基本语法:
移动数据:
首先需要查看自己octave的位置
pwd
然后可以更改octave到需要移动数据的文件位置
cd 文件位置
可以查看是否准确
ls
ls可以查看自己的文件是否在里面
然后将数据移动到octave中
如果是二进制mat形式的文件这有两种方式
load 文件名
load(‘文件名’)
如果不是mat的形式需要另做代码
最后可以查看数据是否移动到octave中去
who/whos
whos可以更清楚的查看数据
如果想要删除某个数据:
clear 文件名
如果只有一个clear那么octave中的数据都会被清除
赋值数据:
v=文件(1:10) %表示数据文件前十个数据存储到了v中
存储数据:
save 自定义文件名 v
这样v就会被存储到文件位置中。
二进制文件转文本文件:
save 自定义文件名.txt v -ascii %save as text(ASCII)
索引:
A=[1 2;3 4;5 6]
A(2,:) %输出第二行所有元素
A(:,2) %输出第二列所有元素
A([1 3],:) %输出第一行和第三行所有元素
A=[A,[1;2;3]] %加入一条新的行列式
A=(:) %输出一条列向量
计算数据:
A=[1 2;3 4;5 6]
1 ./ A %.在这里代表只对A中的各个元素进行计算
1 / A %代表对矩阵A进行计算
log(A) %表示对A中的各个元素进行以e为底的对A中的元素进行指数运算
exp(A) %表示计算A中的各个元素以e为底的幂次方
abs(A) %对A中的元素绝对值
A' %表示对A矩阵的转置
A=[1 2 3 4]
max(A) %输出A矩阵中最大的元素
[a,b]=max(A) %a表示A最大的元素,b表示在A中的索引
//注意:如果max的是一个矩阵,输出的会是每列的最大值
A<3 %表示对A中的每个元素进行比对计算输出的会是1 1 0 0
find(A<3)会输出小于3的所有索引
magic函数会制造一个幻方矩阵:矩阵的每行每列对角线相加都相等
[r,c]=find(A<3) %r代表行c代表列,会输出满足元素的行和列
help可以帮助你记起忘记的函数功能例如help find就能输出关于find函数的解释
A=[1 2;3 4;5 6]
sum(sum(A)) %输出所有元素相加之和
sum(A,1) %输出每一列相加之和以行向量输出
sum(A,2) %输出每行之和以列向量输出
prod(A) %输出所有元素相乘之积
floor(A) %输出所有元素向下取整
就是四舍五入
ceil(A) %输出所有元素向上取整
rand(3) %输出随机数的3*3矩阵
max(A,[],1) %输出每列的最大一个数成行向量(1在这代表第一维度也就是列)
max(A,[],2) %输出每行的最大一个数成列向量(2在这代表第二维度也就是阶)
(如果只有max(A)会默认为求每列最大值)
max(max(A)) %输出A矩阵中最大的元素
将A变为向量也是一样的答案max(A(:))
flipud函数是将矩阵上下倒转:
A =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> flipud(A)
ans =
4 14 15 1
9 7 6 12
5 11 10 8
16 2 3 13
数据绘制:
先做出一个正弦函数和一个余弦函数:
>> t=[0:0.01:0.98];
>> y1=sin(2*pi*4*t);
>> plot(t,y1);
>> y2=cos(2*pi*4*t);
>> plot(t,y2);
想要两个函数同时出现需要引入一个hold on;
最后分别输入两个函数就能显示两个函数线路图。
在这个基础上我讲其中一个函数图用红色线表示(plot(t,y2,'r');)
然后设置x,y坐标系:
>> hold on;
>> plot(t,y1);
>> plot(t,y2,'r');
>> xlabel('time');
>> ylabel('value');
>> legend('sin','cos'); %将分好的线备注
>> title('my plot'); %命名标题
>> print -dpng 'myPlot.png' %下载图片
>> cd 'C\Userprint -dpng 'myPlot.png' %保存到指定文件夹
最后如果你想要关掉这个图片输入close就行了
>> figure(1); plot(t,y1); %单独一个图片绘制y1
>> figure(2); plot(t,y2); %单独一个图片绘制y2
>> subplot(1,2,1); %将一个图片分为两个区域(第一个1代表第一个图片,第二个数字2代表划分为两个区域,第三个数字1代表对第一个区域绘制)
>> plot(t,y1); %在第一个区域绘制y1
>> subplot(1,2,2); %对第二个区域绘制
>> plot(t,y2); %在第二个区域绘制y2
提一下axis函数:例如现在我输入axis([0.5 1 -1 1])意思就是将第二个图的横坐标的范围改为0.5到1。
clf函数:会将一副图清空。
这里再提一下将矩阵绘制图
imagesc(magic(15)),colorbar,colormap gray;
通过上面代码可以将矩阵可视化。
控制语句:
先设置一个v向量>>v=zeros(10:1)
for循环语句:
for i=1:10, %i从1到10
v(i)=2^i;
end;
while循环语句:
i=1;
while i<=5,
v(i)=100;
i=i+1;
end;
break语句:
>> i=1;
while true,
v(i)=199;
i=i+1;
if i==6,
break;
end;
end;
if-else语句:
>> v(1)=2;
>> if v(1)==1,
disp('这是1');
elseif v(1)==2,
disp('这是2');
else
disp('这既不是1也不是2');
end;
>>这是2
注:如果你想要退出octave可以输入quit或者exit。