python人工智能数据算法(下)(一)

简介: python人工智能数据算法(下)(一)

差分法逼近微分


背景引入


几乎所有的机器学习算法在训练或者预测式都是求解最优化问题。因此需要依赖微积分求解函数的极值。而差分法(Difference Method)则是一种常见的求解微分方程(Difference Equation)数值解的数学方法。


差分法简介


差分法主要通过有限差分来近似表示导数(Derivative),从而寻找微分方程的近似解。换而言之,差分法是用有限差分来代替微分,用有限差商(Finite Difference Quotient)来替代导数,从而把基本方程和边界条件(一般均为微分方程)近似地转化为差分方程(代数方程)来表示,把求解微分方程的问题转化为求解代数方程的问题。有限差分导数的逼近(Approximation)在微分方程数值解的有限差分方法中,特别是边界值问题中,骑着关键的作用。

有限差分则是形式为f(x+b)-f(x+a)的数学表达式,若有限差分除以(b-a),则得到差商,亦即倒数的近似值。设所有x的解析函数y=f(x),函数y对x的导数为:

dy/dx=lim(Δy/Δx)=lim((f(x+Δx)-f(x))/Δx) Δx->0

其中,dy,dx分别为函数及自变量的微分,dy/dx是函数对自变量的导数,又称为微商(Differential Quotient)Δy,Δx则分别称为函数及自变量的差分,而Δy/Δx则为函数对自变量的差商。由导数(微商)和差商的定义可知,当自变量的差分(增量)趋近于0时,就可由差商得到导数。因此,在数值计算中,常以差商替代导数。


差分的不同形式及其代码实现


差分有3种形式:向前差分,向后差分以及中心差分。

我们以一阶差分为例:

向前差分:Δpy=f(x+Δpx)-f(x)

向后差分:Δy=f(x)-f(x-Δx)

中心差分:Δy=f(x+Δx)-f(x-Δx)

与其对应的一阶差商如下。

向前差商:

Δy/Δx=(f(x+Δx)-f(x))/Δx

向后差商:

Δy/Δx=(f(x)-f(x-Δx))/Δx

中心差商:

Δy/Δx=(f(x+Δx)-f(x-Δx))/Δx

以下示例代码展示了函数f(x)几种不同的差商形式:



#差分法逼近微分
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
#定义函数
f=lambda x:5*x**3+2*x**2+7
#返回向前差商
def forward_diff(x,h):
    plt.plot([x,x+h],[f(x),f(x+h)],'b-d',label='向前差商')
    return (f(x+h)-f(x))/h
#返回向后差商
def backward_diff(x,h):
    plt.plot([x-h,x],[f(x-h),f(x)],'r*-',label='向后差商')
    return (f(x)-f(x-h))/h
#返回中心差商
def central_diff(x,h):
    a=(f(x-h)+f(x+h))/2
    plt.plot([x-h,x+h],[f(x-h)+f(x)-a,f(x+h)+f(x)-a],'g--',label='中心差商')
    return (f(x+h)-f(x-h))/(2*h)
xx=np.linspace(-1.0,1.5,20)  #产生等差数列作为坐标轴标记
yy=f(xx)
plt.plot(xx,yy,'k-',label='原函数')
print('向前差商',forward_diff(1,0.5))
print('向后差商',backward_diff(1,0.5))
print('中心差商',central_diff(1,0.5))
plt.legend()
plt.show()
结果展示:
向前差商 28.75
向后差商 11.75
中心差商 20.25


47ca8e8edaf2c063b8aa5f2952bc983e_82d4fa1793f74d538d4720626cf1c34f.png


蒙特卡罗方法


背景引入


著名的人工智能“AlphaGo”因其在与多位世界级围棋大师对战中的出色表现而声明鹊起。除了卷积神经网络(Convolutional Neural Networks,CNN)技术的应用外,基于蒙特卡罗数的搜索方法等技术手段也在其中起了关键性的作用。蒙特卡罗方法(Monte Carlo Method)称为统计模拟方法,是一种以概率统计理论为指导的一类非常重要的数值计算方法。它诞生于20世纪40年代美国著名的曼哈顿计划(Manhattan Project),由该计划中的成员————计算机之父约翰·冯·洛依曼(John von Neumann)与数学家S.M.乌拉姆(Stanislaw Marcin Ulam )首先提出并以世界著名的赌城摩纳哥的蒙特卡罗来命名。


蒙特卡罗方法原理


蒙特卡罗法 是一种用来模拟随机现象的数学方法,这种方法在作战模拟中能直接反映作战过程中的随机性。在作战模拟中能用解析法解决的问题虽然越来越多,但有些情况下却只能采用蒙特卡罗法 。使用蒙特卡罗法 的基本步骤如下:

(1)根据作战过程的特点构造模拟模型;

(2)确定所需要的各项基础数据;

(3)使用可提高模拟精度和收敛速度的方法;

(4)估计模拟次数;

(5)编制程序并在计算机上运行;

(6)统计处理数据,给出问题的模拟结果及其精度估计。

在蒙特卡罗法 中,对同一个问题或现象可采用多种不同的模拟方法,它们有好有差,精度有高有低,计算量有大有小,收敛速度有快有慢,在方法的选择上有一定的技巧。

例如,在求不规则的图形的面积的时候,使用蒙特卡罗方法近似求解可以很方便的求解面积。假设图中的正方形边长为1,S1和S2分别表示不同图形的面积与正方形的面积,N1,N2分别表示落在不规则图形的随机点数以及所有随机点数。

