标签: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