课程地址: https://www.coursera.org/learn/machine-learning/home/welcome
作业 Vincent code exercise
第一周 简介和一元线性回归
1.1 机器学习定义(Tom Mitchell)
E : 经验, 指训练样本
T : 目标任务,一类机器学习解决的问题
P : 衡量目标任务T的性能
举例: 关于垃圾邮件的机器学习
T: 将邮件标记为垃圾或者非垃圾
E: 查看当前邮箱中邮件的是否垃圾的标签
P: 标记垃圾邮件的准确率
1.2 机器学习分类
- 监督学习 (Supervised Learning)
- 回归问题 regression , 例如: 根据房屋面积和价格的数据样本预测给定面积的房价的问题,price =fx(area) 房价是关于面积的函数.
- 分类问题 classification, 例如: 根据肿瘤大小预测肿瘤是良性还是恶性
- 非监督学习
- 没有明确目标的训练方式,例如:对新闻进行分类
- 举例:降噪函数
[W,s,v] = svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x')
(懵逼)
- 其他
- 强化学习 Reinforcement Learning 根据反馈进行调整
- Recommender system
1.3 模型描述
x(i) 表示第i 个训练样本,的输入参数
y(i) 表示第i个训练样本的输出参数
m 训练集样本数量,样本的行数
h (Hypothesis) 假设函数,预测结果的函数
j 代价函数,描述假设函数与训练样本输出值的差异
1.4 一元线性回归
预测函数
hθ(x)=θ0+θ1x
代价函数
J(θ0,θ1)=2m1∑i=1m(hθ(x(i))−y(i))2
目标
minθ0,θ1(j) 获得最小代价
参数更新
θj=θj−α∂θj∂J(θ0,θ1)
带入函数求导之后:
θj=θj−αm1∑i=1m(hθ(x(i))−y(i))⋅x(i)
使用临时变量.不要使用被更新的θ值带入更新公式
第二周 多元线性回归
2.1 公式
样本
x=[x0 x1 x2 x3 … xn]
x0=1
参数
$\theta=\begin{bmatrix}
\theta_0 \\
\theta_1 \\
\theta_2 \\
… \\
\theta_n \\
\end{bmatrix}
$
$y=\begin{bmatrix}
y_0 \\
y_1 \\
y_2 \\
… \\
y_n \\
\end{bmatrix}
$
X=11…1x1(1)x1(2)x1(m)x2(1)x2(2)x2(m)x3(1)x3(2)x3(m)…xn(1)…xn(2)…xn(m)
预测函数
hθ(x)=θ0x0+θ1x1…θnxn=θTx
转换为向量:
hθ(x)=Xθ
代价函数
J(θ)=2m1∑i=1m(hθ(x(i))−y(i))2
目标
minθ0,θ1…θn(j) 获得最小代价
J = 1/(2*m) * sum((X*theta - y).^2);
参数更新
θj=θj−α∂θj∂J(θ0,θ1…θn)=θj−α∂θj∂J(θ)
带入函数求导之后:
θj=θj−αm1∑i=1m(hθ(x(i))−y(i))⋅xj(i)
转换为向量
θ=θ−mαXT(Xθ−y)
theta = theta - (alpha/m) * (X'*(X*theta -y))
2.2 特征缩放
- 将特征值限制在近似范围,降低梯度下降的步数.进行特征缩放后轮廓图将会更规则提高梯度下降的效率.
- 将特征值缩放到 −1≤xi≤1
- 均值归一 常用公式 xi=max(x)−min(x)xi−avg(x)
% 均值归一
% x-均值/标准差
function xi= normalization(x)
avg=sum(x)/length(x);
s=max(x) - min(x);
xi=(x - avg)/s;
2.3 学习速率α
- 太小会导致收敛过慢
- 太大J函数不会在每次迭代进行减少.无法收敛
- 尝试 0.001,0.01,0.1,1,0.03等
- 绘制成本迭代图形观察收敛情况 ( x=迭代次数,y=j函数的值)
- 自动收敛测试,成本减少少于 10−3则可以认为函数收敛收敛
2.4 多项式回归
多项式回归更好的拟合数据
- 根据数据可以选择合适的多项式回归 h(θ)=θ0+θ1x+θ1x2
- 根据数据可以选择合适的多项式回归 h(θ)=θ0+θ1x+θ1x
2.5 正规方程
求J函数的偏导数,并置为0,即曲线斜率为0的点.即可算出对应的θ值. (补微积分:()
- 优点
- 一次即可算出最优解
- 不需要进行特征缩放
- 不需要选择学习速率
- 适合线性回归
- 缺点
- 如果n非常大,效率会急剧降低
- 如果特征类型大于10000建议尝试梯度下降算法
- 不太适合比较复杂的学习算法
- 矩阵不可逆的情况,
设计矩阵X 为 Rm×(n+1)
X=111x1(1)x1(2)x1(3)x2(1)x2(2)x2(3)x3(1)x3(2)x3(3)
y为 Rm
θ=(TTX)−1XTy
pinv(X'*X)*X'*y
%X' X的转置 X'=transpose(X)
2.6 Octave 使用
这部分比较简单,部分函数
disp
打印变量
pinv
求逆矩阵,一定会返回
inv
求逆矩阵,奇异矩阵会报错
transpose
转置 ,和 A'
效果一样
eye(m)
生成单元矩阵
ones(m,n)
生成均为1 的矩阵或者向量
zeros(m,n)
生成均为0的矩阵或向量
rand(m,n)
生成随机矩阵
A(:,1)
取列向量
A(2,:)
取一行
plot(x,y)
绘制平面图
surf(x,y,z)
绘制表面图
contour (x,y,z)
绘制轮廓图
whos
查看当前定义变量
who
查看当前定义的变量名
mean
求平均值
std
求标准差
循环语句
for i=1:10,
v(i)=2^i;
end;
条件判断
>> if v(1) == 1,
> disp('the value is one');
> elseif v(1) == 2,
> disp('the value is two');
> else
> disp('the value is not one or two');
> end;
2.7 数学知识补充
2.7.1 求导数
导数的计算在曲线某个点的斜率
例如 : 求 f(x)=x2的导数 f’(x)
f’(x)=δf(x+δ)−f(x)f’(x)=δ(x+δ)2−x2f’(x)=δx2+δ2+2xδ−x2f’(x)=δδ2+2xδf’(x)=2x
2.7.2 导数法则
函数 |
导数 |
- |
法则 |
函数 |
导数 |
c(常数) |
0 |
|
乘以常数 |
cf |
cf′ |
x (直线) |
1 |
|
幂次方法则 |
xn |
nxn−1 |
ax |
a |
|
加法法则 |
f+g |
f’+g′ |
x2(平方) |
2x |
|
减法法则 |
f−g |
f’−g′ |
x(平方根) |
21x2−1 |
|
积法则 |
fg |
fg’+f’g |
nx |
n1x−n1−n |
|
积法则 |
fg |
fg’+f’g |
ex(指数) |
ex |
|
商法则 |
gf |
g2f’g−g’f |
ax |
ln(a)ax |
|
倒数法则 |
f1 |
f2−f’ |
ln(x)(对数) |
x1 |
|
|
|
|
loga(x) |
xln(a)1 |
|
链式法则(为 “复合函数”) |
f∘g |
(f’∘g)g′ |
sin(x)(三角) |
cos(x) |
|
链式法则 |
f(g(x)) |
f’(g(x))g’(x) |
cos(x) |
−sin(x) |
|
链式法则 |
|
dxdy=dudydxdu |
tan(x) |
sec2(x) |
|
|
|
|
sin−1(x) |
1−x21 |
|
|
|
|
cos−1(x) |
1−x2−1 |
|
|
|
|
tan−1(x) |
1+x21 |
|
|
|
|
参考 导数表
2.7.3 矩阵乘法
A=[a1,1a2,1a1,2a2,2a1,3a2,3]
B=b1,1b2,1b3,1b1,2b2,2b3,2
C=AB=[a1,1b1,1+a1,2b2,1+a1,3b3,1a2,1b1,1+a2,2b2,1+a2,3b3,1a1,1b1,2+a1,2b2,2+a1,3b3,2a2,1b1,2+a2,2b2,2+a2,3b3,2]
- 当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘。
- 矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。
- 乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。
用A的行去乘B的列.
#第三周 逻辑回归
3.1 二元分类
- h函数h(θ)=θTx
- 逻辑函数g(sigmoid function) ; g(z)=1+e−z1
- 将g应用到预测函数 h(θ)=1+e−θTx1
- 决策边界
- θTx>0=>y=1
- 非线性决策边界 h(θ)=g(θ0+θ1x1+θ2x2+θ3x12+θ4x22) 当θ=[−1 0 0 1 1]则是个圆.
- 根据数据集选择合适的假设函数
- 通过多项式获取更复杂的决策边界
- 代价函数,将y=1和y=0两种情况合并为一个方程Cost(h(θ(x),y))=−ylog(hθ(x))−(1−y)log(1−hθ(x))
3.2 预测函数
h(θ)=g(θTx)
z=θTx
g(z)=1+e−z1
h(θ)=1+e−θTx1
3.3 代价函数
j(θ)=−m1∑i=1m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]
转换为向量
h=g(Xθ)
j(θ)=m1(−yTlog(h)−(1−y)Tlog(1−h))
3.4 梯度下降公式
θj:=θj−mα∑i=1m[(hθ(x(i))−y(i))xj(i)]
转换为向量:
θ:=θ−mαXT(g(Xθ)−y)
3.5 多元分类
3.6 过度拟合
- underfit (high bais) 高偏差
- overfit 过度拟合
- 出现的问题
- J代价函数趋近于0
- 无法正确对新的数据进行好的预测
- 解决
- 减少特征数量
- 正规化
- 减小θ
- 当有很多稍微有点用的特性时效果很好
3.7 正规化
用来解决过度拟合(overfitting)问题.引入λ来降低θ的影响.
特别注意: 在代价函数和梯度下降函数中,正规化都需要排除θ0
3.7.1 正规化线性回归
-
代价函数
正规化的j 函数后面加入,正规化参数 λ∑j=1nθj2
J(θ)=2m1∑i=1m(hθ(x(i))−y(i))2+λ∑j=1nθj2
-
梯度下降函数
正规化不处理θ0
θ0=θ0−α[m1∑i=1m(hθ(x(i))−y(i))⋅x0(i)
当前j>0 时
θj=θj−α[m1∑i=1m(hθ(x(i))−y(i))⋅xj(i)+mλθj]
进行
θj=θj(1−αmλ)−αm1∑i=1m(hθ(x(i))−y(i))⋅xj(i))
-
正规方程解法
Ln+1×n+1=0 … 111θ=(XTX+λ⋅L)−1XTy
如果m<n XTX 不可逆.但是加上λ⋅L 则是可逆的.大佬已经证明了.
3.7.2 正规化逻辑回归
- 代价函数
j(θ)=−m1∑i=1m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]+2mλ∑i=1nθj2
向量化:
z=g(Xθ)
J(θ)=m1(−yTlog(z)−(1−y)Tlog(1−z)+2mλ(θTθ)
第二个公式θ0=0
- 梯度下降函数
θ=θj(1−αmλ)−αm1∑i=1m(hθ(x(i))−y(i))⋅xj(i))
向量化:
θ=m1XT(z−y)+mλ⋅θ
第二个公式θ0=0,用于移除θ0的影响
3.7.3 使用内建优化函数fminunc
创建用于优化的函数返回,代价值和θ的微分值,function [J, grad] = costFunction(theta, X, y)
. 内部会选择算法
算出最优化的θ值
θ=m1∑i=1m(hθ(x(i))−y(i))⋅xj(i)
%代价函数
J=(1/m) * ( -y' * log(z) - (1-y)' * log(1-z) ) + (lambda/(2*m)) * (theta_0' * theta_0);
%梯度函数
grad = 1/m * X'*(z - y) + (lambda / m) .* theta_0;
% Set options for fminunc
options = optimset('GradObj', 'on', 'MaxIter', 400);
% Run fminunc to obtain the optimal theta
% This function will return theta and the cost [theta, cost] = ...
fminunc(@(t)(costFunction(t, X, y)), initial theta, options);
3.7.4 选择合适的λ
- 如果λ设置过大无法拟合数据,因为对于θ的调整对整体的影响力有限.
- 如果λ设置过小则会过拟合,没有起作用
- 可以通过对训练集进行预测查看准确率来选择合适的值
使用微信扫描二维码完成支付