2019-12-08

梯度下降法

1、数据处理

    实际处理中往往在进行梯度下降前对数据进行归一化。

2、梯度法解线性回归--简单例子

x = np.arange(-2,2,0.1)

y = 2*x+np.random.random(len(x))

x = x.reshape((len(x),1))

y = y.reshape((len(x),1))

for i in range(maxgen):#迭代

    alpha = 1/float(i+1)+alpha0

    e = np.dot(x,seta.reshape((len(seta),1)))+b-y # 二维列向量

    mse = np.linalg.norm(e)

    delta_seta = np.dot(e.T,x)[0]

    delta_seta_norm = np.linalg.norm(delta_seta)

    b = b-alpha*np.sum(e)

    seta = seta-alpha*delta_seta

    print u'迭代次数:',i

    print u'梯度:',delta_seta_norm,'seta',seta,'b:',b,'mse',mse

    print 'alpha:',alpha,'sum(e):',sum(e)


3、实列分析

def fit_gd(self, X_train, y_train, eta=0.01, n_iters=1e4):

"""根据训练数据集X_train, y_train, 使用梯度下降法训练Linear Regression模型"""

assert X_train.shape[0] == y_train.shape[0], \

"the size of X_train must be equal to the size of y_train"

def J(theta, X_b, y):

try:

 return np.sum((y - X_b.dot(theta)) ** 2) / len(y) 

 except:

return float('inf')

def dJ(theta, X_b, y):

return X_b.T.dot(X_b.dot(theta) - y) * 2. / len(y)

def gradient_descent(X_b, y, initial_theta, eta, n_iters=1e4, epsilon=1e-8):

theta = initial_theta

cur_iter = 0

while cur_iter < n_iters:

gradient = dJ(theta, X_b, y)

last_theta = theta

theta = theta - eta * gradient

if (abs(J(theta, X_b, y) - J(last_theta, X_b, y)) < epsilon):

break

cur_iter += 1

return theta


附录

在简单例子中引用了以下链接:

原文链接:https://blog.csdn.net/just_do_it_123/article/details/51056260

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 改进神经网络的学习方法(下) 权重初始化 创建了神经网络后,我们需要进行权重和偏差的初始化。到现在,我们一直是根据...
    nightwish夜愿阅读 6,041评论 0 0
  • 1.简述青霉素过敏性休克的临床表现? A. 胸闷、气促伴濒死感 B. 寒战、高热 C. 咳嗽、咳粉红色泡沫样痰 D...
    a142f9d1d001阅读 4,344评论 0 0
  • 1.一般患者入病区后的初步护理应首先:() A.介绍住院规章制度 B.护士扶助患者上床休息,介绍自己,测量生命体征...
    a142f9d1d001阅读 6,889评论 0 0
  • 深度学习的存在诞生了全新的产品和商业模式,并创造了新的,协助人类的方法: 在健康保障行业,深度学习可以帮助你阅读X...
    眼泪成诗HOCC阅读 1,280评论 0 0
  • 文 / 朴玄 前段时间由英俊潇洒的大明星胡歌主演的大火电视剧《猎场》中,女主罗伊人最喜欢看的一本书,就是由日本人气...
    朴玄阅读 4,626评论 2 6