吴恩达机器学习(二)随机梯度下降算法练习
随机梯度下降算法理论推导(待完成)
在吴恩达的机器学习课程中,在介绍了批量梯度下降算法后,又介绍了随机梯度下降算法,随机梯度下降算法在处理大批量数据的时候运算速度优于批量梯度下降算法。
讲义中并未提及该算法的具体推导,仅列出了算法的流程:
Loop
{
for
i
=
1
i=1
i=1 to m,
θ
j
:
=
θ
j
−
α
(
y
(
i
)
−
h
(
x
j
(
i
)
)
)
x
j
(
i
)
\theta_j := \theta_j-\alpha(y^{(i)}-h(x^{(i)}_j))x^{(i)}_j
θj:=θj−α(y(i)−h(xj(i)))xj(i)
}
找个时间我会查找资料补全该部分的内容。个人理解,随机算法与批量梯度下降算法的不同点在于目标函数仅包含一个样本误差:
J
(
θ
0
,
θ
1
)
=
1
2
(
y
(
i
)
−
h
(
x
1
(
i
)
)
2
J(\theta_0,\theta_1) = \frac{1}{2}(y^{(i)}-h(x^{(i)}_1)^2
J(θ0,θ1)=21(y(i)−h(x1(i))2
然后用这样的目标函数来计算梯度。
实例
数据来源https://blog.youkuaiyun.com/weixin_43084928/article/details/82529596
%% 单变量随机梯度下降算法
% 作者:sddfsAv
% 日期:20190227
% Matlab版本:2018b
% 简介:吴恩达机器学习课程练习,数据集来源于https://blog.youkuaiyun.com/weixin_43084928/article/details/82529596
clear
clc
%% 导入原始数据
Data=csvread('Salary_Data.csv',1,0); % 读取csv数据文件
scatter(Data(:,1),Data(:,2),40,'MarkerEdgeColor',[0 .5 .5],...
'MarkerFaceColor',[0 .7 .7],...
'LineWidth',1.5); % 绘制散点图
title("Experience and Salary"); % 图表标题
xlabel("Experience(years)"); % x轴标题
ylabel("Salary(dollar)"); % y轴标题
hold on;
%% random gradient descnt
alpha=0.001; % 学习速率,过大会造成不收敛
theta=[0 0]'; % 参数初值
theta_data=[];
for j=1:2000
for i=1:length(Data(:,1))
theta0=theta(1,i);
theta1=theta(2,i);
theta(1,i+1)=theta0+alpha*(Data(i,2)-(theta0+theta1*Data(i,1)));
theta(2,i+1)=theta1+alpha*(Data(i,2)-(theta0+theta1*Data(i,1))).*Data(i,1);
end
theta_data=[theta_data theta];
theta(:,1)=theta(:,end);
if abs(theta(:,31)-theta(:,30))<1e-8
break;
end
end
plot(Data(:,1),theta0+theta1*Data(:,1))
拟合结果:
总结
之后按照课程矩阵推导,得到最小二乘法的解析解。