【数据分析与可视化】Scipy中的优化、数据拟合及稀疏矩阵处理(超详细 附源码)

简介: 【数据分析与可视化】Scipy中的优化、数据拟合及稀疏矩阵处理(超详细 附源码)

需要源码请点赞关注收藏后评论区留言私信~~~

一、Scipy中的优化

SciPy.optimize包提供了几种常用的优化算法,包括用来求有/无约束的多元标量函数最小值算法,最小二乘法,求有/无约束的单变量函数最小值算法,还有解各种复杂方程的算法

1. 方程求解及求极值

使用SciPy.optimize模块的root和fsolve函数进行数值求解线性及非线性方程求方程的根

利用root函数求方程的解

from scipy.optimize import root
def func(x):
    return x*2 + 2 * np.cos(x)
sol = root(func, 0.3)   # 0.3 估计初始值
print (sol)

使用fmin,fminbound可以求函数的极值

函数极值求解

import numpy as np
from matplotlib import pyplot as plt
from scipy.optimize import fmin,fminbound  
def f(x):    
     return x**2+10*np.sin(x)+1
x = np.linspace(-10,10,num = 500)
min1 = fmin(f,3)  #求3附近的极小值
min2 = fmin(f,0)  #求0附近的极小值
min_global = fminbound(f,-10,10) #这个区域的最小值
print(min1)
print(min2)
print(min_global)
plt.plot(x,f(x))
plt.show()

2 数据拟合

(1)多项式拟合

多项式拟合

import matplotlib.pyplot as plt
x = np.linspace(-5,5,20)
y = 3.5*x+2.1
y_noise = y+np.random.randn(20)*2
coeff = np.polyfit(x,y_noise,1)
plt.plot(x,y_noise,'x',x,coeff[0]*x+coeff[1])
plt.show()

分别使用1阶、3阶和9阶多项式对数据进行拟合

x = np.linspace(0,np.pi*2)
y = np.sin(x)
f1 = np.poly1d(np.polyfit(x,y,1))
f3 = np.poly1d(np.polyfit(x,y,3))
f9 = np.poly1d(np.polyfit(x,y,9))
t = np.linspace(-3*np.pi,np.pi*3,80)
plt.plot(x,y,'x',t,f1(t),':',t,f3(t),'--',t,f9(t),'-.')
plt.axis([0,3*np.pi,-1.5,1.5])
plt.legend(['data',r'$n = 1$',r'$n = 3$',r'$n = 9$'])
plt.show()

 

(2)最小二乘拟合

最小二乘拟合(Least Squares)是一种常用的数学优化技术,通过最小化误差的平方和在寻找一个与数据匹配的最佳函数

要使用最小二乘优化,需要先定义误差函数

其中,p表示要估计的真实参数,x是函数的输入,y表示输入对应的数据值。最小二乘估计对应的函数为optimize.leastsq(),可以利用该函数和定义的误差函数,对真实参数进行最小二乘估计

最小二乘估计示例

from scipy import optimize
def myfunc(x,a,b,w,t):
    return a*np.exp(-b*np.sin(w*x+t))
x = np.linspace(0,2*np.pi)
par = [3,2,1.25,np.pi/4]
y = myfunc(x,*par)
y_noise = y+0.8*np.random.randn(len(y))
def errf(p,x,y):
    return y-myfunc(x,*p)
c,rv = optimize.leastsq(errf,[1,1,1,1],args = (x,y_noise))
#c返回找到的最小二乘估计
plt.plot(x,y_noise,'x',x,y,x,myfunc(x,*c),':')
plt.legend(['data','actual','leastsq'])
plt.show()

(3)曲线拟合

可以不定义误差函数,用函数optimize.curve_fit()直接对函数myfunc的参数直接进行拟合

曲线拟合示例

p,e = optimize.curve_fit(myfunc,x,y_noise)
print('p是对参数的估计值:\n',p)
print('e是4个估计参数的协方差矩阵:\n',e)

二、Scipy中的稀疏矩阵处理

1 稀疏矩阵的存储

稀疏矩阵(Sparse Matrix)是只有少部分元素值是非零的矩阵。如果按照正常方式存储所有元素,则这些矩阵将占用巨大空间,因此,稀疏矩阵只保存非零值及对应的位置

bsr_matrix(Block Sparse Row matrix):分块存储,基于行

coo_matrix(A sparse matrix in COOrdinate format):坐标形式存储(COO)

csr_matrix(Compressed Sparse Row matrix):基于行的压缩存储(CSR)

dia_matrix(Sparse matrix with DIAgonal storage):对角线存储

dok_matrix(Ditictionary Of Keys based sparse matrix):基于键值对的存储

lil_matrix(Row-based linked list sparse matrix):基于行的链表存储

