李航《统计学习方法》多项式函数拟合问题V2

最近在看李航的统计学习方法P11时发现一个多项式函数拟合问题觉得公式的推导有问题,于是看了一些资料发现这里的推倒是有错误的,用python编程验证后发现按书上的求导结果拟合后的函数图像完全不对,下面给出正确的推导结果和对应的python实现与拟合效果。

(第一次写了一版这篇博客,公式自己敲的,但是从别人那里贴的代码,后面感觉那个代码思路没问题,但就是进行了很多次重复计算,数据量大的时候效率低,而且很多地方对python的语言特性利用不足,写的有点类似C语言风格,比较晦涩。于是乎,把代码重写了一次,准备把文章撤下来重新贴自己的代码,这时候发现没有保存,前面用Tex敲的一堆公式就没了,心中顿时万马奔腾。。。。好在今天考试考完,强行克服拖延症把这篇文章重写一遍并附上重写的代码。)

下面开始正文

问题描述

假定给定一个训练数据集:

T={(x1,y1),(x2,y2),?,(xN,yN)}

其中,xi∈R是输入x的观测值,yi∈R是相应的输出y的观测值,i=1,2,?,N,多项式函数拟合的任务是假设给定数据由M次多项式函数生成,选择最有可能产生这些数据的M次多项式函数,即在M次多项式函数中选择一个对已知数据以及未知数据都有很好预测能力的函数。

设M次多项式为

fM(x,w)=w0+w1x+w2x2+?+wMxM=∑j=0Mwjxj

式中x式单变量输入,w0,w1,?,wm是M+1个参数。

用平方损失作为损失函数,系数12是为了方便计算,将模型与训练数据代入,有

L(w)=12∑i=1N(∑j=0Mwjxji?yi)2

对wj求偏导并令其为0

书里这里的求导是错误的,就不写错误的推导了,下面给出正确的推导

set? L(w)?wk=0?12∑i=1N2(∑j=0Mwjxji?yi)×xki=0?∑i=1N∑j=0Mwjxji=∑i=1Nxkiyi(k=0,1,2,?,M)

所以要求拟合多项式系数w?0,w?1,?,w?M需要解下面这个线性方程组,下面的求和符号上下限都是i=1到N,为了方便略去不写。

??????????N∑xi∑x2i?∑xMi∑xi∑x2i∑x3i?∑xM+1i∑x2i∑x3i∑x4i?∑xM+2i?????∑xMi∑xM+1i∑xM+2i?∑x2Mi??????????????????w0w1w2?wm????????=??????????∑yi∑xiyi∑x2iyi?∑xMiyi??????????

所以计算出∑i=1Nxji(j=0,1,2,?,2M)和∑i=1Nxjiyi(j=0,1,2,?,M)然后将这些值带入上述线性方程组求解即可。

下面给出python实现

# coding=utf-8

‘‘‘
作者:Xiaole Wen
程序:多项式曲线拟合算法
‘‘‘
import matplotlib.pyplot as plt
import math
import numpy
import random

fig = plt.figure()
ax = fig.add_subplot(111)

#在这里给出拟合多项式的阶数
order=9

#生成曲线上的各个点
x = numpy.arange(-1,1,0.02)
y = [((a*a-1)*(a*a-1)*(a*a-1)+0.5)*numpy.sin(a*2) for a in x]
#ax.plot(x,y,color=‘r‘,linestyle=‘-‘,marker=‘‘)
#,label="(a*a-1)*(a*a-1)*(a*a-1)+0.5"
plt.plot(x,y)
#生成的曲线上的各个点偏移一下,并放入到xa,ya中去
i=0
xa=[]
ya=[]
for xx in x:
    yy=y[i]
    d=float(random.randint(60,140))/100
    #ax.plot([xx*d],[yy*d],color=‘m‘,linestyle=‘‘,marker=‘.‘)
    i+=1
    xa.append(xx*d)
    ya.append(yy*d)

ax.plot(xa,ya,color=‘m‘,linestyle=‘‘,marker=‘.‘)
#存储从0次到m次的所有冥方和
bigMat=[]
for j in range(0,2*order+1):
    sum=0
    for i in range(0,len(xa)):
        sum+=(xa[i]**j)
    bigMat.append(sum)

#计算线性方程组系数矩阵
matA=[]
for rowNum in range(0,order+1):
    row=bigMat[rowNum:rowNum+order+1]
    matA.append(row)

matA=numpy.array(matA)

matB=[]
for i in range(0,order+1):
    ty=0.0
    for k in range(0,len(xa)):
        ty+=ya[k]*(xa[k]**i)
    matB.append(ty)

matB=numpy.array(matB)

matAA=numpy.linalg.solve(matA,matB)

#画出拟合后的曲线
#print(matAA)
xxa= numpy.arange(-1,1.06,0.01)
yya=[]
for i in range(0,len(xxa)):
    yy=0.0
    for j in range(0,order+1):
        dy=(xxa[i]**j)
        dy*=matAA[j]
        yy+=dy
    yya.append(yy)
ax.plot(xxa,yya,color=‘g‘,linestyle=‘-‘,marker=‘‘)

ax.legend()
plt.show()

下面给出阶叔分别取3和取9的时候的拟合结果

图中蓝色的线代表原始数据生成函数,绿色代表拟合函数

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-12 18:20:43

李航《统计学习方法》多项式函数拟合问题V2的相关文章

机器学习-李航-统计学习方法学习笔记之感知机(2)

