机器学习-吴恩达

2019-12-17  本文已影响0人  颜炎严言研

前言



监督学习与无监督学习(P3-P4)



代价函数(P5-P8)

代价函数

梯度下降(P9-P11)

单参数的原理

多元梯度下降(P18-P19)



特征缩放(P20)

Mean normalization(均值归一化)


学习速率(P22)



特征多项式回归(P22)

特征多项式回归公式如下:
h_{\theta} =\theta_{0}+\theta_{1}x_{1}+\theta_{2}x_{2}^{2}+\theta_{3}x_{3}^{3}+...+\theta_{n}x_{n}^{n}即这里的参数不再是一阶的,含有高次项。



正规方程(P23)

梯度下降法:适合特征值很多的情况;需要选择\alpha的值,有时拟合过程会比较慢
标准方程法:操作很方便;但是当特征值很多时,矩阵转置的算法复杂度很高,约为O(n^{3})



正规方程不可逆(P24)

redundant features : 存在线性相关的特征值
Too many features : m\leqslant n,m是训练数据的组数,n是特征值的个数



Octive基本操作(P26)

下载Octave,以下是Octive的一些基本操作

>>1==2
ans = 0
>>1~=2    %不等于是~=,而不是!=
ans = 1
>>1&&0    %与
ans = 0
>>1||0    %或
ans = 1
>>xor(1,0)    %异或
ans = 1
>>PS1('>>');    %命令提示行会变简洁
>>a=3     %赋值并打印
a =  3
>>a=3;    %加分号则不会打印
>>b='hi';
>>b     %打印b
b = hi
>>a=pi;
>>disp(a);     %另一种打印方法
 3.1416
>>disp(a)     %发现这里加不加分号都一样
 3.1416
>>disp(sprintf('2 decimals: %0.2f', a))     %打印,有点像c语言,但是用的是单引号
2 decimals: 3.14
>>format long     %打印长度为long
>>a
a =  3.141592653589793
>>format short    %打印长度为short
>>a
a =  3.1416
>>A=[1 2;3 4;5 6]     %输出一个3*2的矩阵
A =
   1   2
   3   4
   5   6
>>A=[1 2;     %另外一种输入方法
3 4;
5 6]
A =
   1   2
   3   4
   5   6
>>A=1:0.2:2    %以0.2的步长从1到2打印矩阵,是一个行矩阵
A =
    1.0000    1.2000    1.4000    1.6000    1.8000    2.0000
>>ones(2,3)     %打印一个2*3的矩阵,其中所有值都是1
ans =
   1   1   1
   1   1   1
>>A=2*ones(2,3)     %将上面的矩阵所有值乘2,赋给A
A =
   2   2   2
   2   2   2
>>A=rand(2,3)     %随机打印0-1之间的数
A =
   0.393924   0.046474   0.309188
   0.109174   0.188602   0.628519
>>A=randn(2,3)    %随机打印标准正态分布产生的数,均值为0,方差为1
A =
  -0.23444  -0.35377   0.36930
  -0.78721   0.57167   1.22516
>>hist(A)    %打印直方图
>>A=-6+sqrt(pi)*(randn(1,10000)); 
>>hist(A,100)     %将A按照100条的直方图打印出来
>> A=eye(3)      %eye命令打印单位矩阵
A =
Diagonal Matrix
   1   0   0
   0   1   0
   0   0   1
>> size(A)     %返回A的大小
ans =
   3   3


Octive移动数据(P27)

>> load featuresX.dat     %将数据导入Octive
>> who      %显示当前有哪些变量
Variables in the current scope:
a
>> whos             %显示当前变量的详细信息
Variables in the current scope:
   Attr Name        Size                     Bytes  Class
   ==== ====        ====                     =====  =====
        a           1x1                          8  double
Total is 1 element using 8 bytes
>> clear  a     %删除a变量
>> clear         %删除所有变量
>> A= 1:0.1:2;
>> save hello.mat A;       %存入磁盘,clear无法删除该变量
>> clear
>> whos      %clear无法删除磁盘中的变量
Variables in the current scope:
   Attr Name        Size                     Bytes  Class
   ==== ====        ====                     =====  =====
        A           1x11                        24  double
Total is 11 elements using 24 bytes
>> A=[1 2;3 4;5 6]
A =
   1   2
   3   4
   5   6
>> A(3,2)      %输出矩阵中的当个值
ans =  6
>> A(2,:)       %:表示该行或者该列所有数据
ans =
   3   4
>> A([1 3],:)     %输出第1,3行
ans =
   1   2
   5   6
>> A(:,2)=[10;11;12]      %可以用:直接对第二列直接赋值
A =
    1   10
    3   11
    5   12
>> A=[A,[11;12;13]]       %在A的右边新加一列
A =
    1   10   11
    3   11   12
    5   12   13
>> A(:)     %按列输出A
ans =
    1
    3
    5
   10
   11
   12
   11
   12
   13
>> A=[1 2;3 4;5 6];
>> B=[11 12;13 14;15 16];
>> C=[A B]              %将AB合并
C =
    1    2   11   12
    3    4   13   14
    5    6   15   16
>> C=[A;B]             %将AB合并,加分号为列合并
C =
    1    2
    3    4
    5    6
   11   12
   13   14
   15   16


计算数据(P28)

>> A.*B     %点表示对每个元素进行操作
ans =
   11   24
   39   56
   75   96
>> A'         %单引号表示转置
ans =
   1   3   5
   2   4   6
>> A=[1 2;3 4;5 6];
>> [r,c]=find(A<3)        %找出A矩阵中小于3的数
r =                       %返回行
   1
   1
c =                       %返回列
   1
   2