在这些存储格式中,COO方式在构建矩阵时比较高效,而CSC和CSR方式在乘法运算时效率较高

2 稀疏矩阵的运算

由于稀疏矩阵数据量大,一般不使用普通矩阵作为参数来构建,而是采用非零数据点及坐标的形式构建

稀疏矩阵的基本运算

import numpy as np
from scipy import sparse
sparse.coo_matrix((2,3))
#创建空的稀疏矩阵
A = sparse.coo_matrix([[1,2,0],[0,1,0],[2,0,0]])
print(A)
#将普通矩阵转为稀疏矩阵
print(type(A))
#查看A的类型
print(type(A.tocsc()))
#不同类型的稀疏矩阵可以相互转换
v = np.array([1,3,-3])
print(A*v)

稀疏矩阵的构建

data = np.array([1,2,3,4])
rows = np.array([0,0,1,2])
cols = np.array([0,1,2,2])
W = sparse.coo_matrix((data,(rows,cols)))
print('稀疏矩阵W:\n',W)
r,c,d = sparse.find(W)
#find()函数返回非零元素的行、列和具体数值
print('稀疏矩阵W非零值:\n',r,c,d)

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
5天前
|
数据可视化 数据挖掘
R语言生存分析数据分析可视化案例(下)
R语言生存分析数据分析可视化案例
13 0
|
2天前
|
数据可视化 前端开发 数据挖掘
数据分析可视化神器---streamlit框架,各种图表绘制,布局以及生产综合案例剖析
数据分析可视化神器---streamlit框架,各种图表绘制,布局以及生产综合案例剖析
|
5天前
|
数据可视化 数据挖掘
R语言生存分析数据分析可视化案例(上)
R语言生存分析数据分析可视化案例
|
12天前
|
数据可视化 数据挖掘 Linux
如何在Linux部署DataEase数据分析服务并实现无公网IP远程分析内网数据信息
如何在Linux部署DataEase数据分析服务并实现无公网IP远程分析内网数据信息
|
12天前
|
机器学习/深度学习 数据挖掘 计算机视觉
python数据分析工具SciPy
【4月更文挑战第15天】SciPy是Python的开源库,用于数学、科学和工程计算,基于NumPy扩展了优化、线性代数、积分、插值、特殊函数、信号处理、图像处理和常微分方程求解等功能。它包含优化、线性代数、积分、信号和图像处理等多个模块。通过SciPy,可以方便地执行各种科学计算任务。例如,计算高斯分布的PDF,需要结合NumPy使用。要安装SciPy,可以使用`pip install scipy`命令。这个库极大地丰富了Python在科学计算领域的应用。
13 1
|
14天前
|
数据采集 数据可视化 数据挖掘
SciPy在数据分析中的应用:从数据清洗到可视化
【4月更文挑战第17天】# SciPy在数据分析中的应用:从数据清洗到可视化。文章探讨了SciPy在数据清洗(使用NumPy处理缺失值和异常值)、数据分析(描述性统计和模型拟合)以及数据可视化(结合Matplotlib和Seaborn进行图表绘制)中的作用。SciPy与其他Python库结合,为完整的数据分析流程提供了强大支持。
|
15天前
|
存储 数据可视化 数据挖掘
数据分析与可视化:Pandas与Matplotlib/Seaborn的完美结合
【4月更文挑战第16天】本文探讨了Python中的Pandas、Matplotlib和Seaborn如何协同进行数据分析与可视化。Pandas提供高效的数据结构DataFrame,便于数据处理和清洗;Matplotlib是基础绘图库,支持自定义图表;Seaborn则在Matplotlib基础上提供美观的统计图形。通过这三个库的无缝结合,数据分析师可以从数据处理直达可视化,提高效率并呈现更具吸引力的分析结果。掌握这些工具将助力深入理解数据并揭示其中的故事。
|
15天前
|
数据挖掘 定位技术
基于出租车GPS轨迹数据的研究:出租车行程的数据分析
基于出租车GPS轨迹数据的研究:出租车行程的数据分析
23 0
|
6天前
|
数据采集 数据可视化 数据挖掘
R语言与Python:比较两种数据分析工具
【4月更文挑战第25天】R语言和Python是目前最流行的两种数据分析工具。本文将对这两种工具进行比较,包括它们的历史、特点、应用场景、社区支持、学习资源、性能等方面,以帮助读者更好地了解和选择适合自己的数据分析工具。
|
13天前
|
数据可视化 数据挖掘 Python
Python中数据分析工具Matplotlib
【4月更文挑战第14天】Matplotlib是Python的数据可视化库,能生成多种图表,如折线图、柱状图等。以下是一个绘制简单折线图的代码示例: ```python import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] plt.figure() plt.plot(x, y) plt.title('简单折线图') plt.xlabel('X轴') plt.ylabel('Y轴') plt.show() ```
13 1