人工智能笔记(一)

来源:互联网 发布:清除的数据怎么恢复 编辑:程序博客网 时间:2024/06/06 01:12

线性回归

假设有输入数据X(x1x2xn),输出数据Y,通过线性方程来拟合输入数据X和输出数据Y之间的关系。线性方程为:

h(x)=w0+w1x1+w2x2...+wnxn

现在我们有m组输入数据X和对应的实际输出数据Y,这时候矩阵表示:
y1y2y3...ym=11...1x11x21xm1x12...x1nx22...x2nxm2...xmnw0w1w2...wn

其中x的上标表示第几组数据

现在要求出线性方程,也就是需要求出wi的值

这里给出一个代价函数,只要这个函数最小我们就认为是最优的拟合:

L(w)=12mi=1m[h(x)y]2

其中h(x)为拟合后得到的输出,y为真实的输出

如何求解L(w)最小值,也就是最小二乘法。

在此使用梯度下降的方法来进行推到。

从二维空间考虑,也就每一组的X输入只有两个值(x1,x2)

现在我们要让L(w)通过不停的迭代变小(也就是变化w的值,让L变得更小)

L(w)new=L(w)old+ΔL

这里只要保证ΔL是个小于零的值即可,ΔL可以表示为:

ΔL=L(w)w0Δw0+L(w)w1Δw1+L(w)w2Δw2

因此只要:

(Δw0,Δw1,Δw2)=(L(w)w0,L(w)w1,L(w)w2)

其实我们最终需要关心的,还是w的值,通过上面,只要每次移动(Δw0,Δw1,Δw2) 就可以让L(w)更小,迭代方程为:

wi=wi+Δwi

即:
wi=wi+α(L(w)wi)(2.0)

α为学习效率,通过它可以控制迭代的效率

对L(w)求导:

L(w)wi=1mj=1m(h(x)y)xji(2.1)

其中
xj0=1

将上面的2.0和2.1式合并,就可以进行迭代了。

实验程序:

import numpy as npimport pylab as pltx = np.linspace(0.0,10.0,200)y = 3.0*x+5.0 + np.random.random(200)*2-1w0 = 0.1w1 = 0.2m = 200.0alpha = 0.5#每一组X数据都为一个patch,并且对原来的w影响因子为alpha/mfor j in range(100):    for i in range(200):        hx = w1*x[i]+w0        w0 = w0 - alpha*(hx - y[i])/m        w1 = w1 - alpha*(hx - y[i])*x[i]/mplt.plot(x,[i*w1+w0 for i in x],color="red")plt.scatter(x,y,10)plt.show()

这里写图片描述

阅读全文
0 0
原创粉丝点击