线性回归(3)——模型陷阱

模型陷阱:

1.要求准确度——易受过度拟合干扰

  为了提高预测的准确度,常从已知的特征中提取出更多的特征,并以此搭建复杂的模型。如下

  原有公式为:Y ~ (X)

  转换成       :Y ~ (X,X2, X3,...,Xn)

        yi = b + a1xi + a2xi2 + a3xi3 + ... + anxin

2.要求可靠性——易受模型幻觉干扰

  将毫无关系的变量放到模型中,且得到相应的参数估计(这个估计值几乎不可能为0),由此造成模型幻觉:

  表明得到了很多变量间的联动效应,但事实上这些效应并不存在,只是由随机变量引起的数字巧合。更严重的,可能会引起共线性、内生性等问题。

3.我们使用的数据都是已知的历史数据,但训练好的模型需要对未知的数据做预测,所以不能用同样一批数据进行训练和预测模型。

  解决方式:交叉验证(将数据分成训练集和测试集)


解决方案:

假设新模型的公式为: yi = axi + bzi + c + εi

1.统计学解决模型幻觉——假设检验

  1.1 f_test 和 t_test

  1.2 参数的置信区间

2.机器学习解决模型幻觉——惩罚项

  损失函数公式: L = Σi (yi - axi - bzi - c)2

  为了使那些本应该等于0的参数估计值尽量往0靠近,在上式中加入惩罚项(也叫正则化项),如下

         L = Σi (yi - axi - bzi - c)2 + α(|a| + |b| + |c|)

  其中α(|a| + |b| + |c|) 就是惩罚项,α表示惩罚的权重,当α > 0 时,a,b,c的绝对值越大(模型参数远离0),则惩罚项越大。

  因此在估计参数时,是寻找L的最小值,此时则迫使参数估计值向0靠近,而且和yi越不相关的变量,其对应的参数估计值向0靠近的步伐越大。

import statsmodels.api as sm

def trainRegulizeModel(X, Y, alpha):
    """
    训练加入惩罚项的线性回归模型
    """
    model = sm.OLS(Y, X)
    res = model.fit_regularized(alpha = aplha)
    return res

  代码中的alpha即为公式中的惩罚项的权重α,模型参数的估计值将依赖于这个参数,alpha越大,参数估计值的绝对值越小,在此案例中,当“alpha = 0.1”时,参数估计值为a = 0.985, b = 0, c = 0, 这也是比较“正确的”参数估计值。

  α取值会影响模型参数a,b,c的取值,但本身不是模型参数,被称为超参数。

  超参的估计:

    超参的估计不像模型参数有明确的公式,通常采用类似遍历的方法。事先给定一系列可能的超参数的值,然后遍历并评估对应的模型效果,最后从中选择效果最好的超参数,学术上称为网格搜寻。

    如本例中 alpha = [0.001, 0.01, 0.1, 1, 10],对应得到模型的均方差为[5, 2, 3, 1, 3], 我们选择均方差最小的,即alpha = 1

比较两种方案:

  假设检验有理论支持,更为严谨,解释性更好,但是整个过程需要较多的人为干预,无法做到自动化;且当数据量较少的时候容易发生误判,将相关变量判定为不相关的。

  惩罚项不需人为干预,可做到完全自动化,但由于理论基础不牢靠,对结果的解释性交叉。

猜你喜欢

转载自www.cnblogs.com/Colleen-Blog/p/10315763.html
今日推荐