机器学习|回归问题与python实现

大多数的回归问题,都可以使用最小二乘法来求解参数,而求解参数的过程又通常依赖梯度下降法。不仅是回归问题,很多机器学习都是基于梯度下降来实现参数优化,因此梯度下降可以说是机器学习的核心算法之一。简单地说梯度下降利用导数,通过不断迭代,经过有限次的运算,逐渐逼近最优解。

1. 一元回归与最小二乘

直接看吴恩达老师课程中的例子。现在有一些房价和面积的数据(x,y),想找出他们之间的关系。

我们可以大概画出散点图,通过图形分布,假设他们之间是线性关系。那么这个例子可以抽象为,求一个方程f(x) = k*x+b,使预测值f(x)与真实值y尽量接近。

如何算是接近?我们定义一个新的函数来判断接近程度。这个函数叫做损失函数,用差平方来表示,[f(x)-y]2。它反映了预测值与真实值的偏离程度。差平方和则反映了所有样本的偏离大小。将参数k和b用p取代,假设共有m个样本,那么拟合问题就成了找一组p值,使如下函数值最小。

这种拟合方法称为最小二乘法。现在我们不继续深究,因为这个一元问题用Excel就能搞定了:

2. 多元回归与梯度下降

一元线性回归只是其他更复杂模型中的一个特例,实际数据也往往并不会这么简单。现在我们给数据增加一个维度,探究一下房间数量、房屋面积和价格间的关系。

根据上面的思路,首先假设还是线性关系。将参数统一表示为θn(或叫做权重,相当于一元中的k,b),xn为数据特征,本例中两个数据特征分别为面积和房间数量。用多元回归对房价进行拟合。这里设x0=1。

同样,引入经验风险J(θ),相当于上文中的S(P),表示数据总体的误差。前面乘以0.5,是方便后面的求导运算:

为了使决策函数更接近真实值之间的关系,经验风险越小越好。到这里,最优问题就成了求最小值问题。J(θ)这个函数可以看成是这样的。

如何到达最低点,从而使J(θ)最小呢?接下来就需要梯度下降法了。首先,随机给定一组θ值,得到一个解。在这个解的基础上进行优化,让θj沿着J(θ)下降最快的方向,也就是导数的反方向移动一小步,得到一个新的θj,再继续优化,重复上述过程,多次调整后,最终沿着“path”,达到最低点。表达式如下。

其中“α”叫做学习率,代表了每一次优化的步长。步长太大,容易直接跳过最优解,步长太小,迭代次数过多,学习效率降低。“:=”表示从右向左赋值,新产生的值会再次迭代,直到求出最小值。

对θj求偏导数,根据加减法则及链式求导法则得到以下等式:

最终梯度下降法表达式如下:

3. 回归问题的python实现

在python的scipy库中,提供了leastsq函数,直接实现此目的,语法如下:

scipy.optimize.leastsq(func,x0,args=(),……)

func:预测值与实际值的差,需要带有至少一个变量,并返回数值型数据。

x0:初始参数,作为学习的起点。格式为数组。

args:训练集。

leastsq函数的目标是,求得如下的一个值:

是不是很熟悉?把func(y)**2作为误差函数,再经过sum求和,就等于经验风险。即求一个y值,使经验风险J(θ)或S(p)最小。

Python实现过程分为以下四个步骤

(1)定义拟合函数

def f(x1, x2, p):

    k0, k1, k2 = p

    returnk0 +k1*x1 + k2*x2

(2)定义误差函数

def cost(p,x1,x2,y):

    return y-f(x1,x2, p)

(3)初始化参数

p0=[1,1,1]

x1=np.array([2104,1600,2400,1416,3000])

x2=np.array([3,3,3,2,4])

y=np.array([400,330,369,232,540])

(4)用leastsq求解

arg = leastsq(cost,p0,args=(x1,x2,y))

print arg[0]

完整代码如下:

输出

[-7.04346018e+01     6.38433756e-02     1.03436047e+02]

4. 正规方程组

梯度下降法通过多次迭代,最终求出最优解。如果想一次性求出结果,也能够实现。即利用最优解处,导数为0特征直接求解。与梯度下降法类似,用x(i)列向量表示第i个数据里所有的变量特征,θ列向量表示每个特征对应的权重,y向量表示每组数据的实际输出。每个预测值和实际值的差用如下方程表示:


接着写出风险函数:


对风险函数求导:


并使导数等于0,即可能存在的最优解:


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容