机器学习(一):简单线性回归
1. 获取数据
假设你是一家连锁店的老板,希望在另一个城市开分店,现在有一组城市的人口与利润的关系图, 通过这些数据预测不同人口的城市的利润 数据可以通过这个连接下载
# 导入模块 |
如图:
2.梯度下降
梯度下降: 假设 y = f(x), 求y最小值时候的x. 则 梯度 Δ = f'(x) 设定好一定的步长 λ x <-- x - λ*Δ 代理初始的x后每次迭代x都往梯度下降的方向挪动一定的步长(其中Δ控制方向)。 迭代多次后,当两次x带入后获取的y数值相差极小时,此时的x为最优解
3.实现简单的线性回归
只有一个因素影响数据, 假设直线 Y = theta0 + theta1X1
转换为向量的思想,则:Y = theta (1, X)
误差计算方法:
即:
def computeCast(X, Y, theta): |
使用梯度下降的方法调节参数theta,获取最小数据差异的结果
具体为:
根据复合函数求导,对误差e求theta偏导,获取梯度Δ:
根据梯度下降的公式:x <-- x - λ*Δ,每次迭代,重复梯度下降的过程. 代码流程为:
- 设定初始的theta值,迭代次数iters,步长alpha
- 根据 梯度下降的公式不断修改 theta
- 根据迭代次数重复上一个步骤
def gradientDescent(X, Y, theta, alpha, inters): |
4. 观察结果
设定一些参数,运行
theta = np.matrix(np.array([0,0])) |
根据得到的theta画出预测的直线
x_array = np.linspace(data.Populcation.min(), data.Populocation.max(), 1000) |
如图:
5.查看迭代次数与误差的关系
# 尝试画出 iters - cost 的曲线 |
如图: