【数据分析与可视化】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)

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

相关文章
|
2天前
|
SQL 人工智能 数据可视化
数据团队必读:智能数据分析文档(DataV Note)五种高效工作模式
数据项目复杂,涉及代码、数据、运行环境等多部分。随着AI发展,数据科学团队面临挑战。协作式数据文档(如阿里云DataV Note)成为提升效率的关键工具。它支持跨角色协同、异构数据处理、多语言分析及高效沟通,帮助创建知识库,实现可重现的数据科学过程,并通过一键分享报告促进数据驱动决策。未来,大模型AI将进一步增强其功能,如智能绘图、总结探索、NLP2SQL/Python和AutoReport,为数据分析带来更多可能。
39 20
|
8天前
|
监控 数据可视化 搜索推荐
如何通过数据分析优化营销流程?
在当今竞争激烈的市场中,企业需构建高效的营销流程以整合资源、提升效率并实现业务增长。本文从目标设定、渠道选择、内容创作、数据分析及团队协作工具等方面详细探讨了如何优化营销流程,并指出了常见问题及改进方向。通过明确目标、精准选择渠道、创作高价值内容、用数据驱动决策以及提升团队协作效率,企业能够在激烈的市场竞争中脱颖而出,实现持续增长。
|
29天前
|
SQL 数据可视化 大数据
从数据小白到大数据达人:一步步成为数据分析专家
从数据小白到大数据达人:一步步成为数据分析专家
217 92
|
1月前
|
存储 数据采集 数据可视化
Pandas数据应用:医疗数据分析
Pandas是Python中强大的数据操作和分析库,广泛应用于医疗数据分析。本文介绍了使用Pandas进行医疗数据分析的常见问题及解决方案,涵盖数据导入、预处理、清洗、转换、可视化等方面。通过解决文件路径错误、编码不匹配、缺失值处理、异常值识别、分类变量编码等问题,结合Matplotlib等工具实现数据可视化,并提供了解决常见报错的方法。掌握这些技巧可以提高医疗数据分析的效率和准确性。
81 22
|
2月前
|
存储 数据采集 数据可视化
Pandas数据应用:电子商务数据分析
本文介绍如何使用 Pandas 进行电子商务数据分析,涵盖数据加载、清洗、预处理、分析与可视化。通过 `read_csv` 等函数加载数据,利用 `info()` 和 `describe()` 探索数据结构和统计信息。针对常见问题如缺失值、重复记录、异常值等,提供解决方案,如 `dropna()`、`drop_duplicates()` 和正则表达式处理。结合 Matplotlib 等库实现数据可视化,探讨内存不足和性能瓶颈的应对方法,并总结常见报错及解决策略,帮助提升电商企业的数据分析能力。
154 73
|
2月前
|
数据采集 数据可视化 数据挖掘
Pandas数据应用:天气数据分析
本文介绍如何使用 Pandas 进行天气数据分析。Pandas 是一个强大的 Python 数据处理库,适合处理表格型数据。文章涵盖加载天气数据、处理缺失值、转换数据类型、时间序列分析(如滚动平均和重采样)等内容,并解决常见报错如 SettingWithCopyWarning、KeyError 和 TypeError。通过这些方法,帮助用户更好地进行气候趋势预测和决策。
137 71
|
2月前
|
数据采集 数据可视化 索引
Pandas数据应用:股票数据分析
本文介绍了如何使用Pandas库进行股票数据分析。首先,通过pip安装并导入Pandas库。接着,从本地CSV文件读取股票数据,并解决常见的解析错误。然后,利用head()、info()等函数查看数据基本信息,进行数据清洗,处理缺失值和重复数据。再者,结合Matplotlib和Seaborn进行数据可视化,绘制收盘价折线图。最后,进行时间序列分析,设置日期索引、重采样和计算移动平均线。通过这些步骤,帮助读者掌握Pandas在股票数据分析中的应用。
93 5
|
2月前
|
数据采集 监控 数据挖掘
常用电商商品数据API接口(item get)概述,数据分析以及上货
电商商品数据API接口(item get)是电商平台上用于提供商品详细信息的接口。这些接口允许开发者或系统以编程方式获取商品的详细信息,包括但不限于商品的标题、价格、库存、图片、销量、规格参数、用户评价等。这些信息对于电商业务来说至关重要,是商品数据分析、价格监控、上货策略制定等工作的基础。
|
3月前
|
机器学习/深度学习 算法 数据挖掘
数据分析的 10 个最佳 Python 库
数据分析的 10 个最佳 Python 库
198 4
数据分析的 10 个最佳 Python 库
|
3月前
|
SQL 数据挖掘 Python
数据分析编程:SQL,Python or SPL?
数据分析编程用什么,SQL、python or SPL?话不多说,直接上代码,对比明显,明眼人一看就明了:本案例涵盖五个数据分析任务:1) 计算用户会话次数;2) 球员连续得分分析;3) 连续三天活跃用户数统计;4) 新用户次日留存率计算;5) 股价涨跌幅分析。每个任务基于相应数据表进行处理和计算。