机器学习课堂笔记(十七)
<matlab>
cvPredictions = (pval < epsilon);
fp = sum((cvPredictions == 1) & (yval == 0));
<matlab>
cvPredictions == 1
和yval == 0
是长度
n
=
length(cvPredictions)
length(yval)
的逻辑向量
((cvPredictions == 1) & (yval == 0));
是长度n
的逻辑向量
x(i)
和
θ(i)
是列向量
<matlab>
for i=1:num_movies
idx=find(R(i,:)==1);
Theta_temp=Theta(idx,:);
Y_temp=Y(i,idx);
X_grad(i,:) = (X(i,:)*Theta_temp'-Y_temp)*Theta_temp;
end
for j=1:num_users
idx=find(R(:,j)==1);
X_temp=X(idx,:);
Y_temp=Y(idx,j);
Theta_grad(j,:) = (Theta(j,:)*X_temp'-Y_temp')*X_temp;
end
<matlab>
1、计算X_grad(i,:)
时,将Theta看作样本集
2、计算Theta_grad(j,:)
时,将X看作样本集
3、X(i,:)*Theta_temp'
对应Y_temp
4、Theta(j,:)*X_temp'
对应Y_temp'
对于右图的情况,先增加特征,如果学习曲线变成左图,可以进一步进行基础设施了改善算法。
批量梯度下降计算
θj
需要
(x(1),y(1)),(x(2),y(2)),…,(x(m),y(m))
随机梯度下降计算
θj
需要
(x(i),y(i))
1、随机下降将会在靠近全局最小值附近区域内移动
2、在更新样本的同时,
θj
也在同步更新
3、Repeat执行1-10次,取决样本的大小
小批量梯度下降计算
θj
需要
(x(i),y(i)),(x(i+1),y(i+1)),…,(x(i+b),y(i+b))
使用向量化方法能够实现并行计算b个样本值
每次计算
cost(θ,(x(i),y(i)))
,每1000次计算1次平均值并作图
1、更小的
α
振荡更小,得到更好的参数
2、计算最后5000个
cost(θ,(x(i),y(i)))
的平均值比计算1000个得到的曲线更平滑
3、曲线上下振动时,增加用来平均的
cost(θ,(x(i),y(i)))
更能够看出趋势
4、代价值上升时,换更小的
α
θ
能够随着用户习惯的变化自动调适
在线学习
θ
,对于
x
,预测
4台机器每台机器计算
∑400i=1(hθ(xi)−y(i))x(i)j
中的100个求和项