码迷,mamicode.com
首页 > 编程语言 > 详细

梯度下降算法笔记

时间:2016-12-01 01:34:52      阅读:320      评论:0      收藏:0      [点我收藏+]

标签:bre   ++   http   rate   课程   img   作业   shape   ges   

  今天课上主要讲的是梯度下降算法。

  上一次老师留了梯度下降算法求解线性回归的作业。大部分用java和C++实现的。

  笔记也主要来自课程ppt,老师课程的ppt也主要参考的斯坦福吴恩达老师的讲义。

  梯度下降法英语:Gradient descent)是一个一阶最优化算法,通常也称为最速下降法。 要使用梯度下降法找到一个函数的局部极小值,必须向函数上当前点对应梯度(或者是近似梯度)的反方向的规定步长距离点进行迭代搜索。如果相反地向梯度正方向迭代进行搜索,则会接近函数的局部极大值点;这个过程则被称为梯度上升法。[来自维基百科]

  

 1 #-*- coding= utf-8 -*-
 2 """
 3 批量梯度下降,实现线性回归参数预测
 4 """
 5 class GD(object):
 6     def __init__(self, e=0.01, n_iter=50,m=5):
 7         self.e = e
 8         self.n_iter = n_iter
 9         self.m = m
10 
11     def fit(self,X,y,data):
12         self.thta_ = np.zeros(data.shape[1])
13         self.cost_ = []
14 
15         for i in range(self.n_iter):
16             output = self.net_input(X)
17             errors = (y - output)
18             self.thta_[1:] += self.e * X.T.dot(errors)/self.m
19             self.thta_[0] += self.e * errors.sum()/self.m
20             cost = (errors ** 2).sum() / 2.0
21             self.cost_.append(cost)
22             if cost < self.e:
23                 break
24         return self
25 
26     def net_input(self, X):
27         return np.dot(X, self.thta_[1:]) + self.thta_[0]
28 
29     def activation(self, X):
30         return self.net_input(X)
31 
32     def predict(self, X):
33         # return np.where(self.activation(X) >= 0.0, 1, -1)
34         return self.net_input(X)
35 if __name__ == __main__:
36 
37     import pandas as pd
38     import numpy as np
39     data=pd.read_table("shuju1.txt")
40 
42     X=data.ix[:,0:-1]
43     y=data.ix[:,-1]
44     # b.fit(X,y,data=data)
45     # print(b.cost_)
46     # print(b.w_)
47     import matplotlib.pyplot as plt
48     from matplotlib import animation
49     fig,ax=plt.subplots(nrows=1,ncols=3,figsize=(18,6))
50     ada1 = GD(n_iter=1000, e=0.01).fit(X, y, data=data)
51     print(ada1.thta_)
52     print(ada1.predict(X))
53     print(len(ada1.cost_))
54     ax[0].plot(range(1,len(ada1.cost_)+1),np.log10(ada1.cost_),marker="o")
55     ax[0].set_xlabel("Epochs")
56     ax[0].set_ylabel(log(sum_squ_err))
57     ax[0].set_title("rate=0.01")
58 
59 
60     ada2 = GD(n_iter=1000, e=0.003,m=5).fit(X, y, data=data)
61     print(ada2.thta_)
62     print(ada2.predict(X))
63     print(len(ada2.cost_))
64     ax[1].plot(range(1, len(ada2.cost_)+1), np.log10(ada2.cost_), marker="o")
65     ax[1].set_xlabel("Epochs")
66     ax[1].set_ylabel(log(sum_squ_err))
67     ax[1].set_title("rate=0.003")
68 
69     ada3 = GD(n_iter=1000, e=0.0001, m=5).fit(X, y, data=data)
70     print(ada3.thta_)
71     print(ada3.predict(X))
72     print(len(ada3.cost_))
73     ax[2].plot(range(1, len(ada3.cost_) + 1), np.log10(ada3.cost_), marker="o")
74     ax[2].set_xlabel("Epochs")
75     ax[2].set_ylabel(log(sum_squ_err))
76     ax[2].set_title("rate=0.0001")
77     plt.show()  

参数为:[ 0.30051079 0.8276202 ]
参数为:[ 0.2501888 0.83861788]
参数为:[ 0.15531972 0.6966399 ]

技术分享

梯度下降算法笔记

标签:bre   ++   http   rate   课程   img   作业   shape   ges   

原文地址:http://www.cnblogs.com/coskaka/p/6099975.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!