WARNING
🧪 Beta公测版本提示:教程主体已完成,正在优化细节,欢迎大家提Issue反馈问题或建议。
数理统计与估计 — Python / C++ 代码详解
Download demo.pyDownload mle.hppDownload demo.cpp
运行方式
bash
cd docs/math/estimation/code
python demo.py
g++ -std=c++17 demo.cpp -o est_demo两张图:est_bernoulli.png(est_variance.png(MLE 方差偏小)。C++ 对 7 次正面 / 10 次抛币印 0.7。
代码逐段详解(Python)
第1步:伯努利 MLE 就是均值
python
def bernoulli_mle(x):
return float(np.mean(x))np.random.binomial(n, p, size=2000) / n 一次抽出 2000 个
第2步: 还是
python
den = (x.size - 1) if unbiased else x.size
return float(s / den)gaussian_mle 里
- MLE 直方图中心应明显小于 4(理论期望是
); - 无偏
中心应靠近 4。
不要用 np.var(x) 的默认值混着比:NumPy 默认 ddof=0(除以 ddof=1 才是
np.random.normal(mu, sigma, size=n) 的第二参数是标准差不是方差,所以传入 np.sqrt(sig2_true)。
C++:mle.hpp
bernoulli_mle 吃 const int*。gaussian_mle 用两个输出引用 mu, sigma2,因为 C++ 不能漂亮地一次返回一对而不引入 struct——教学里引用比 std::pair 更直。
可选 Eigen:Map<VectorXd>(ptr, n).mean() 等价于样本均值,仍然要自己决定方差除以谁。
源码位置
docs/math/estimation/code/demo.pydocs/math/estimation/code/mle.hppdocs/math/estimation/code/demo.cpp