在机器学习-李航-统计学习方法学习笔记之感知机(1)中我们已经知道感知机的建模和其几何意义.相关推导也做了明确的推导.有了数学建模.我们要对模型进行计算. 感知机学习的目的是求的是一个能将正实例和负实例完全分开的分离超平面.也就是去求感知机模型中的参数w和b.学习策略也就是求解途径就是定义个经验损失函数,并将损失函数极小化.我们这儿采用的学习策略是求所有误分类点到超平面S的总距离.假设超平面s的误分类点集合为M,那么所有误分类点到超平面S的总距离为 显然损失函数L(w,b)是非负的,如果没有误分

机器学习-深度学习之李航-统计学习方法学习笔记之感知机

感知机应该是机器学习里面最简单的模型了.读一遍文章也能理解作者想表达的意思.因为以前像梯度下降,多项式拟合,神经网络都在Andrew Ng的公开课上看过了.但是真正关于书中的公式却不怎么理解.一些简单的作者也没有推导.毕竟这是机器学习,不是微积分,或者线性代数,或者概率论.微积分,概率论,线性代数是 大学期间的基础课程.很多人应该都学过. 关于感知机的几何模型. 感知机有如下几何解释:线性方程: w•x+b=0 对应于特征空间Rn中的一个超平面S,其中w是超平面的法向量,b是超平面的截距. 我们

李航统计学习方法——算法2——k近邻法

一.K近邻算法 k近邻法(k-nearest neighbor,k-NN)是一种基本分类与回归方法,输入实例的特征向量,输出实例的类别,其中类别可取多类 二.k近邻模型 2.1 距离度量 距离定义: (1)当p=1,称为曼哈顿距离 (2)当p=2,称为欧式距离 (3)当p取无穷大时,它是各个坐标距离的最大值 max|xi-xj| 注意:p值的选择会影响分类结果,例如二维空间的三个点 x1=(1,1),x2=(5,1), x3=(4,4) 由于x1和x2只有第二维上不同,不管p值如何变化,Lp始终

统计学习方法 李航---第1章 统计学习方法概论

第一章 统计学习方法概论 统计学习的主要特点是: (1)统计学习以计算机及网络为平台,是建立在计算机及网络之上的; (2)统计学习以数据为研究对象,是数据驱动的学科: (3)统计学习的目的是对数据进行预测与分析: (4)统计学习以方法为中心,统计学习方法构建模型并应用模型进行预测与分析; (5)统计学习是概率论.统计学.信息论.计算理论.最优化理论及计算机科学等多个领域的交叉学科,并且在发展中逐步形成独自的理论体系与方法论. 统计学习的对象是数据Cdata) 统计学习的目的是对数据进行预铡与分析

统计学习方法笔记(1)——统计学习方法概论

1.统计学习 统计学习是关于计算机基于数据构建概率统计模型并运用模型对数据进行预测与分析的一门学科,也称统计机器学习.统计学习是数据驱动的学科.统计学习是一门概率论.统计学.信息论.计算理论.最优化理论及计算机科学等多个领域的交叉学科. 统计学习的对象是数据,它从数据出发,提取数据的特征,抽象出数据的模型,发现数据中的知识,又回到对数据的分析与预测中去.统计学习关于数据的基本假设是同类数据具有一定的统计规律性,这是统计学习的前提. 统计学习的目的就是考虑学习什么样的模型和如何学习模型. 统计学习

1.统计学习方法概论

1.统计学习 统计学习的对象:(1)data : 计算机及互联网上的各种数字.文字.图像.视频.音频数据以及它们的组合.(2)数据的基本假设是同类数据具有一定的统计规律性.统计学习的目的:用于对数据(特别是未知数据) 进行预测和分析.统计学习的方法:(1)分类: 监督学习无监督学习半监督学习强化学习 2.监督学习Instance, feature vector, feature space输入实例x的特征向量: x(i)与xi 不同,后者表示多个输入变量中的第i个 训练集: 输入变量和输出变量:

机器学习-统计学习方法中多项式拟合偏导函数推导

最近在学机器学习,看了Andrew Ng 的公开课,同时学习李航博士的 <统计学习方法>在此记录. 在第十二页有一个关于多项式拟合的问题.此处,作者直接给出了所求的的偏导.这里做一下详细推导. , 此处函数模型的求偏导问题,首先看一下偏导的定义 因为此处是,所以除了Wj 外的Xi,Yi 都可以视作常数.对此求解. 推导后我们会发现所得出的公式与作者给出的答案不同 ,不过作者也给出了更正的勘误 但是我们发现还是和我推导出的答案不同.作者分母下的x上标为j+1,而我推导出的上标为2j,参考作者的勘

统计学习方法(一)(李航)

统计学习方法概论: (一),统计学习 1,统计学习的特点 2,统计学习的对象 3,统计学习的目的 4,统计学习的方法 (二),监督学习重要概念 1,输入空间,特征向量空间,输出空间 (三),统计学习三要素 1,模型 决策函数模型: 条件概率模型: 2,策略 2.1 损失函数: 2.2 经验风险最小化和结构最小化 如贝叶斯估计的最大后验概率就是一种结构风险最小化的一个例子 3,算法 (四)模型评估选择 1,训练误差和测试误差 2,过拟合 过拟合和欠拟合产生的原因及解决方式: 欠拟合的原因:模型复杂

统计学习方法 李航---第8章 提升方法

第8章提升方法 提升(boosting)方法是一种常用的统计学习方法,应用广泛且有效.在分类问题中,它通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能. 基本思想:对于分类问题而言,给定一个训练样本集,求比较粗糙的分类规则(弱分类器)要比求精确的分类规则(强分类器)容易得多.提升方法就是从弱学习算法出发,反复学习,得到一系列弱分类器(又称为基本分类器),然后组合这些弱分类器,构成一个强分类器.大多数的提升方法都是改变训练数据的概率分布(训练数据的权值分布),针对