模型陷阱:
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
比较两种方案:
假设检验有理论支持,更为严谨,解释性更好,但是整个过程需要较多的人为干预,无法做到自动化;且当数据量较少的时候容易发生误判,将相关变量判定为不相关的。
惩罚项不需人为干预,可做到完全自动化,但由于理论基础不牢靠,对结果的解释性交叉。