关于函数拟合,线性,非线性的一些见解(转)

from: http://blog.sciencenet.cn/blog-1255140-1025724.html

函数拟合

现实中各种各样的问题都可以归结为函数问题。比如医生诊断疾病,他得到病人检查的各种参数,体温、血压、血检报告和CT扫描的各种数据等,然后判断他是否健康,还是得了什么病。这个例子里,各种参数就是函数的自变量,病人的健康情况是函数值,比如健康是0,有病是1,也可以更具体,肝病是1,胃病是2等。又比如识别物体,输入的是物体的像素数据,输出的是物体的类别,是猫是狗,还是苹果梨子等。

机器学习是从样例中总结出规律,本质上是函数拟合。从有限的样本中得到一个函数,使它能拟合样本数据,然后把它应用到新的样例中。我们学习知识的过程也类似。比如我们每次见了狗,都跟小孩子说这是一条狗,经历过几次后,小孩子就能总结出规律,知道狗是什么样子,以后出现未见过的狗,他也会判断。

神经元模型

人工神经网络的研究受到了真实神经网络的启发。神经元是人工神经网络的基本要素,它表示为:

Sum是求和函数,x1、x2……xn是输入,w1、w2、……wn是权重:

Sum(x1,x2,……,xn)= w1x1 + w2x2 +……+ wnxn + b

f是激活函数。最简单的激活函数是符号函数,如下:

所以这个神经元模型表示的函数是:y=f (x1,x2,……,xn)

=f (w1x1 + w2x2 +……+ wnxn + b)

线性划分

上面的神经元模型虽然简单,但它可以实现很多函数。比如可用它来表示大部分布尔函数。用1和-1分别表示真和假。设置w1=w2=0.5,b=-0.8,这时神经元是逻辑AND函数。将b改为-0.3,则变成OR函数。但它无法表示XOR函数(当x1≠x2时,输出为1,否则为0)。

由于这个神经元函数是线性函数,所以可以把它看作是n维空间的超平面决策器。对于超平面一侧的样例,神经元输出1,另一侧则输出-1。

空间的点是线性可分时,可用单个神经元划分,否则不行。比如下面的左图,红色的点和蓝色的点可用一根直线分开,这些点可用神经元分类,而右边是XOR函数,无法用直线分开,解决:多层神经刚落。

多层网络

单层网络的功能太弱,引入多层网络,除了输入层和输出层外,其他的层是隐藏层。

前馈神经网络是最基本的多层网络,上一层的神经元和下一层的每个神经元都有连接,不能跨层连接,同一层的也不连接。可以看出这实质上是个复合函数。

除了前馈神经网络外,还有其他类型的网络,它们不遵守上面的这些限定。

前馈神经网络

学习算法

教小孩子什么是苹果,先告诉他这几个是苹果,他自己会总结出一些特征。当出现一个梨子时,他若判断为苹果,就告诉他这是错的。他会根据这个梨子和苹果的差异,修改他关于苹果的认知,这样反复几次后,就会掌握苹果这个概念。

学习算法是神经网络中最核心的要素,神经网络的学习和上面小孩子的学习有些相似。学习的目的是获得网络连接的正确权值。有各种各样的学习算法,反向传播算法是很重要的一种。它将网络输出和正确的函数值进行比较,根据两者的差异修改权值,再将修改后得到的网络输出和正确值比较,再根据差异修改,这样多次重复,逐渐缩小两者的差异。

下面是反向传播算法的图示,图中的f(x)是激活函数。

图片来源:http://galaxy.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html

原文地址:https://www.cnblogs.com/strangewx/p/10221891.html

时间: 2024-08-05 07:41:14

关于函数拟合,线性,非线性的一些见解(转)的相关文章

SVM详解(包含它的参数C为什么影响着分类器行为)-scikit-learn拟合线性和非线性的SVM

引言 这篇文章详细地介绍了SVM背后的原理,它为什么是大间距分类器?分类器的参数C为什么影响着分类器的行为?核函数背后采用了什么样的技术,看过这篇文章以后,相信你能很好地理解这些问题.最后,我用scikit-learn来分别来拟合线性和非线性的SVM,让大家对SVM分类器有更加深刻的理解. 找寻最优化目标 相信所有用过SVM的人都知道它是一个大间距分类器.但是,它的原理是什么?它为什么可以最大化决策边界与样本之间的距离?下面我将一步一步的揭开它神秘的面纱. 从上图中我们可以看到,SVM会最大化间

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

