博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Bobo老师机器学习笔记第六课-梯度下降法
阅读量:4170 次
发布时间:2019-05-26

本文共 1752 字,大约阅读时间需要 5 分钟。

思维导图笔记

数学基础链接:

练习代码

# -*- coding: utf-8 -*-import numpy as npimport matplotlib.pyplot as pltplot_x = np.linspace(-1, 6, 141)plot_y = (plot_x - 2.5) ** 2 - 1def J(theta):    """    导数函数,损失函数    :param theta:    :return:    """    return 2 * (theta - 2.5)def DJ(x):    """    原函数    :param x:    :return:    """    return ((x - 2.5) ** 2) - 1def gradient_descent(theta=0, eta=0.1):    min_value = DJ(theta)    theta_list = [theta]    j_plot = [min_value]    while True:        delta = eta * (- J(theta))        theta = theta + delta        theta_list.append(theta)        j_plot.append(DJ(theta))        # 第一种方法 限定仅仅循环到1000次        # if F(theta) < min_value:        #     min_value = F(theta)        # 第二种方法 让变化率小于 1e-15        if delta < 1e-15:            break    return theta_list, j_plotdef draw_graph():    fit_theta_list, fit_j_plot = gradient_descent(theta=0, eta=0.1)    large_list, large_j_plot = gradient_descent(theta=0, eta=0.8)    small_eta_list, small_j_plot = gradient_descent(theta=0, eta=0.05)    plt.plot(plot_x, plot_y, label='y=(x-2.5)**2 - 1')    plt.plot(fit_theta_list, fit_j_plot, color='red', marker='+', label='eta=0.1, min=%s' % (fit_j_plot[-1]))    plt.plot(small_eta_list, small_j_plot, color='blue', marker='*', label='eta=0.05, min=%s' % (small_j_plot[-1]))    plt.plot(large_list, large_j_plot, color='green', marker='.', label='eta=0.8, min=%s' % (large_j_plot[-1]))    plt.legend()    plt.show()if __name__ == '__main__':    draw_graph()

运行结果:

编码总结:

1、eta代表的是步长,可以查看eta越大,则收敛的速度越快,但是不一定越大越好,当eta太大的时候会超出范围,导致找不到最低点。一般eta取值0.1

2、让循环终止的办法至少有2种,第一、设置次数比如不超过1000次,一般通常来说,只要eta设置合理,在1000以内就能找到最优解了。 第二、判断当前etha和上一个etha在损失函数中的差,如果两者差小于1e*10-16,那么就满足结果了。

3、注意方向导数和梯度直接的差别, 方向导数=梯度与单位向量的乘积。

要是你在西安,感兴趣一起学习AIOPS,欢迎加入QQ群 860794445

你可能感兴趣的文章
windowbuilder7.6下载 windowbuilder注册机 windowbuilder8.0
查看>>
sql server2003的下载地址
查看>>
android 线程
查看>>
OpenCV的配置
查看>>
在VS2005上配置Opencv问题集锦
查看>>
关于Android 中的Context
查看>>
《笔记》孙鑫老师MFC第一讲(windows程序内部运行原理)
查看>>
[转]用iText导出条形码图片(包含条形码)
查看>>
OpenCV中CvFont的定义和操作
查看>>
Android 多点触摸
查看>>
获得spinnar中选中的值
查看>>
初始化HashMap
查看>>
HashMap 之我见
查看>>
android- 数据库 模糊搜索, 单引号 ’ 报错问题(SQLiteException: unrecognized token: “‘)...
查看>>
关于sqlite的模糊查询
查看>>
Android安装步骤
查看>>
Android--图片像素信息的修改.(透明度,RGB)
查看>>
怎样获得当前mouse坐标处的颜色??[
查看>>
EditText的使用
查看>>
EditText 监听 Text 的 改动
查看>>