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

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

相关文章
|
8天前
|
数据采集 数据可视化 数据挖掘
利用Python和Pandas库优化数据分析流程
在当今数据驱动的时代,数据分析已成为企业和个人决策的重要依据。Python作为一种强大且易于上手的编程语言,配合Pandas这一功能丰富的数据处理库,极大地简化了数据分析的流程。本文将探讨如何利用Python和Pandas库进行高效的数据清洗、转换、聚合以及可视化,从而优化数据分析的流程,提高数据分析的效率和准确性。
|
8天前
|
SQL 数据采集 数据挖掘
构建高效的Python数据处理流水线:使用Pandas和NumPy优化数据分析任务
在数据科学和分析领域,Python一直是最受欢迎的编程语言之一。本文将介绍如何通过使用Pandas和NumPy库构建高效的数据处理流水线,从而加速数据分析任务的执行。我们将讨论如何优化数据加载、清洗、转换和分析的过程,以及如何利用这些库中的强大功能来提高代码的性能和可维护性。
|
8天前
|
数据采集 数据可视化 数据挖掘
如何利用Python中的Pandas库进行数据分析和可视化
Python的Pandas库是一种功能强大的工具,可以用于数据分析和处理。本文将介绍如何使用Pandas库进行数据分析和可视化,包括数据导入、清洗、转换以及基本的统计分析和图表绘制。通过学习本文,读者将能够掌握利用Python中的Pandas库进行高效数据处理和可视化的技能。
|
8天前
|
数据采集 数据可视化 数据挖掘
Python 与 PySpark数据分析实战指南:解锁数据洞见
Python 与 PySpark数据分析实战指南:解锁数据洞见
|
8天前
|
机器学习/深度学习 数据采集 数据可视化
R语言电影数据分析:随机森林探索电影受欢迎程度因素、参数调优可视化
R语言电影数据分析:随机森林探索电影受欢迎程度因素、参数调优可视化
|
8天前
|
SQL 数据采集 存储
Hive实战 —— 电商数据分析(全流程详解 真实数据)
关于基于小型数据的Hive数仓构建实战,目的是通过分析某零售企业的门店数据来进行业务洞察。内容涵盖了数据清洗、数据分析和Hive表的创建。项目需求包括客户画像、消费统计、资源利用率、特征人群定位和数据可视化。数据源包括Customer、Transaction、Store和Review四张表,涉及多个维度的聚合和分析,如按性别、国家统计客户、按时间段计算总收入等。项目执行需先下载数据和配置Zeppelin环境,然后通过Hive进行数据清洗、建表和分析。在建表过程中,涉及ODS、DWD、DWT、DWS和DM五层,每层都有其特定的任务和粒度。最后,通过Hive SQL进行各种业务指标的计算和分析。
62 1
Hive实战 —— 电商数据分析(全流程详解 真实数据)
|
8天前
|
前端开发 数据可视化 数据挖掘
R语言对综合社会调查GSS数据进行自举法bootstrap统计推断、假设检验、探索性数据分析可视化|数据分享(下)
R语言对综合社会调查GSS数据进行自举法bootstrap统计推断、假设检验、探索性数据分析可视化|数据分享
|
3天前
|
数据采集 SQL 数据挖掘
2024年8个Python高效数据分析的技巧_python 数据分析 效率,2024年最新阿里社招p7面试几轮
2024年8个Python高效数据分析的技巧_python 数据分析 效率,2024年最新阿里社招p7面试几轮
|
2天前
|
存储 数据采集 数据挖掘
Python数据分析实验一:Python数据采集与存储
Python数据分析实验一:Python数据采集与存储
17 1
|
3天前
|
SQL 数据可视化 数据挖掘
2024年8个Python高效数据分析的技巧。,2024年最新Python基础面试题2024
2024年8个Python高效数据分析的技巧。,2024年最新Python基础面试题2024
2024年8个Python高效数据分析的技巧。,2024年最新Python基础面试题2024