吴恩达机器学习笔记
吴恩达机器学习
监督学习
分类问题
回归问题(线性回归/单变量线性回归)
无监督学习
聚类算法
鸡尾酒会算法
符号含义
m 训练样本的数量
n 特征量的数目
x 输入变量/特征
y 输出变量
(x,y) 一个训练样本
(x(i),y(i)) 第i个训练样本
x(i) 第i个训练样本
xj(i) 第i个训练样本的第j个特征量的值
h 假设函数
θi 模型参数
线性回归模型
假设函数
hθ(x) = θ0 + θ1x
模型参数
θ0,θ1
代价函数/平方误差函数
J(θ0,θ1) = 1/2m · ∑(hθ(x(i))-y(i))2
目标函数
minimize(θ0,θ1) J(θ0,θ1)
梯度下降法的定义
反复做这一步,直到收敛。更新参数θj
:= 赋值
= 真假判断
α 学习效率,用来控制梯度下降时,我们迈出多大的步子。控制我们以多大的幅度来更新参数θj
θj := θj - α·∂J(θ0,θ1)/∂θj (for j = 0 and j = 1)
同步更新。同时更新θ0和θ1,以上式子拆分如下:
temp0 := θ0 - α·∂J(θ0,θ1)/∂θ0
temp1 := θ1 - α·∂J(θ0,θ1)/∂θ1
θ0 = temp0
θ1 = temp1
!! 以下为错误更新方式。非同步更新
temp0 := θ0 - α·∂J(θ0,θ1)/∂θ0
θ0 = temp0
temp1 := θ1 - α·∂J(θ0,θ1)/∂θ1
θ1 = temp1
回归的梯度下降法
梯度下降法
θj := θj - α·∂J(θ0,θ1)/∂θj (for j = 0 and j = 1)
线性回归代价函数
J(θ0,θ1) = 1/2m · ∑(hθ(x(i))-y(i))2
结合 ---> 回归的梯度下降法
θ0 := θ0 - α/m·∑(hθ(x(i))-y(i))
θ1 := θ0 - α/m·∑(hθ(x(i))-y(i))·x(i)
正规方程组方法
多元线性回归
假设函数
hθ = θ0 + θ1x1 + θ2x2 + ... + θnxn
hθ = θ0x0 + θ1x1 + θ2x2 + ... + θnxn (x0 = 1)
x = [x0 x1 x2 ... xn]T
θ = [θ0 θ1 θ2 ... θn]T
hθ(x) = θTx
特征缩放
为了梯度下降更快,避免等高线畸形太严重,尽量为圆形。
特征缩放的目的是将特征的取值约束到-1到+1的范围内,-1<=xi<=1
如果一个特征在 -3到+3的范围内,这个范围是可以接收的
-1/3到+1/3还可以接受
均值归一化
举例:
xi卧室有1~5间卧室不等,平均每个xi占有2间,x2拥有#bedrooms间,则:
x2 = (#bedrooms -2 )/5
(x1 - u1) / s1
u1是训练集中特征x1的平均值
s1是该特征值的范围(标准差)
自动收敛测试
J(θ)如果一步迭代减小的数值小于ε,就判断函数已收敛。ε可以看作为10-3
学习率太小,收敛太慢,
学习率太大,有可能出现震荡收敛,或者发散
多项式回归
正规方程法
J(θ) = aθ2 + bθ + c
Octave
disp(a) 打印a
disp(sprintf('2 decimals:%0.2f',a))
format long 让字符串显示默认的位数
format short 让字符串显示较少的位数
A = [1 2;3 4;5 6] 3行2列的矩阵A
V = 1:0.1:2 1行11列的矩阵
V = 1:6 1行6列的矩阵
ones(2,3) 2行3列元素为1的矩阵
zeros(2,3) 2行3列元素为0的矩阵
2ones(2,3) 2行3列元素为2的矩阵
rand(1,3) 1行3列的元素为0-1的随机矩阵
rand(3) 3x3随机矩阵
randn(1,3) 3个元素服从高斯分布;均值为0;标准差或方差为1
w = -6 + sqrt(10) * randn(1,10000) 1个有10000个元素的向量,均值为6,方差为10,标准差是根号10
hist(w) 绘制w的直方图
hist(w,50) 绘制50个直方图
eye(4) 生成4x4单位矩阵
help eye 帮助
size(w) 返回行和列,1行2列
size(w,1) 返回行
size(w,2) 返回列
length(A) 最大维度的大小
pwd 打印当前路径
cd ‘C:\Users\11306\Desktop’ 切换路径到桌面
load filename/load('filename') 加载文件
who 显示所有变量
whos 显示所有变量更详细信息
clear x 删除x变量
clear 删除工作空间的所有变量
save hello.mat v 将v变量存储至文件hello.mat
save hello.txt v -ascii 存储为ascii形式
A(3,2) 返回A中索引为3,2的数值
A([1 3]😅 返回第1,3行元素
A(😃 把所有元素放入一个列向量
C = [A B] 合并,B在右侧C = [A , B]
C = [A ; B] 合并,B在下侧
AB 矩阵相乘
A .* B 点乘,对应元素相乘
A .^ 2 每个元素平方
1 ./ A A中每个元素求倒数
log(A) A中每个元素求对数运算
exp(A) A中每个元素以e为底的幂运算
abs(A) 绝对值
-A 乘-1
A + ones(length(A),1) 将A中每个元素+1 ;A+1
A' A的转置
max(A) 返回每列最大元素
[val,ind] = max(A) 返回每列最大元素和所引值
A < 5 返回每个元素的0/1
find(A < 5) 返回序号;序号是从上向下,从左向右数过来的
[r,c] = find(A < 5) r存储行的索引,c存储列的索引
sum(A) 列求和
prod(A) 列求积
floor(A) 向下取整
ceil(A) 向上取整
magic(3) 幻方
max(rand(3),rand(3)) 相同索引位置取较大值组成3x3矩阵
max(A,[],1) 返回每列最大值;1代表从第1维度取值
max(A,[],2) 返回每列最大值;1代表从第2维度取值
max(max(A)) A中最大值;max(A(😃)
flipud(A) 矩阵A垂直翻转
pinv(A) A的逆矩阵
数据绘制
demo
t=[0:0.01:0.98];
y1 = sin(2pi4t);
plot(t,y1);
y2 = cos(2pi4t);
hold on;
plot(t,y2,'r');
xlabel('time');
ylabel('value');
legend('sin','cos') %右上角线条标注
title('my plot')
print -dpng 'myplot.png' %保存图像
close
figure(1);plot(t,y1); %为图像标号,打开多个图像
figure(2);plot(t,y2);
subplot(1,2,1); %将图像框分成一个1x2的格子,现在使用第一个格子
plot(t,y1);
subplot(1,2,2);
plot(t,y2);
axis([0.5 1 -1 1]) %x刻度范围0.5-1,y刻度范围-1~1
clf %清除一幅图像
imagesc(magic(3)) %画一幅3x3表格图像
imagesc(magic(3)),colorbar,colormap gray
for
v = zeros(10,1);
for i = 1:10,
v(i) = 2^i;
end;
indices = 1:10;
for i = indices,
disp(i);
end;
while
i = 1;
while i <= 5,
v(i) = 100;
i = i + 1;
end;
i = 1;
while true,
v(i) = 999;
i = i + 1;
if i == 6,
break;
end;
end;
if
if a == b,
pass;
elseif a == c,
pass;
else
pass;
end;
func
filename: func.m
文件内容
function y = func(x)
y = x^2;
函数返回多个值
function [y1,y2] = func(x)
y1 = x^2;
y2 = x^3;
添加路径
addpath('C:\Users\11306\Desktop')
K-means
1.簇分配
2.移动聚类中心