参考:
1、绪论:初识机器学习
什么是机器学习
监督学习
课时4 无监督学习
数据聚类
第2章 单变量线性回归
模型描述
代价函数
代价函数(一)
代价函数(二)
梯度下降
梯度下降知识点总结
线性回归的梯度下降
线性回归梯度下降公式总结
Hypothesis: hθ=θ0+θ1x
Parameters: θ0,θ1
Cost Function: J(θ0,θ1)=12m∑mi=1(hθ(x(i))−y(i))2
Goal: minimizeJ(θ0,θ1)
Gradient descent algorithm:
θj:=θj−α∂∂θjJ(θ0,θ1)(forj=0andj=1)
Correct:Simultaneous update
temp0:θ0−α∂∂θ0J(θ0,θ1)
temp1:θ1−α∂∂θ1J(θ0,θ1)
θ0=temp0
θ1=temp1
第3章 线性回归回顾
矩阵和向量
第4章 配置
安装 MATLAB
参考:https://www.mathworks.com/licensecenter/classroom/machine_learning_od/
在 Windows 上安装 Octave
参考:http://www.gnu.org/software/octave/
GNU/Linux 上安装 Octave
参考:http://www.gnu.org/software/octave/
更多 Octave/MATLAB 资源
第5章 多变量线性回归
多功能
多元梯度下降法
多元梯度下降法演练 I – 特征缩放
import numpy as np
x=[[100,200,255],[120,30,70],[70,90,100],[200,110,40]]
x=np.asarray(x)
x_=(x-np.mean(x,0))/np.std(x,0)
x__=(x-np.min(x,0))/(np.max(x,0)-np.min(x,0))
x___=(x-np.mean(x,0))/np.max(x)
x____=x/np.max(x)-0.5
多元梯度下降法II – 学习率
特征和多项式回归
正规方程(区别于迭代方法的直接解法)
样本特征数 少于1W的 回归问题时,使用 θ=(XTX)−1XTy ,这种常规方法求参数,(替代梯度下降方法,但在分类问题时,只能使用梯度下降方法)
正规方程在矩阵不可逆情况下的解决方法
第6章 Octave/Matlab 教程
基本操作
>>>a=pi
a = 3.1416
>>>a
a = 3.1416
>>>disp(a)
3.1416
>>>disp(sprintf('2 decimals:%0.2f',a))
2 decimals:3.14
>>>disp(sprintf('6 decimals:%0.6f',a))
6 decimals:3.141593
>>>a
a = 3.1416
>>>format long
>>>a
a = 3.14159265358979
>>>format short
>>>a
a = 3.1416
>>>A=[1 2;3,4;5,6]
A =
1 2
3 4
5 6
>>>A=[1 2;
> 3,4;
> 5 6]
A =
1 2
3 4
5 6
>>>v=[1 2 3]
v =
1 2 3
>>>v=[1 ;2 ;3]
v =
1
2
3
>>>ones(2,3)
ans =
1 1 1
1 1 1
>>>C=2*ones(2,3)
C =
2 2 2
2 2 2
>>>C=[2,2,2;2,2,2]
C =
2 2 2
2 2 2
>>>w=zeros(1,3)
w =
0 0 0
>>>w=ones(1,3)
w =
1 1 1
>>>w=rand(1,3) # 0~1 之间的随机数
w =
0.70559 0.59973 0.82269
>>>w=randn(1,3) # 均值为0,方差为1 的随机数
w =
-0.28337 0.29570 0.41274
>>>w=-6*sqrt(10)*(randn(1,10000));
>>>hist(w) # 画直方图
>>>hist(w,60) # 直方图的条数为60
>>>v=1:10 # 1~10 默认步长为1 类似numpy range(1,10)
v =
1 2 3 4 5 6 7 8 9 10
>>>v=1:2:10 # 1~10 步长为2 类似numpy range(1,10,2)
v =
1 3 5 7 9
help eye % 帮助函数
eye % 单位矩阵
PS1(‘>>>’); % 改变显示
移动数据
who 显示当前工作空间所有变量
whos 显示更详细的信息
clear 变量名 % 删除该变量
clc %清除屏幕 不会清除变量
>>>A=[1 2;3 4;5 6]
A =
1 2
3 4
5 6
>>>size(A)
ans =
3 2
>>>size(A,1)
ans = 3
>>>size(A,2)
ans = 2
>>>size(A,3)
ans = 1
>>>length (A)
ans = 3
>>>B=[1 2 3;2 3 4]
B =
1 2 3
2 3 4
>>>length (B)
ans = 3
>>>size(B)
ans =
2 3
>>>pwd # 显示当前环境路径
ans = E:\
>>>cd 'E:\' # 切换路径
>>>pwd
ans = E:\
>>>ls # 显示目录
E:\ 的目录
>>> vim data.dat
'''
1 2 3
32 12 24
123 11 22
1 123 125
'''
>>>load data.dat # 加载数据
>>>load('data.dat') # 或者这样加载数据
>>>who # 显示当前工作空间中所有变量
Variables in the current scope:
data
>>>whos # 显示当前工作空间中所有变量(更详细)
Variables in the current scope:
Attr Name Size Bytes Class
==== ==== ==== ===== =====
data 4x3 96 double
Total is 12 elements using 96 bytes
>>>data
data =
1 2 3
32 12 24
123 11 22
1 123 125
>>>v=data(1:2,2:3)
v =
2 3
12 24
>>>save hello.mat v; # 将变量v保存成 hello.mat
>>>clear # 清除所有变量
>>>whos
>>>who
>>>load hello.mat # 加载文件
>>>whos # 查看内存变量
Variables in the current scope:
Attr Name Size Bytes Class
==== ==== ==== ===== =====
v 2x2 32 double
Total is 4 elements using 32 bytes
>>>v
v =
2 3
12 24
>>>save hello.txt v
vim hello.txt # 保存成txt文件
'''
# Created by Octave 4.2.2, Tue Apr 10 22:41:17 2018 GMT <unknown@unknown>
# name: v
# type: matrix
# rows: 2
# columns: 2
2 3
12 24
'''
# --------------------------------------------
>>>save hello.txt v -ascii % save as text(ASCII)
vim hello.txt
'''
2.00000000e+000 3.00000000e+000
1.20000000e+001 2.40000000e+001
'''
>>>A=[1 2;3 4;5 6]
A =
1 2
3 4
5 6
>>>A(3,2) # 第3行第2列的元素
ans = 6
>>>A(2,:) # 第2行
ans =
3 4
>>>A(:,2) # 第2列
ans =
2
4
6
>>>A([1,3],:) # 第1行与第3行
ans =
1 2
5 6
>>>A(:,2)=[10;11;12] # 修改第2列
A =
1 10
3 11
5 12
>>>A=[A,[100;101;102]] # 增加一列
A =
1 10 100
3 11 101
5 12 102
>>>A=[A;[10 20 30]] # 增加一行
A =
1 10 100
3 11 101
5 12 102
10 20 30
>>>A(:) # 获取A中的所有元素
ans =
1
3
5
10
10
11
12
20
100
101
102
30
>>>size(ans)
ans =
12 1
>>>A=[1 2;3 4;5 6]
A =
1 2
3 4
5 6
>>>B=[10 11;12 13;14 15]
B =
10 11
12 13
14 15
>>>C=[A B] # 按列合并
C =
1 2 10 11
3 4 12 13
5 6 14 15
>>>D=[A;B] # 按行合并
D =
1 2
3 4
5 6
10 11
12 13
14 15
计算数据
A*B %矩阵乘法
A.*B %矩阵对应元素相乘
A.^2 % 等价于 A.*A
1./A % 矩阵A中对应元素取倒数
log(A) % 矩阵A中的元素取对数(自然对数 e为底)
exp(A) % 矩阵A中的元素指数(自然对数 e为底)
abs(A) % 绝对值
A+1 % 矩阵A中的元素都加1 等价于 A+ones(size(A))
A’ % A 转置
max(A) 按列求最大值,等价于max(A,[],1) ; max(A,[],2)按行求和
A<3 # 小于3返回1(True)否则返回0(False)
find(A<3) # 找到A中小于3 的元素索引(A按列展开的)
[r,c]=find(A>7) # 返回索引r 行,c 列
A=magic (3) # 魔幻矩阵 每一行,每一列,对角线上的元素之和都相同
help find # 查看函数帮助
sum(A) # 按列求和 等价于sum(A,1) ; sum(A,2)按行求和
sum(sum(A.*eye(size(A)))) # 求主对角线上的元素之和
sum(sum(A.*flipud(eye(size(A))))) # 求次对角线上的元素之和
flipud(A) # 上下翻转矩阵
prod(A) # 按列求积 等价于prod(A,1) ; prod(A,2)按行求和
floor(A) # 向下取整 0.5–>0 ;0.2–>0;0.7–>0
ceil(A) # 向上取整 0.5–>1 ;0.2–>1;0.7–>1
round(A) # 四舍五入 0.5–>1 ;0.2–>0;0.7–>1
max(rand(3),rand(3)) # 返回2个随机矩阵中对应位置最大值组成新的矩阵
pinv(A) # 矩阵求逆(伪逆) A即使不可逆,也能求
inv(A) # 矩阵求逆, A即使不可逆,不能求
A =
1 2
3 4
5 6
>>>[val,ind]=max(A) # val返回的最大值,ind为返回的最大值位置
val =
5 6
ind =
3 3
>>>[val,ind]=max(A,[],1) # 按列求最大值
val =
5 6
ind =
3 3
>>>[val,ind]=max(A,[],2) # 按行求最大值
val =
2
4
6
ind =
2
2
2
>>>A<3 # 小于3返回1(True)否则返回0(False)
ans =
1 1
0 0
0 0
>>>find(A<3) # 找到A中小于3 的元素索引(A按列展开的)
ans =
1
4
>>>find(A(:)<3) # A(:) 矩阵A按列展开
ans =
1
4
>>>A=magic (3) # 魔幻矩阵 每一行,每一列,对角线上的元素之和都相同
A =
8 1 6 # 15
3 5 7 # 15
4 9 2 # 15
>>>find(A>7)
ans =
1
6
>>>[r,c]=find(A>7)
r =
1
3
c =
1
2
>>>A(1,1)
ans = 8
>>>A(3,2)
ans = 9
数据绘制
>> 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,y1,'r'); # 在前一次的绘画上继续绘画
>> xlabel('time')
>> ylabel ('value')
>> legend('cos','sin') # 图例,顺序对应
>> title('my plot')
>> print -dpng 'myplot.png' # 保存绘画
>> close # 关闭绘画
>> figure(1);plot(t,y1); # 第一张图上绘画
>> figure(2);plot(t,y2); # 第二张图上绘画(不会覆盖前一张图)
>> subplot(121);plot(t,y1,'-r');subplot(1,2,2);plot(t,y2,'*b');
>> axis([0.5 1 -1 1]) # 设置x轴 -0.5~1 ,y轴 -1~1
>> clf # 清除画板上的内容
>> A=magic(5)
>> imagesc(A) # 图片形式显示矩阵
>> imagesc(A),colorbar,colormap gray; # 转成灰度显示
控制语句:for,while,if 语句
>> v=zeros(10,1);
>> for i=1:10,
> v(i)=i^2;
> end;
>> for i=1:10;v(i)=i^3;end;
>> for i=1:10
> v(i)=i^3;
> end;
>> indices=1:5
indices =
1 2 3 4 5
>> for i=indices;disp(i);end;
1
2
3
4
5
# --------------------------------
v =
1
8
27
64
125
216
343
512
729
1000
>> i=1;
>> while i<=5;v(i)=100;i=i+1;end;
>> v
v =
100
100
100
100
100
216
343
512
729
1000
>> i=1;
>> while true;
> v(i)=999;
> i=i+1;
> if i==6;
> break;
> end;
> end;
>> i=1;
>> while true;
> v(i)=999;
> if i==6;
> break;
> end;
> end;
>> i=1;
>> while true;
> if mod(i,2)==0; # mod求余数
> continue;
> end;
> if i>length(v);
> break;
> end;
> v(i)=10;
> i=i+1;
> end;
# --------------------------
>> v=zeros(5,1);
>> v(2)=2;
>> if v(2)==2;
> disp('the value is two');
> elseif v(2)==1;
> disp('the value is one');
> else
> disp('the value is other');
> end;
exit 退出octave
quit 退出octave
>> function y=squareThisNumber(x);y=x.^2;end;
>> whos
>> squareThisNumber(5)
ans = 25
# --------或者-----------------
# 将 function y=squareThisNumber(x);y=x.^2;end; 写入一个名为squareThisNumber.m的文件中
# 切换到squareThisNumber.m所在目录下
# 直接运行
>> squareThisNumber(5)
ans = 25
# 或者添加squareThisNumber.m所在目录路径
>> addpath('C:\Users\Administrator')
# 直接运行
>> squareThisNumber(5)
ans = 25
#-----------------------------------
>> function [y1,y2]=squareAndCuberThisNumber(x);y1=x.^2;y2=x.^3;end;
>> x=[1 1;1 2;1 3]
x =
1 1
1 2
1 3
>> y=[1;2;3]
y =
1
2
3
>> theta=[0;1];
>> function J=costFunctionJ(X,y,theta);
> m=size(X,1);
> predictions=X*theta; % hypothesis
> sqrErrors=(predictions-y).^2; % squared errors
> J=1/(2*m)*sum(sqrErrors);
> end;
>> costFunctionJ(x,y,theta)
矢量
第7章 Logistic 回归
分类
假设陈述
决策界限
代价函数
简化代价函数与梯度下降
高级优化
多元分类:一对多
第8章 正则化
过拟合问题
dropout –随机减少训练特征
代价函数
线性回归的正则化
Logistic 回归的正则化
第9章 神经网络学习
非线性假设
模型展示Ⅰ
模型展示 II
例子与直觉理解Ⅰ
例子与直觉理解Ⅱ
多元分类
第10章 神经网络参数的反向传播算法
代价函数
反向传播算法
理解反向传播
使用注意:展开参数
来源:oschina
链接:https://my.oschina.net/u/4267970/blog/3209961