%find有其他更多的功能,可以通过help find来查询
>> a=[1:0.2:2];
>> sum(a)          %求和,若是二维矩阵,则返回每一列的和
ans =  9
>> prod(a)         %求乘积,若是二维矩阵,则返回每一列的乘积
ans =  9.6768
>> floor(a)        %向下四舍五入
ans =
   1   1   1   1   1   2
>> ceil(a)        %向上四舍五入
ans =
   1   2   2   2   2   2
>> M=magic(3)          %magic生成一个数独矩阵
M =
   8   1   6
   3   5   7
   4   9   2
>> max(M,[],1)          %这里的1表示维度,1是列
ans =
   8   9   7
>> max(M,[],2)           %同理,2也是代表维度,表示行
ans =
   8
   7
   9
>> max(M,[],3)          %3以及3以上则会输出整个矩阵
ans =
   8   1   6
   3   5   7
   4   9   2
>> max(max(M))      %输出二维矩阵中的最大的一个数
ans =  9
>> max(M(:));          %也是输出最大的一个数,这里是先变为列向量再找最大值
>> flipud(eye(3));     %flipud为矩阵的转置命令
>> pinv(A);          %求伪逆矩阵


数据绘制(P29)

>> t=[0:0.01:0.98];
>> y1=sin(2*pi*4*t);            
>> plot(t,y1);              %将y1函数绘图
>> y2=cos(2*pi*4*t);
>> plot(t,y2);
%将y2函数绘图,但y1函数图像会消失
>> plot(t,y1);
>> hold on;               %hold on命令会让y1图像不会消失
>> plot(t,y2,'r');          %然后在y1的基础上再画y2的图像,且这里用红色绘制y2
>> xlabel('time');        %标明横坐标为time
>> ylabel('value');      %标明纵坐标为value
>> legend('sin','cos');      %标明那个是sin曲线,哪个是cos曲线
>> title('my plot');         %取标题名字
>> cd 'C:\Users\Administrator\Desktop', print -dpng 'my plot.png'
%将绘制的图像保存至桌面,这里的路径可以改变
>> cd F:\Octaveprint         %也可以在F盘下创建一个Octaveprint文件夹,先用cd切换到该文件夹
>> print -dpng 'my plot.png'      %然后使用打印命令
>> figure(1); plot(t,y1);       %单独绘制图一
>> figure(2); plot(t,y2);       %单独绘制图二,这时会同时出现两个图
%不会像之前一样绘制图2时图1消失
>> subplot(1,2,1);        %分为一行两列来绘图,先绘制第一列
>> plot(t,y1);                %第一列绘制图1
>> subplot(1,2,2);        %第二列绘制图2
>> plot(t,y2);
>> axis([0.5 1 -1 1])      %改变坐标刻度,横轴改为[0.5,1],纵轴改为[-1,1]
>> A=magic(5);
>> imagesc(A)              %将矩阵可视化
>> imagesc(A),colorbar,colormap gray
>> close      %关闭绘图工具


控制语句(P30)

>> V=zeros(5,1)
V =
   0
   0
   0
   0
   0
>> for i=1:5,        %for循环语句,从1到5
      V(i)=2^i;
   end
>> V
V =
      2
      4
      8
     16
     32
>> i=1;
>> while i<=3,       %while循环
     V(i)=100;
     i=i+1;
   end;
>> V
V =
    100
    100
    100
    16
    32
%在F盘的function文件夹下创建一个函数
%function y =squareThisNumber(x);
%y=x^2;
>> cd F:\octave\function     %必须先切换到该文件夹下,才能调用该函数
>> squareThisNumber(5)    %调用该函数,可以求出函数值
ans =  25
%也可以添加默认路径,也就是配置环境变量,以后不用切换到指定的文件夹下也可以操作
>> addpath('F:\octave\function');
%再创建一个函数,注意Octive可以一个变量输出多个函数值
%此外可以用Windows自带的写字板创建函数,定义好之后保存到function文件夹下,注意加上后缀名 .m 
>> [y1,y2]=squareAndCubeThisNumber(5);     
>> y1
y1 =  25
>> y2
y2 =  125
%下面定义一个代价函数
%function J = costFunctionJ(X,y,theta);
%m=size(X,1);
%predictions=X*theta;
%sqrErrors=(prediction-y).^2;
%J=1/(2*m)*sum(sqrErrors);
>> X=[1 1;1 2;1 3];            %特征值矩阵
>> y=[1;2;3];          %实际取值
>> theta=[0;1];        %参数theta的取值
>>  j=costFunctionJ(X,y,theta)       %代价函数的值
j = 0
>> theta=[1;1];         %调整参数theta
>> j=costFunctionJ(X,y,theta)       
j =  0.50000              %代价函数值发生改变


向量化(P31)



假设陈述(P33)



决策边界(P34)



代价函数(P35)



简化代价函数和梯度下降(P36)

逻辑回归的代价函数

多分类(P38)



过拟合(P39)

过拟合与欠拟合

正则化(P40-P42)



神经网络(P44-P46)

神经网络

多元分类(P49)



神经网络的代价函数(P50)

神经网络的代价函数

反向传播算法(P51-52)

反向传播

梯度检验(P54)

检验过程

精准率与召回率(P67-P68)

精准率与召回率 trade off F1值

SVM(P70-P75)



反向传播算法


正向chuanbo

迁移学习

迁移学习

端到端的神经网络

端到端

卷积神经网络

卷积运算 滤波的意义 padding 填充方法 步长 三维卷积计算 三维卷积 单层卷积网络 各数据的表示 Max pooling计算方法
上一篇下一篇

猜你喜欢

热点阅读