首页
IT
登录
6mi
u
盘
搜
搜 索
IT
机器学习之梯度下降算法
机器学习之梯度下降算法
xiaoxiao
2021-04-18
61
机器学习之梯度下降算法
算法背景:
以房价问题为由:
房价变化可能有多种因素比如说房屋面积,房屋位置,房间数量等:
我们假设一个向量x表示输入特征:x = [x0,x1.x2.......,xn],其中n为影响房价因素的数量
估计函数:
其中Θ为特征参数或者学习参数,该参数决定了特征变量Xi对估计的影响,用向量形式表示为:
为了使得估计值与实际的值差别最小:
,
我们建立一个函数去衡量输出模型的拟合效果,一般称为损失函数(loss functon)或者(cost function):
函数选择了最小二乘法的原理,我们要做的便是最小化损失函数,取得的Θ值便是我们需要的参数。
算法思想:
随机找一个点,沿着下降最快的方向走到一个局部最低点,因此Gradient Descent存在局部最优的缺点。
梯度的方向由J(Θ)对Θ的偏导数决定,可以得到参数的更新法则为:
此算法Θ 随机生成初始值,再根据更新法则不断迭代更新Θ的值,其中α是学习率,表征的是下降的速度,若太大则可能越过最低点,太小则学习的速率太慢容易陷入局部最优点。迭代实则是循环,我们应当设置一定的条件终止循环,比如说循环达到一定的次数,或者Θ更新的差分值低于某个值等。
另外,还需要提一点就是,当样本的数量达到一定的数量时,更新参数的计算量以及时间变大,因此一般选择随机梯度下降算法来增加参数的更新速率和频度,也即每次选取一定的训练样本进行更新计算,以便更快的收敛,随机梯度下降算法下降速度快,但不能收敛到全局最优,一般在最小值边缘徘徊。
代码实现python:
#coding=utf-8
#梯度下降算法的实现
import
numpy
as
np
import
matplotlib.pyplot
as
plt
#学习率设置
rate =
0.001
x_train = np.array([[
1
,
2
]
,
[
2
,
1
]
,
[
2
,
3
]
,
[
3
,
5
]
,
[
1
,
3
]
,
[
4
,
2
]
,
[
7
,
3
]
,
[
4
,
5
]
,
[
11
,
3
]
,
[
8
,
7
]]) y_train = np.array([
7
,
8
,
10
,
14
,
8
,
13
,
20
,
16
,
28
,
26
]) x_test = np.array([[
1
,
4
]
,
[
2
,
2
]
,
[
2
,
5
]
,
[
5
,
3
]
,
[
1
,
5
]
,
[
4
,
1
]]) m = np.shape(x_train)[
1
]
#初始化参数
theta = np.random.normal(
size
=m)
#定义计算预测值的函数 h(x) = theta * x
def
h
(x):
return
np.dot(theta
,
x.T)
#梯度下降的规则是:
#J对theta的导数是: (h(x)-y)*x
#theta = theta - alpha * (h(x)-y)*x
#设置了两个迭代条件:
# 循环次数达到一定数目
# theta更新差低于某个数
for
i
in
range
(
100
): theta_old = np.zeros(m)
for
x
,
y
in
zip
(x_train
,
y_train): theta_old = theta_old +rate *(y-h(x))* x
if
(np.dot((theta_old)
,
(theta_old).T)<
0.001
):
break
theta+=theta_old
#更新梯度参数
plt.plot([h(xi)
for
xi
in
x_test])
#将参数运用到测试集里
plt.show()
结果演示:
结论:可以看出数据越来越接近。
转载请注明原文地址: https://ju.6miu.com/read-675005.html
技术
最新回复
(
0
)