Python教程:进击机器学习(五)--Scipy
来源:互联网 发布:八爪鱼客户端软件 编辑:程序博客网 时间:2024/05/17 06:47
- Scipy简介
- 文件输入和输出scipyio
- 线性代数操作scipylinalg
- 快速傅里叶变换scipyfftpack
- 优化器scipyoptimize
- 统计工具scipystats
Scipy简介
Scipy是一个高级的科学计算库,它和Numpy联系很密切,Scipy一般都是操控Numpy数组来进行科学计算,所以可以说是基于Numpy之上了。Scipy有很多子模块可以应对不同的应用,例如插值运算,优化算法、图像处理、数学统计等。
以下列出Scipy的子模块:
文件输入和输出:scipy.io
这个模块可以加载和保存matlab文件:
>>> from scipy import io as spio>>> a = np.ones((3, 3))>>> spio.savemat('file.mat', {'a': a}) # 保存字典到file.mat>>> data = spio.loadmat('file.mat', struct_as_record=True)>>> data['a']array([[ 1., 1., 1.], [ 1., 1., 1.], [ 1., 1., 1.]])
.关于这个模块的文档:https://docs.scipy.org/doc/scipy/reference/io.html#module-scipy.io
线性代数操作:scipy.linalg
假如我们要计算一个方阵的行列式,我们需要调用det()函数:
>>> from scipy import linalg>>> arr = np.array([[1, 2],... [3, 4]])>>> linalg.det(arr)-2.0>>> arr = np.array([[3, 2],... [6, 4]])>>> linalg.det(arr) 0.0
比如求一个矩阵的转置:
>>> arr = np.array([[1, 2],... [3, 4]])>>> iarr = linalg.inv(arr)>>> iarrarray([[-2. , 1. ], [ 1.5, -0.5]])
更多关于scipy.linalg
.
快速傅里叶变换:scipy.fftpack
首先我们用numpy初始化正弦信号:
>>> import numpy as np>>> time_step = 0.02>>> period = 5.>>> time_vec = np.arange(0, 20, time_step)>>> sig = np.sin(2 * np.pi / period * time_vec) + \... 0.5 * np.random.randn(time_vec.size)
如果我们要计算该信号的采样频率,可以用scipy.fftpack.fftfreq()函数,计算它的快速傅里叶变换使用scipy.fftpack.fft():
>>> from scipy import fftpack>>> sample_freq = fftpack.fftfreq(sig.size, d=time_step)>>> sig_fft = fftpack.fft(sig)
Numpy中也有用于计算快速傅里叶变换的模块:numpy.fft
但是scipy.fftpack是我们的首选,因为应用了更多底层的工具,工作效率要高一些。关于scipy.fftpack
更多文档。
优化器:scipy.optimize
scipy.optimize通常用来最小化一个函数值,我们举个栗子:
构建一个函数并绘制函数图:
>>> def f(x):... return x**2 + 10*np.sin(x)>>> x = np.arange(-10, 10, 0.1)>>> plt.plot(x, f(x)) >>> plt.show()
如果我们要找出这个函数的最小值,也就是曲线的最低点。就可以用到BFGS优化算法(Broyden–Fletcher–Goldfarb–Shanno algorithm):
>>> optimize.fmin_bfgs(f, 0)Optimization terminated successfully. Current function value: -7.945823 Iterations: 5 Function evaluations: 24 Gradient evaluations: 8array([-1.30644003])
可以得到最低点的值为-1.30644003,optimize.fmin_bfgs(f, 0)第二个参数0表示从0点的位置最小化,找到最低点(该点刚好为全局最低点)。假如我从3点的位置开始梯度下降,那么得到的将会是局部最低点 3.83746663:
>>> optimize.fmin_bfgs(f, 3, disp=0)array([ 3.83746663])
假如你无法选出the global minimum的邻近点作为初始点的话可以使用scipy.optimize.basinhopping()
,具体就不展开描述。关于这个模块的其他功能,参考scipy.optimize
统计工具:scipy.stats
首先我们随机生成1000个服从正态分布的数:
>>> a = np.random.normal(size=1000)#用stats模块计算该分布的均值和标准差。>>> loc, std = stats.norm.fit(a)>>> loc 0.0314345570...>>> std 0.9778613090...#中位数>>> np.median(a) 0.04041769593...
这个工具还是蛮好用的,更多参考:scipy.stats
还有像scipy的其他模块(计算积分、信号处理、图像处理的模块)就不一一介绍了。其实机器学习最基础的部分还是属于一些统计算法和优化算法。对这一部分还有兴趣继续了解的,戳这里:https://docs.scipy.org/doc/scipy/reference/index.html
Python中关于科学计算的工具就介绍到这里。
Ref:http://www.scipy-lectures.org/intro/scipy.html
- Python教程:进击机器学习(五)--Scipy
- Python教程:进击机器学习(二)--Python
- Python教程:进击机器学习(一)--概述
- Python教程:进击机器学习(三)--Numpy
- Python教程:进击机器学习(四)--Matplotlib
- 机器学习笔记--python之scipy
- Python学习教程(五)
- Python学习(16)--SciPy
- linux下python的机器学习包scikit-learn(包含numpy、scipy等)安装
- python 机器学习的开发环境搭建(numpy,scipy,matplotlib,scikit-learn)
- Python 机器学习的开发环境搭建(numpy,scipy,matplotlib)
- python 机器学习的开发环境搭建(numpy,scipy,matplotlib)
- Windows下Python机器学习环境搭建(pip numpy scipy matplotlib scikit-learn nltk)
- [机器学习]Python中Numpy,Pandas,Matplotlib,Scipy,Seaborn介绍
- Windows中python机器学习numpy,scipy,matplotlib的安装
- Python与机器学习(一) NumPy与SciPy库
- Python 学习之三:NumPy,SciPy,Matplotlib教程
- python中scipy模块学习(假设检验)
- 初识遗传算法之MatlabGA工具箱
- 快速幂
- c-free如何设置来支持c99
- HDOJ 1027 Ignatius and the Princess II
- 数组常用方法二
- Python教程:进击机器学习(五)--Scipy
- 《机器学习技法》学习笔记15——矩阵分解
- python爬虫时 AttributeError: 'NoneType' object has no attribute 'children'错误提示
- 高斯分布中均值,方差,协方差的计算及matlab实现
- Android 超高仿微信图片选择器 图片该这么加载
- KMP(不懂的仔细看看,很有意思)
- 移动宽带设置路由器连不上网?
- POJ
- 从原理上来浅谈 CORS