
常见的线性模型:
求解方式有两种,一种是计算均方误差(MSE),使得均方误差最小。

找到梯度为零的点即可。
而之前一直比较模糊的最大似然法也比较清楚了。一般线性模型,我们假定误差项是符合高斯分布的,高斯分布的概率密度函数为:
这里x即为原始值,
我们要找的就是使得p值最大的theta。取log是为了求值的方便,下面的推导直接把前面部分分离出来了,因为是个常数,可以直接不看,看后半部分就行了。

这样,我们看只要求后半部分的极值就行了,由于是负号,求其最大值就是求不带负号的最小值,这样就跟MSE的公式几乎一样了。

从概念上讲就是,由于误差项是高斯分布的,而估计值是一个确定值,所以当前真实值其实是落在以估计值为中心的高斯分布上的,如下

我们想要估计值尽可能等于真实值,那么使真实值最好就落在高斯分布的最高点上,即概率最大点,所以我们把每个真实值的落在各自估计值的高斯分布的概率加起来最大,就可以说是最佳的拟合程度了。由于加了log,所以累加在图2中变成了累乘。

而这个极大似然估计也概念化地解释了过拟合欠拟合中地bias-variance问题,variance就是指这个分布地宽窄,如果过宽,variance过大,即我们的模型变异很大,可能加一个或减一个数据,参数都会变很多。
而估算variance可以用bootstrap来做,bootstrap的过程就是,加入我们有10各样本,就取随机在10个样本中抽取10个样本,但是抽取方式是可以重复的,因此我们又得到了10个样本,只是可能有重复样本。

看一下代码就很清楚了。
def resample_with_replacement(x, y):"""Resample data points with replacement from the dataset of `x` inputs and`y` measurements.Args:x (ndarray): An array of shape (samples,) that contains the input values.y (ndarray): An array of shape (samples,) that contains the correspondingmeasurement values to the inputs.Returns:ndarray, ndarray: The newly resampled `x` and `y` data points."""# Get array of indices for resampled pointssample_idx = np.random.choice(len(x), size=len(x), replace=True)# Sample from x and y according to sample_idxx_ = x[sample_idx]y_ = y[sample_idx]return x_, y_

这样就可以通过bootstrap来估计出我们参数的置信区间,虽然我们无从知道真实值是什么样的,但是给一个区间总比一个点信息更多一点。当然有的显著性检验应该可以用这个区间有没有过0点来做。
除了bootstrapping可以给出模型的variance,还可以使用交叉验证的方法评估模型,把所有数据分成n块,每次用其中一块做验证集,其他为测试集。是测试集的平均正确率来判断模型表现。这里要注意,一般都会做标准化,不能在划分验证集和测试集之前做,这样会带来很多的假阳性。一个办法是对训练集标准化,然把用得到的标准化参数应用到测试集上。
以上,我们的假设是误差项为高斯分布,而不是所有都符合高斯分布的,如,如果反应是多个离散值的分布,那么我们的误差项分布使用泊松分布更好。这样就是个非线性的模型了,做起来很简单,只需要在线性模型中间加一步非线性转化,将原来的线性模型得到的输出,套一个非线性方程即可,这也就是所谓的广义线性模型(GLM)。

而二值分布只需要将非线性方程设置为sigmoid方程,套上即可,这就是Logistic回归。
这样就是可以用glm,只是在原来的线性模型加一步非线性转化就可以结果多样的问题。

使用正则化解决过拟合问题,详见:
https://zhuanlan.zhihu.com/p/146448243zhuanlan.zhihu.com上图均来自于NMA2020的tutorial,代码来自示例代码:
https://github.com/NeuromatchAcademy/course-content/tree/master/tutorialsgithub.com