惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
H
Help Net Security
Jina AI
Jina AI
V
V2EX
G
Google Developers Blog
B
Blog
GbyAI
GbyAI
U
Unit 42
爱范儿
爱范儿
腾讯CDC
Engineering at Meta
Engineering at Meta
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 三生石上(FineUI控件)
宝玉的分享
宝玉的分享
小众软件
小众软件
D
DataBreaches.Net
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - Franky
博客园 - 聂微东
The Cloudflare Blog
I
InfoQ
Microsoft Azure Blog
Microsoft Azure Blog
Hugging Face - Blog
Hugging Face - Blog
大猫的无限游戏
大猫的无限游戏

HANG ♥ WRITING

ChatGPT 问世两年,我在 AI 的辅助下成为了一名 iOS 业余开发者 如何使用 Netcat 构建简单的安全聊天系统 QuakeSense 震感,一款简洁原生的 iOS 地震通知 App App Store 中国大陆 ICP 备案最佳实践 几款有意思的 Google Chrome 侧边栏扩展应用 GetVM 让编程学习更快一步 WildCard (野卡) - 国内用户零门槛订阅 ChatGPT、Claude、App Store 万里汇开发者收款使用全指南 | 注册、开户与账户绑定教程 中国大陆居民开通华侨银行(OCBC)海外账户完全指南 实用的 macOS 内置命令,省下买第三方应用的钱 《认知觉醒》之触动学习法 不是程序员也可以搞开发,一小时入门 Retool 低代码 疫情来袭,手把手教你在家制作美味炒鸡 企业微信机器人 Webhook 推送语雀更新消息 基于 Cloudflare Workers 部署的 JSON Database 数据库 印象时间:印象笔记出品的时间管理应用 Pixelmator Photo 2.0: 桌面级功能并适配 iPhone Shortery:Mac 快捷指令自动化 Pixelmator Pro 2.3:AI 背景去除 Quit All:一键退出应用程序 Raycast:推出官方扩展商店和开发者平台 简悦 API 2.0:收藏助手和快照功能 HomePod mini 使用体验 Prizmo 5.5:扫描效果增强并新增批注功能 Notion:近期值得关注的新特性 Google Analytics 替代品,零成本和零门槛搭建 umami.is Infuse 7:一款近乎完美的视频播放器 Gyroscope 4.14:新的产品名称和多项改进 V day:在手机上创作短视频 Things 3.14:备注支持 Markdown,同步速度加快
SciPy 中最小二乘法初始参数释疑
huhuhang · 2019-03-22 · via HANG ♥ WRITING

SciPy 提供了封装好的最小二乘法函数 scipy.optimize.leastsq()。根据其 官方文档 显示的完整参数所示,使用该函数时需要传入 func 损失函数,x0 初始化参数以及通过 args=() 传入样本。

scipy.optimize.leastsq(func, x0, args=(), Dfun=None,
	full_output=0, col_deriv=0, ftol=1.49012e-08,
	xtol=1.49012e-08, gtol=0.0, maxfev=0,
	epsfcn=None, factor=100, diag=None)

其中,func 很好理解,我们可以定义一个残差函数。而 x0 让人产生疑惑,其在官方文档中的含义是 The starting estimate for the minimization. ,字面意思是最小化的初始参数。

对于最小二乘法来说,其最终求解的是解析解,而不会涉及到从某个参数开始迭代的过程。那这里的 x0 有什么作用呢?

实际上,这里的 x0 的具体取值不会影响求解结果,所以我们可以传入随机值。但是,其值的个数决定了最终多项式的次数。具体来说,$n$ 个值表明所求解的多项式总共包含 $n$ 个参数,最终求解出的是 $n-1$ 次多项式。

一个完整的使用示例如下:

from scipy.optimize import leastsq

def func(p, x):
    # 定义一个 2 次多项式函数
    w0, w1, w2 = p
    f = w0 + w1*x + w2*x*x
    return f


def err_func(p, x, y):
    # 残差函数
    ret = func(p, x) - y
    return ret

p_init = np.random.randn(3)  # 生成 3 个随机数

# 使用 Scipy 提供的最小二乘法函数得到最佳拟合参数
parameters = leastsq(err_func, p_init, args=(x, y))