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)

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

相关文章
|
14天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
69 4
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
|
24天前
|
存储 缓存 监控
局域网屏幕监控系统中的Python数据结构与算法实现
局域网屏幕监控系统用于实时捕获和监控局域网内多台设备的屏幕内容。本文介绍了一种基于Python双端队列(Deque)实现的滑动窗口数据缓存机制,以处理连续的屏幕帧数据流。通过固定长度的窗口,高效增删数据,确保低延迟显示和存储。该算法适用于数据压缩、异常检测等场景,保证系统在高负载下稳定运行。 本文转载自:https://www.vipshare.com
118 66
|
8天前
|
机器学习/深度学习 人工智能 分布式计算
我的阿里云社区年度总结报告:Python、人工智能与大数据领域的探索之旅
我的阿里云社区年度总结报告:Python、人工智能与大数据领域的探索之旅
82 35
|
5天前
|
存储 监控 算法
员工电脑监控屏幕场景下 Python 哈希表算法的探索
在数字化办公时代,员工电脑监控屏幕是保障信息安全和提升效率的重要手段。本文探讨哈希表算法在该场景中的应用,通过Python代码例程展示如何使用哈希表存储和查询员工操作记录,并结合数据库实现数据持久化,助力企业打造高效、安全的办公环境。哈希表在快速检索员工信息、优化系统性能方面发挥关键作用,为企业管理提供有力支持。
35 20
|
5天前
|
数据采集 Web App开发 数据可视化
Python用代理IP获取抖音电商达人主播数据
在当今数字化时代,电商直播成为重要的销售模式,抖音电商汇聚了众多达人主播。了解这些主播的数据对于品牌和商家至关重要。然而,直接从平台获取数据并非易事。本文介绍如何使用Python和代理IP高效抓取抖音电商达人主播的关键数据,包括主播昵称、ID、直播间链接、观看人数、点赞数和商品列表等。通过环境准备、代码实战及数据处理与可视化,最终实现定时任务自动化抓取,为企业决策提供有力支持。
|
14天前
|
存储 算法 Serverless
剖析文件共享工具背后的Python哈希表算法奥秘
在数字化时代,文件共享工具不可或缺。哈希表算法通过将文件名或哈希值映射到存储位置,实现快速检索与高效管理。Python中的哈希表可用于创建简易文件索引,支持快速插入和查找文件路径。哈希表不仅提升了文件定位速度,还优化了存储管理和多节点数据一致性,确保文件共享工具高效运行,满足多用户并发需求,推动文件共享领域向更高效、便捷的方向发展。
|
21天前
|
算法 网络协议 Python
探秘Win11共享文件夹之Python网络通信算法实现
本文探讨了Win11共享文件夹背后的网络通信算法,重点介绍基于TCP的文件传输机制,并提供Python代码示例。Win11共享文件夹利用SMB协议实现局域网内的文件共享,通过TCP协议确保文件传输的完整性和可靠性。服务器端监听客户端连接请求,接收文件请求并分块发送文件内容;客户端则连接服务器、接收数据并保存为本地文件。文中通过Python代码详细展示了这一过程,帮助读者理解并优化文件共享系统。
|
25天前
|
数据采集 Web App开发 监控
Python爬虫:爱奇艺榜单数据的实时监控
Python爬虫:爱奇艺榜单数据的实时监控
|
20天前
|
数据采集 存储 XML
python实战——使用代理IP批量获取手机类电商数据
本文介绍了如何使用代理IP批量获取华为荣耀Magic7 Pro手机在电商网站的商品数据,包括名称、价格、销量和用户评价等。通过Python实现自动化采集,并存储到本地文件中。使用青果网络的代理IP服务,可以提高数据采集的安全性和效率,确保数据的多样性和准确性。文中详细描述了准备工作、API鉴权、代理授权及获取接口的过程,并提供了代码示例,帮助读者快速上手。手机数据来源为京东(item.jd.com),代理IP资源来自青果网络(qg.net)。
|
机器学习/深度学习 存储 人工智能
干货 | Python人工智能在贪吃蛇游戏中的应用探索(上)(三)
干货 | Python人工智能在贪吃蛇游戏中的应用探索(上)(三)
918 0
干货 | Python人工智能在贪吃蛇游戏中的应用探索(上)(三)

热门文章

最新文章