线性回归的梯度下降和正规方程组求解

 1  # coding:utf-8
 2 import matplotlib.pyplot as plt
 3 import numpy as np
 4
 5 def dataN(length):
 6     x = np.zeros(shape = (length,2))
 7     y = np.zeros(shape = length)
 8     for i in range(0,length):
 9       x[i][0] = 1
10       x[i][1] = i
11       y[i] = (i + 25) + np.random.uniform(0,1) *10
12     return x,y
13
14 def alphA(x,y): #选取前20次迭代cost最小的alpha
15     c=float("inf")
16     for k in range(1,1000):
17             a=1.0/k**3
18             f=gD(x,y,20,a)[1][-1]
19             if f>c:
20                 break
21             c=f
22             alpha=a
23     return alpha
24
25 def gD(x,y,iter,alpha):#梯度下降
26     theta=np.ones(2)
27     cost=[]
28     for i in range(iter):
29         hypothesis = np.dot(x,theta)
30         loss = hypothesis - y
31         cost.append(np.sum(loss ** 2))
32         gradient = np.dot(x.transpose(),loss)
33         theta = theta -alpha * gradient
34     return theta,cost
35
36 def sgD(x,y,iter,alpha):#随机梯度下降
37     theta=np.ones(2)
38     cost=[]
39
40     for i in range(iter):
41         l=0
42         for j in range(0,len(y)):
43             loss=theta[1]*x[j][1]+theta[0]-y[j]
44             theta[1]=theta[1]-alpha*x[j][1]*loss
45             theta[0]=theta[0]-alpha*loss
46             l=l+loss**2
47         cost.append(l)
48     return theta,cost
49
50 def eQ(x,y):#正则方程组
51    x=np.matrix(x)
52    y=np.matrix(y).T
53    a=np.dot(x.T,x).I
54    b=np.dot(a,x.T)
55    c=np.dot(b,y)
56    return c
57
58 def exP(x,y):#一元线性回归拟合方程
59     xmean=np.mean(x)
60     ymean=np.mean(y)
61     b=np.sum([(x1-xmean)*(y1-ymean)for x1,y1 in zip(x,y)])/np.sum([(x1-xmean)**2 for x1 in x])
62     a=ymean-b*xmean
63     return a,b
64
65 length=100
66 iter=50000
67 x,y=dataN(length)
68 #theta,cost=sgD(x,y,iter,alphA(x,y))  #[ 30.24623439   0.99707473]
69 theta,cost=gD(x,y,iter,alphA(x,y))  #[ 30.17228028   0.99806093]
70 print theta
71 print eQ(x,y) #[[ 30.20320097][  0.99759475]]
72 print exP(x[:,1],y) #与正则方程组结果一致
73
74 plt.figure(1)
75 plt.plot(range(iter),cost)
76 plt.figure(2)
77 plt.plot(x[:,1],y,‘b.‘)
78 plt.plot([0,length],[theta[0],theta[0]+length*theta[1]])
79 plt.show()

时间: 2024-11-06 15:01:20

线性回归的梯度下降和正规方程组求解的相关文章

线性规划、梯度下降、正规方程组——斯坦福ML公开课笔记1-2

几个常见问题: 1.为什么损失函数采用最小二乘法,而不是绝对值形式,也不采用最小三乘法?关于这个问题的答案,后面的课程会给出,主要是从最大似然函数角度给出的合理化解释,如果你追问,最大似然函数就代表科学的.合理的吗?那你听说过大数定律.极限中心定律吗?感觉有点像哲学问题了. 2.梯度下降法中提到学习率的问题,我们的目标函数是一个凸二次函数(就是你吃饭的碗的形状),我们知道学习率大会导致震荡,太小会走的慢,那么有没有必要动态调节这个学习率的大小,刚开始下降时可以先大,快收敛时再变小?这个是没有必要

机器学习入门:线性回归及梯度下降

机器学习入门:线性回归及梯度下降 本文会讲到: (1)线性回归的定义 (2)单变量线性回归 (3)cost function:评价线性回归是否拟合训练集的方法 (4)梯度下降:解决线性回归的方法之一 (5)feature scaling:加快梯度下降执行速度的方法 (6)多变量线性回归   Linear Regression 注意一句话:多变量线性回归之前必须要Feature Scaling! 方法:线性回归属于监督学习,因此方法和监督学习应该是一样的,先给定一个训练集,根据这个训练集学习出一个

【机器学习详解】线性回归、梯度下降、最小二乘的几何和概率解释

