一. 监督学习与无监督学习
监督学习 : 人为的给算法一个都是正确答案的数据集,然后通过算法给出更多数据相对应的预测值。例如,我们给它一个房价数据集,在这个数据集中的每个样本是在市场中调查得来的数据,算法的目的就是给出更多的正确答案,例如为你朋友想要卖掉的这所新房子给出估价。
回归问题:结果是线性的(我们设法预测出一个连续值的结果) e.g. 房价问题
分类问题:结果是离散的(我们设法预测出一个离散值的结果,如0,1)e.g. 根据特征判断肿瘤类型
无监督学习 : 人为的给算法一堆无任何标记的数据,最后得到其中的结构,如分簇
鸡尾酒算法 : 从有两个声音源的录音中,把两种声音源分离开,比如综艺中在合唱的人群里分离出特定人的声音
[W,s,v] = svd((repmat(sun(x.*x,1),size(x,1),1).*x)*x');
svd:奇异值分解的缩写 (已内置于Octave)
二. 线性回归模型
m = 训练样本的数量
x = 输入变量/特征
y= 输出变量/目标变量
(x,y) = 一个训练样本
(x(i),y(i) )= 特定的训练样本 (第i行)
假设函数:Hypothesis:
hθ(x)=θ0+θ1*x (θ0和θ1是模型参数)
因此要确定θ0和θ1的值使得 J(θ0,θ1)=((1/2m)*Σ(hθ(x)-y)2最小,即算法得出来的值和实际值相差最小
代价函数:J(θ0,θ1)
梯度下降算法:针对找函数J的最小值的算法
repeat until convergence{
θj := θj - α*(∂/∂θj)*J(θ0,θ1) (for j = 0 and j = 1)
# :=表示赋值
#α 一个被称为学习率的数字,控制梯度下降时迈多大步子,值越大下降越快,永远大于0
#需要同时更新两个θ(设置temp0,temp1中间变量)
}
(∂/∂θj)*J(θ0,θ1)=(∂/∂θj)*(1/2m)*Σ(hθ(x)-y)2
=(∂/∂θj)*(1/2m)*Σ(θ0+θ1x-y)2
经过偏导计算可以得:j=0 也就是(θ0) : (∂/∂θ0)*J(θ0,θ1)=(1/m)*Σ(hθ(x)-y)
j=1 也就是(θ1) : (∂/∂θ1)*J(θ0,θ1)=(1/m)*Σ[(hθ(x)-y)*x]
再将上面的结果带入到代码中:
repeat until convergence{
θ0 := θ0 - α*(1/m)*Σ(hθ(x)-y)
θ1 := θ1 - α*(1/m)*Σ[(hθ(x)-y)*x]
#note: 要同时更新θ0和θ1
#梯度下降容易陷入局部最优,但是线性回归问题的代价函数永远是凸函数,没有局部最优,只有全局最优,可以放心用
#有时也被称作Batch梯度下降
}
------------恢复内容结束------------