博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
梯度下降求解最小二乘
阅读量:6368 次
发布时间:2019-06-23

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

最近烫金学长正在学习机器学习,我也抽闲时间上了会车~

(以下都是自己根据末尾文章不理解的地方瞎记录.

梯度下降法

求解一元线性

梯度下降求解算法是一种迭代算法,即在求最小二乘的时候

朝向梯形负方向(梯形正方向定义为增长速度最快)按照一定步长迭代下降
直到符合我们的预期要求
(步长也就是定义的学习率

我们使用机器学习就是拟合我们所需要的方程,使它尽可能的符合预期的"模仿方程式"

即对于一个一元线性方程,我们代入训练数据,使它每个数据点与预期点的差异越小就好啦~
即对于y=ax+b,我们可以求ax+b-y作为代价函数(我们评判学习结果的依据模型)
根据一系列的转换,我们可以得到下面关于一元方程偏导

偏导公式结果

然后就是使用代码翻译公式

# encoding: utf-8from sklearn import linear_modelalpha = 0.01# 精度设定epsilon = 1e-8# 目标函数y=2x+1x = [1., 2., 3., 4., 5., 6., 7., 8., 9.]y = [3., 5., 7., 9., 11., 13., 15., 17., 19.]# scikit-learn的求解方法def solve_by_scikit():    # 使用scikit-learn求解    # reg = linear_model.SGDClassifier(loss="hinge", penalty="l2")    # reg.fit(x, y)    print("暂无")# 采用梯度下降法求解一元线性回归    def solve_by_gradient():    # 获取循环的长度    m = len(x)    a, b, sse2 = 0, 0, 0    while True:        grad_a, grad_b = 0, 0        for i in range(m):            # 求(a*x(i)+b-y[i])的a,b偏导            # 这里使用common感觉更好,公式相同处            common = a * x[i] + b - y[i]            grad_a += x[i] * common            grad_b += common            grad_a = grad_a / m            grad_b = grad_b / m            # 梯形下降(梯形负方向,速度下降最快)迭代求符合最小值的a,b            # alpha设置迭代步长,即学习率            a -= alpha * grad_a            b -= alpha * grad_b            sse = 0            for j in range(m):                sse += (a * x[j] + b - y[j]) ** 2 / (2 * m)            # 拟合结果判断相差绝对值            if abs(sse2 - sse) < epsilon:                break            else:                sse2 = sse        print('{0} * x + {1}'.format(a, b))def main():    try:        print("scikit模拟结果:")        solve_by_scikit()        print("梯形下降模拟结果:")        solve_by_gradient()    except BaseException as e:        print("\n=>错误: ", e)if __name__ == "__main__":    main()

结果

求解多元

待研究

PS:机器学习方便还是很要求数学基础的,可以说都是数学问题~

参考文章:

转载于:https://www.cnblogs.com/bay1/p/10982522.html

你可能感兴趣的文章
LinkedList实现队列和堆栈的代码
查看>>
微信群红包
查看>>
雨燕框架一次服务调用过程
查看>>
使用POI操作EXCEl
查看>>
面试自我介绍
查看>>
TC++PL's Advices(1)
查看>>
Java核心技术 卷1 基础知识-第一天
查看>>
iOS开发-进程与线程概念以及iOS的三种多线程技术
查看>>
Java中的HashMap 浅析
查看>>
2016-11-30
查看>>
app store 增量更新
查看>>
词霸英语积累
查看>>
位运算符——管理事务的开关状态
查看>>
Java日志组件1---Jdk自带Logger(java.util.logging.Logger)
查看>>
php 与 ajax 获取123的案例
查看>>
PHP2014.5.14的总结:
查看>>
如何成为Python高手[转]
查看>>
读《人月神话》有感2
查看>>
安装并解决purcell/emacs.d网络问题
查看>>
趋势科技:微软已修复IE7的最新安全漏洞
查看>>