线性拟合——从最大似然估计到平方误差到huber loss
来源:互联网 发布:cda数据分析师证 编辑:程序博客网 时间:2024/05/30 23:36
考虑这样一些数据:
x = np.array([0, 3, 9, 14, 15, 19, 20, 21, 30, 35, 40, 41, 42, 43, 54, 56, 67, 69, 72, 88]) # x # x_iy = np.array([33, 68, 34, 34, 37, 71, 37, 44, 48, 49, 53, 49, 50, 48, 56, 60, 61, 63, 44, 71]) # y # y_ie = np.array([3.6, 3.9, 2.6, 3.4, 3.8, 3.8, 2.2, 2.1, 2.3, 3.8, 2.2, 2.8, 3.9, 3.1, 3.4, 2.6, 3.4, 3.7, 2.0, 3.5]) # e # e_i
作如下的可视化:
plt.errorbar(x, y, e, fmt='ok', ecolor='gray', alpha=.4)
上图可见数据中存在一些离群点(outliers)。
作如下的简单建模(linear model):
在这一模型下(Given this model),我们可以分别对每一个点计算高斯型似然(Gaussian Likelihood):
则全体样本
所谓最大似然,即是maximum 这一对数似然值,已获得相关参数。从优化的观点看,最大化该似然函数,等价于最小化和式项(summation term),该项被称为损失函数:
该表达式即是著名的平方误差(squared loss),也即我们从高斯对数似然(Gaussian Log Likelihood)推导出了经典的平方误差(Squared Loss)的形式。
接下来我们使用两种方式进行目标函数的求解:
法一:使用scipy的最优化工具箱optimize:
from scipy import optimizedef squared_loss(theta, x=x, y=y, e=e): dy = (y-(theta[0]+theta[1]*x))/e return np.sum(dy**2/2)theta = optimize.fmin(squared_loss, [0, 0], disp=False)print('theta: ', theta) # theta: [ 39.69978468 0.23621066]plt.figsize(figsize=(6, 4.5))plt.errorbar(x, y, e, fmt='ok', ecolor='gray', alpha=.4)xfit = np.linspace(0, 100)plt.plot(xfit, theta[0]+theta[1]*fit, -k)plt.title('Maximum Likelihood fit: Squared Loss')plt.savefig('./imgs/linear_fit1.png')plt.show()
最终得到的
法二:使用矩阵运算
为了后续矩阵运算的方便,我们首先需要对输入样本矩阵(这里为一维)做一次增广(augmentation):
x_aug = np.hstack((np.ones((len(x), 1)), x.reshape((-1, 1))))
考虑如下的优化问题:
我们可轻松地将之对
p_inv = np.dot(np.linalg.inv(np.dot(x_aug.T, x_aug)), x_aug.T)theta = np.dot(p_inv, y)print('theta:', theta)
可视化的代码一如上例,显示如下:
最终得到的
从squared loss到huber loss
从前面的可视化的拟合直线可以看出:通过最小化平方误差得到的拟合直线对离群点具有较高的敏感性,Huber loss is less sensitive to outliers in data than the squared error loss.
def huber_loss(res, delta): return (abs(res)<delta)*res**2/2 + (abs(res)>delta)*delta(abs(res)-delta/2)def total_huber_loss(theta, x=x, y=y, e=e, delta=3): return huber_loss((y-(theta[0]+theta[1]*x))/e, delta).sum()theta1 = optimize.fmin(total_huber_loss, [0, 0], disp=False)...
0 0
- 线性拟合——从最大似然估计到平方误差到huber loss
- 从最大似然估计法到EM算法
- 估计子的性能——从最大似然估计到方差定义式为什么以n-1作为分母
- 机器学习之从极大似然估计到最大熵原理以及EM算法详解
- 误差与最大似然估计的个人理解
- 【机器学习】聚类分析(二)——从极大似然估计到EM算法
- 最大似然估计解决线性回归
- Huber Loss function
- minFunc 2012:Huber loss
- 误差理论、贝叶斯、最大似然与最小二乘估计
- 误差理论、贝叶斯、最大似然与最小二乘估计
- 机器学习—近似误差与估计误差理解
- 【机器学习】(3):拟合度与最大似然估计
- 最大似然估计,最大后验估计,贝叶斯估计
- 最大似然估计、最大后验估计、贝叶斯估计
- 最大似然估计
- 最大似然估计
- 最大似然估计
- Android startService 和 bindService
- <LeetCode OJ> 53. Maximum Subarray
- 声明一个3行4列的二维数组,求出数组中鞍点及其所在的行,列坐标(鞍点:即该位置上的元素在该行中最大,在该列中最小(也可能没有鞍点))
- 马士兵Java课堂笔记-6-容器Collection接口remove方法中判断是否相等并删除问题
- 在线生成简单二维码图片
- 线性拟合——从最大似然估计到平方误差到huber loss
- Python笔记-均值列表
- 20150916谱聚类.md(图片版)
- 【代码提取】提取一个文件夹里面的所有Java文件的类名函数名和变量名
- 拖动3D物体主要代码
- Android之SwipeRefreshLayout
- 编写app安卓程序搜索手机附近的蓝牙设备
- Linux下USB转串口的驱动
- 史密斯夫妇握手问题