最近在看李航的统计学习方法P11时发现一个多项式函数拟合问题觉得公式的推导有问题,于是看了一些资料发现这里的推倒是有错误的,用python编程验证后发现按书上的求导结果拟合后的函数图像完全不对,下面给出正确的推导结果和对应的python实现与拟合效果. (第一次写了一版这篇博客,公式自己敲的,但是从别人那里贴的代码,后面感觉那个代码思路没问题,但就是进行了很多次重复计算,数据量大的时候效率低,而且很多地方对python的语言特性利用不足,写的有点类似C语言风格,比较晦涩.于是乎,把代码重写了一次

matlab多项式拟合以及指定函数拟合

clc;clear all;close all;%% 多项式拟合指令:% X = [1 2 3 4 5 6 7 8 9 ];% Y = [9 7 6 3 -1 2 5 7 20]; % P= polyfit (X,Y,3);% % x = 0:2:10;% y = polyval(P,x);% plot(x,y,X,Y,'r*');%% 指定函数拟合 x=[ 0;0.4;1.2; 2;2.8;3.6;4.4;5.2; 6;7.2; 8;9.2;10.4;11.6;12.4;13.6;14.4;1

数据趋势拟合--线性拟合

lm函数,可以用一种线程关系建立两个数据之间的发展趋势,也就是线程拟合,并用predict函数将这种发展趋势的结果用于数据的预测. fr = lm(Height~Weight,data=hw) coef(fr) 建立基于Weight来预测Height的线程拟合.由截距和斜率定义的一条直线.可视化如下图示: library("ggplot2") ggplot(heights.weights,aes(x=Height,y=Weight)) + geom_point()+geom_smoot

[BZOJ2818] Gcd (数论,欧拉函数,线性筛)

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2818 必须用线性筛. 1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long LL; 4 const int maxn = 10001001; 5 LL phi[maxn], sum[maxn], n; 6 bool isprime[maxn]; 7 LL prime[maxn]; 8 int tot;

BZOJ2818 GCD 【欧拉函数,线性筛】

题目大意: 给一个范围[1,n],从中找出两个数x,y,使得gcd(x,y)为质数,问有多少对(x,y有序) 解法: 不难,欧拉函数练手题,可以定义集合P ={x|x为素数},那么我们枚举gcd(x,y)可能等于的情况,对于任意p∈P可以得到:gcd(k1·p,k2·p) = p,当且仅当gcd(k1,k2) =1;那么我们就只需要枚举所有的k1,k2了.不妨设k1>k2,那么给定k1,k2的个数就是phi(k1),因为有序,所以给phi*2,但是,这样是否漏算了呢?没错,漏算了(1,1),补上

积性函数,线性筛入门 HDU - 2879

HDU - 2879HeHe 题意:He[N]为[0,N−1]范围内有多少个数满足式子x2≡x (mod N),求HeHe[N]=He[1]×……×He[N] 我是通过打表发现的he[x]=2k,k为x是质因子个数,不过这是可以通过积性函数证明的. 关于积性函数的定义: 对于正整数n的一个算术函数 f(n),若f(1)=1,且当a,b互质时,f(ab)=f(a)f(b),在数论上就称它为积性函数.若对于某积性函数 f(n) ,就算a, b不互质,也有f(ab)=f(a)f(b),则称它为完全积性

常用积性函数的线性筛法整理

简单整理推导加代码,留复习用. 线性筛素数 最简单也最基础,直接看代码就好了\(--\) code: void Euler_Phi_Prime(int n) { is_prime[1] = true; for (int i = 2; i <= n; i++) { if (!is_prime[i]) prime[++cnt] = i; for (int j = 1; j <= cnt && i * prime[j] <= n; j++) { is_prime[i * pri

遗传算法优化BP神经网络——非线性函数拟合

遗传算法基本的操作分为: 1.选择操作 2.交叉操作 3.变异操作 遗传算法的基本要素包括染色体编码方法.适应度函数.遗传操作和运行参数. 遗传算法优化BP神经网络算法流程如图3-4所示: