用Python学线性代数:自动拟合数据分布

简介: 用Python学线性代数:自动拟合数据分布

问题


如果有一组数据,如何确定他们来自哪个统计分布?


从数据分析的角度,我们并不想要通过严格的统计方法去找到这个分布,其实 Python 中有一个可以自动拟合数据分布的库 —— distfit  。这是一个python包,用于通过残差平方和(RSS)和拟合优度检验(GOF)对89个单变量分布进行概率密度拟合,并返回最佳分布。


distfit 简单又好用


# 安装
pip install distfit


常见用法:


.fit_transform(): 在经验数据 X 上拟合分布

.summary:获得拟合数据并测试拟合优度的所有分布的分数。

.predict():预测响应变量的概率

.model:输出分布的最佳参数

.plot(): 绘制最佳的拟合分布


示例


from distfit import distfit
import numpy as np
X = np.random.normal(0, 2, [100,10])
y = [-8,-6,0,1,2,3,4,5,6]
dist = distfit(todf=True)
dist.fit_transform(X)
dist.plot()


输出用于拟合过程的函数列表,它使用最流行的 10 个发行版的列表进行扫描。


[distfit] >[norm      ] [0.00 sec] [RSS: 0.0120713] [loc=-0.047 scale=1.984]
[distfit] >[expon     ] [0.0 sec] [RSS: 0.4092169] [loc=-7.320 scale=7.273]
[distfit] >[pareto    ] [0.06 sec] [RSS: 0.4098607] [loc=-98251992.546 scale=98251985.226]
[distfit] >[dweibull  ] [0.01 sec] [RSS: 0.0229391] [loc=-0.046 scale=1.721]
[distfit] >[t         ] [0.04 sec] [RSS: 0.0120717] [loc=-0.047 scale=1.984]
[distfit] >[genextreme] [0.05 sec] [RSS: 0.0107445] [loc=-0.755 scale=1.981]
[distfit] >[gamma     ] [0.04 sec] [RSS: 0.0118907] [loc=-191.812 scale=0.021]
[distfit] >[lognorm   ] [0.09 sec] [RSS: 0.0117103] [loc=-107.148 scale=107.084]
[distfit] >[beta      ] [0.03 sec] [RSS: 0.0116300] [loc=-14.479 scale=28.973]
[distfit] >[uniform   ] [0.0 sec] [RSS: 0.2545746] [loc=-7.320 scale=12.835]
[distfit] >[loggamma  ] [0.04 sec] [RSS: 0.0123738] [loc=-360.941 scale=54.518]


当然,distfit 支持的分布还有很多:

640.png


最后绘制最佳的拟合分布


640.png

dist.summary 输出各分布的参数。


distr      score  ...       scale                                       arg
0   genextreme  0.0107445  ...      1.9814                    (0.27387377680364405,)
1         beta    0.01163  ...     28.9726  (26.055079164665887, 26.248878389403494)
2      lognorm  0.0117103  ...     107.084                    (0.01848064379707136,)
3        gamma  0.0118907  ...   0.0205321                      (9339.777394183824,)
4         norm  0.0120713  ...     1.98429                                        ()
5            t  0.0120717  ...     1.98428                      (1863131.339823592,)
6     loggamma  0.0123738  ...     54.5178                      (750.2645425001494,)
7     dweibull  0.0229391  ...     1.72129                     (1.2898970802235787,)
8      uniform   0.254575  ...     12.8346                                        ()
9        expon   0.409217  ...     7.27316                                        ()
10      pareto   0.409861  ...  9.8252e+07                     (13542571.060345018,)


相关文章
|
6月前
|
计算机视觉 Python
OpenCV轮廓拟合与凸包的讲解与实战应用(附Python源码)
OpenCV轮廓拟合与凸包的讲解与实战应用(附Python源码)
186 0
|
6月前
|
机器学习/深度学习 数据采集 算法
【Python机器学习】过拟合及其抑制方法讲解及实战(图文解释 附源码)
【Python机器学习】过拟合及其抑制方法讲解及实战(图文解释 附源码)
120 0
【Python机器学习】过拟合及其抑制方法讲解及实战(图文解释 附源码)
|
6月前
|
机器学习/深度学习 Python
【Python机器学习】全连接层与非线性回归、防止过拟合方法的讲解及实战( 附源码)
【Python机器学习】全连接层与非线性回归、防止过拟合方法的讲解及实战( 附源码)
258 0
|
机器学习/深度学习 自动驾驶 算法
【OpenAI】Python:基于 Gym-CarRacing 的自动驾驶项目(2)| 车道检测功能的实现 | 边缘检测与分配 | 样条拟合
【OpenAI】Python:基于 Gym-CarRacing 的自动驾驶项目(2)| 车道检测功能的实现 | 边缘检测与分配 | 样条拟合
110 1
|
1月前
|
机器学习/深度学习 算法 Python
深度解析机器学习中过拟合与欠拟合现象:理解模型偏差背后的原因及其解决方案,附带Python示例代码助你轻松掌握平衡技巧
【10月更文挑战第10天】机器学习模型旨在从数据中学习规律并预测新数据。训练过程中常遇过拟合和欠拟合问题。过拟合指模型在训练集上表现优异但泛化能力差,欠拟合则指模型未能充分学习数据规律,两者均影响模型效果。解决方法包括正则化、增加训练数据和特征选择等。示例代码展示了如何使用Python和Scikit-learn进行线性回归建模,并观察不同情况下的表现。
284 3
|
2月前
|
算法 数据挖掘 Python
Python中的拟合技术:揭示数据背后的模式
Python中的拟合技术:揭示数据背后的模式
40 0
Python中的拟合技术:揭示数据背后的模式
|
6月前
|
计算机视觉 Python
使用Python进行多点拟合以确定标准球的球心坐标
使用Python进行多点拟合以确定标准球的球心坐标
145 1
|
6月前
|
机器学习/深度学习 算法 数据挖掘
数据分享|PYTHON用PYSTAN贝叶斯IRT模型拟合RASCH模型分析学生考试问题数据
数据分享|PYTHON用PYSTAN贝叶斯IRT模型拟合RASCH模型分析学生考试问题数据
|
6月前
|
机器学习/深度学习 算法 Python
【Python机器学习专栏】机器学习中的过拟合与欠拟合
【4月更文挑战第30天】机器学习中,模型性能受数据、算法及复杂度影响。过拟合(训练数据学得太好,泛化能力弱)和欠拟合(模型太简单,无法准确预测)是常见问题。理解两者概念、原因、影响及检测方法对构建有效模型至关重要。解决策略包括增加数据量、简化模型、添加特征或选择更复杂模型。使用交叉验证等工具可帮助检测和缓解过拟合、欠拟合。
145 0
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
Python用GAN生成对抗性神经网络判别模型拟合多维数组、分类识别手写数字图像可视化
Python用GAN生成对抗性神经网络判别模型拟合多维数组、分类识别手写数字图像可视化