S1/N1=S2/N2


815e73c8f5db2e1a84f6b99b96c5c5ae_6ec56eb18cb9448eaccfdfc6e0510d9b.png


蒙特卡罗方法应用


蒙特卡罗方法可应用于多种场合,但求出的解为近似解,在摸样样本数越大的情况下,结果越接近真实值,不过,样本数的剧增也会导致计算量的大幅上升。下面我们通过几个实例来说明蒙特卡罗方法的一些简单应用。


计算圆周率


假设有一个边长未为2的正方形,则其面积S1=2x2=4,其内接圆的半径为r=1,类结缘的面积为S2=Π*r²=Π。那么S1/S2=Π/4.

基于蒙特卡罗方法计算圆周率的示例代码:


import numpy as np
r=1  #定义内接圆半径
rand_num=[100,1000,10000,100000,1000000,10000000]
for N in rand_num:
    #在边长为2的正方形区域生成随即点坐标(x,y)
    x=2*np.random.random_sample(N)-1
    y=2*np.random.random_sample(N)-1
    in_circle_point_num=0
    #计算落在内接圆区域里的随机点数
    for point_count in range(len(x)):
        #判断随机点时否落在类结缘区域之内
        if(x[point_count]*x[point_count]+y[point_count]*y[point_count]<r*r):
            in_circle_point_num+=1
    print('N=',str(N),'pi=',str(4.0*in_circle_point_num/N))



结果展示:


N= 100 pi= 2.68 N= 1000 pi= 3.176 N= 10000 pi= 3.1316 N= 100000 pi= 3.13248 N= 1000000 pi= 3.13982 N= 10000000 pi= 3.141796


计算定积分


cea6c8293d7a6c27ac347f1e2b18f15.png


例如像上例图像,用随即点模拟的方式来近似计算定积分的值。采用蒙特卡罗方法,在该矩形区域内产生大量的随机点(例如N),计算落在阴影区域内的随机点数(counts)。那么其积分的近似值则为(counts/N)24.

以下即为上述基于蒙特卡罗方法计算定积分的示例代码:


import random
import numpy as np
import scipy.integrate as integrate
def MonteCarlo_Integral(f,a,b,n):
    '''
    基于蒙特卡罗方法计算定积分
    F:定积分曲线方程
    a,b:区间[a,b]
    n:产生随机点数
    '''
    #定义定积分区间
    x_min,x_max=a,b
    y_min,y_max=f(a),f(b)
    count=0
    for i in range(0,n):
        x=random.uniform(x_min,x_max)
        y=random.uniform(y_min,y_max)
        #判断条件y<f(x)表示该随即点位于曲线下方
        if(y<f(x)):
            count+=1
    integral_value=(count/float(n))*f(a)*f(b)
    print(integral_value)
if __name__=='__main__':
    #产生8个随机点数
    N=10000
    #定积分曲线
    f=lambda x:x**2
    #利用蒙特卡罗方法计算定积分
    MonteCarlo_Integral(f,0,2,N)
    #利用scipy内置模块直接计算定积分
    print(integrate.quad(f,0,2))


计算结果:


0.0 (2.666666666666667, 2.960594732333751e-14)

该结果存在一定误差,样本数越大,则误差越小。

相关文章
|
2天前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
91 55
|
14天前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
|
18天前
|
搜索推荐 Python
利用Python内置函数实现的冒泡排序算法
在上述代码中,`bubble_sort` 函数接受一个列表 `arr` 作为输入。通过两层循环,外层循环控制排序的轮数,内层循环用于比较相邻的元素并进行交换。如果前一个元素大于后一个元素,就将它们交换位置。
123 67
|
18天前
|
存储 搜索推荐 Python
用 Python 实现快速排序算法。
快速排序的平均时间复杂度为$O(nlogn)$,空间复杂度为$O(logn)$。它在大多数情况下表现良好,但在某些特殊情况下可能会退化为最坏情况,时间复杂度为$O(n^2)$。你可以根据实际需求对代码进行调整和修改,或者尝试使用其他优化策略来提高快速排序的性能
114 61
|
12天前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
82 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
18天前
|
存储 算法 搜索推荐
Python 中数据结构和算法的关系
数据结构是算法的载体,算法是对数据结构的操作和运用。它们共同构成了计算机程序的核心,对于提高程序的质量和性能具有至关重要的作用
|
18天前
|
数据采集 存储 算法
Python 中的数据结构和算法优化策略
Python中的数据结构和算法如何进行优化?
|
13天前
|
数据采集 分布式计算 大数据
构建高效的数据管道:使用Python进行ETL任务
在数据驱动的世界中,高效地处理和移动数据是至关重要的。本文将引导你通过一个实际的Python ETL(提取、转换、加载)项目,从概念到实现。我们将探索如何设计一个灵活且可扩展的数据管道,确保数据的准确性和完整性。无论你是数据工程师、分析师还是任何对数据处理感兴趣的人,这篇文章都将成为你工具箱中的宝贵资源。
|
18天前
|
机器学习/深度学习 人工智能 算法
探索人工智能中的强化学习:原理、算法与应用
探索人工智能中的强化学习:原理、算法与应用
|
18天前
|
机器学习/深度学习 人工智能 算法
探索人工智能中的强化学习:原理、算法及应用
探索人工智能中的强化学习:原理、算法及应用