线性回归 即线性拟合,给定N个样本数据(x1,y1),(x2,y2)....(xN,yN)其中xi为输入向量,yi表示目标值,即想要预测的值.采用曲线拟合方式,找到最佳的函数曲线来逼近原始数据.通过使得代价函数最小来决定函数参数值. 采用斯坦福大学公开课的例子:假如一套房子的价格只考虑由房屋面积(Living area)与卧室数目(bedrooms)两个因素决定,现在拿到手有m个样本,如下图所示.此例中,输入x=(x1,x2)为2维向量,分别对应房屋面积和卧室数目,y对应价格.现在想根据上述样本

线性回归、梯度下降 - Andrew Ng机器学习公开课笔记1.1

实例 首先举个样例.如果我们有一个二手房交易记录的数据集.已知房屋面积.卧室数量和房屋的交易价格,例如以下表: 假如有一个房子要卖,我们希望通过上表中的数据估算这个房子的价格. 这个问题就是典型的回归问题,这边文章主要讲回归中的线性回归问题. 线性回归(Linear Regression) 首先要明确什么是回归. 回归的目的是通过几个已知数据来预測还有一个数值型数据的目标值. 如果特征和结果满足线性关系,即满足一个计算公式h(x).这个公式的自变量就是已知的数据x,函数值h(x)就是要预測的目标

【机器学习具体解释】线性回归、梯度下降、最小二乘的几何和概率解释

线性回归 即线性拟合,给定N个样本数据(x1,y1),(x2,y2)....(xN,yN)当中xi为输入向量,yi表示目标值,即想要预測的值.採用曲线拟合方式,找到最佳的函数曲线来逼近原始数据.通过使得代价函数最小来决定函数參数值. 採用斯坦福大学公开课的样例:假如一套房子的价格仅仅考虑由房屋面积(Living area)与卧室数目(bedrooms)两个因素决定,如今拿到手有m个样本,例如以下图所看到的. 此例中.输入x=(x1,x2)为2维向量.分别相应房屋面积和卧室数目,y相应价格.如今想

机器学习笔记02:多元线性回归、梯度下降和Normal equation

在<机器学习笔记01>中已经讲了关于单变量的线性回归以及梯度下降法.今天这篇文章作为之前的扩展,讨论多变量(特征)的线性回归问题.多变量梯度下降.Normal equation(矩阵方程法),以及其中需要注意的问题. 单元线性回归 首先来回顾一下单变量线性回归的假设函数: Size(feet2) Price($1000) 2104 460 1416 232 1534 315 852 178 - - 我们的假设函数为 hθ(x)=θ0+θ1x 多元线性回归 下面介绍多元线性回归(Linear R

线性回归的梯度下降

Note: [At 6:15 "h(x) = -900 - 0.1x" should be "h(x) = 900 - 0.1x"] 当具体应用于线性回归的情况下,可以推导出一种新的梯度下降方程.我们可以用我们实际的成本函数和我们实际的假设函数来代替,并将公式修改为: 其中M是训练集的规模,θ0常数,将与θ1和xi同时变化的,yi是给定的训练集值(数据). 注意,我们一句把θj分成独立的θ0和θ1,θ1我们乘xi最后求导 这一切的关键是,如果我们从猜测我们的假设开始

机器学习:单变量线性回归及梯度下降

******************************************************************************* 注:本系列博客是博主学习Stanford大学 Andrew Ng 教授的<机器学习>课程笔记.博主深感学过课程后,不进行总结很容易遗忘,根据课程加上自己对不明白问题的补充遂有此系列博客.本系列博客包括线性回归.逻辑回归.神经网络.机器学习的应用和系统设计.支持向量机.聚类.将维.异常检测.推荐系统及大规模机器学习等内容. *******

线性回归和梯度下降

在许多线性回归问题中都可以选择最小二乘法作为代价函数,在之前的文章线性代数——最小二乘法和投影矩阵中讲到过,系数项是可以通过公式 x=(ATA)^-1*ATb 一次性求到的,然而大量的训练数据可能使得ATA没有逆,即便是利用伪逆,其计算量也会很大,所以才有了梯度下降来迭代系数的方法. 梯度下降法分许多种,这里分析以负梯度为方向更新的方法 . 设Θ1为待更新的系数,根据链式法则有 以双系数Θ1,Θ0 为例,h(x)=Θ1x1+Θ0x2+b,对Θ1求偏导后所得值就是x1,最终结果为 偏导的反方向往往