UP | HOME

lec-01 Regression case study

Table of Contents

1 Regression case study

1.0.1 training

回归分析的应用场景:

  1. 股票市场预测
  2. 自动驾驶
  3. 推荐系统

进化 pokemon 找到这样一个function: f(pokemon 的属性) = combat power after evolution

ML的 training 得分三个步骤:

  1. Model 函数集
  2. goodness 评价函数好坏
  3. choose 选择最好的

1.0.2 model

ML的test 就一个步骤: test new data on fn from training

我们就从最简单的开始,假设用一条线来预测他们,

y' = wx + b

这就是model.

1.0.3 goodness

然后通过 Sum(y - y')^2 来看他是不是够好这里 y-y'residual.

f(residue) = Loss funtion

这就是 goodness of model.

1.0.4 choose

最后我们要在无限多的 wb 中选择最好的两个就用GD(goodness) 来选择最好的wb这就是 choose

经过上面的步骤之后,把得到的函数 f(pokemon) = pc evolution 应用到我们的新的pokemon看看效果。这就是 test

1.0.5 optimization

test之后发现不够好,那么我就加强model。

「注意」,这个加强的意思就是让函数向trainingset更靠近。好像这是为 trainingset 专门设置的function,越精确的损失越多。就好像古汉语和现代汉语一样。这就是 model improvement

加强model开始可以获得不错的效果,那是因为原来的model确实太松散。一旦加强的太多,就变成专属的,只适用于trainingdata的。那么对未知的部分就越来越不适用。矫枉过正。这就是 overfitting.

数据集 focused model:专属于某个数据集,就不属于其他数据集
特征集 focused model:专注于全体特征,就损失重要特征

1.0.6 model selection

我如何获得更好的模型函数呢?

根据 overfitting 的大小,我们可以选择一个「复杂度比较中庸」的模型函数,使他在 training data 和 test data 上的都还不错。这就是 model selection

1.0.7 overfitting

还有一种方法,如果我们的trainingdata无穷大,能覆盖所有未知的数据那么,我们对他进行·「专属化」,这是没问题的,因为他完全涵盖了所有未知的情况。这引出了一个优化模型的观点:收集更多数据,让training data变大,·「专属化」就会更普适一些。这就是 collect more data to training (more x) –> 扩大model·「专属化范围」

我们原始考虑的数据仅仅考虑了一部分属性,我们把注意力都集中在这些属性上来做model,如果考虑其他属性,model·「专属化」的方向就会不一样一个人考上清华,但他只是听课,课后不做作业,我们就认为 上课+不做作业 = 考上清华,荒唐!其实他有在边上课边做课后习题。所以我们重新考虑样本的属性,f(上课+作业+课后题) –> 清华。重新选择属性。这就是 feature engineer (dive into x) –> 改变model·「专属化方向」

1.0.8 feature engineer

如果 feature selection 选择的属性是某种离散属性,比如男生女生,比如城市乡村,我们可以用ifelse的形式,分段函数来加强model。但是这种形式不好通过GD去choosewb,可以采用boolean函数的形式统合起来:

y' = [|x男生?|]*(w_m x + b_m) + [|x女生?|]*(w_fm x + b_fm) f(上课+作业+课后题+性别)

–> 清华这就是 feature engineer –> 分段model 函数

如果你是教师或者教育学学者,你在选择 feature 时,你会有更深刻的视角,比如加上早恋,加上父母职业,加上周围网吧,甚至加上电视剧等等。所以你是否对于 x 有研究就决定了你是否能选择更好的 feature这就是 domain knowledge –> 更好的 feature engineer

如果我不是专业学者,不研究x到底隐含什么条件,怎么办?

我可以把我能想到或者通过调研得到的属性,全部都考虑进去,这样得到的model的方向就被分散了。这时候我们在加强model,他的效果就会被均分到每一个feature上。一把利剑变成了一个盾牌。他确实考虑了trainingdata上每个点的每个属性,但是某些属性太具有·「独有性」,考虑他们会拉扯model的注意力,让model在其他方向上·「失去原有的力度」。这就是

feature engineer
      |
      |
分散model注意力
      |
      |
另一种原因的overfitting
      |
      |
原本不该专注的,却专注了,这也是另一种·「专有化」方向的转移失误

model追求更大的数据集和专注普适的属性特征

所以需要重新理解 overfitting,其实overfitting的本质就是·「在狭隘的方向上过度专有化」这个方向包含两个方面,一个是数据集层面,一个是特征集层面。数据集层面是说训练集是很小的集合,你的model专有化他,就会不适用更多未知的数据。特征集层面是说你把不重要的特征纳入model,他们牵扯了model的注意力,model也必须朝他们的方向专有化。 overfitting = 在狭隘的数据集和不重要的特征集上专有化。

1.0.9 handle overfitting

如何解决 overfitting:
1. 加大数据集
2. 降低模型次方
3. 选择好的feature

其实降低模型次方,就是降低input-space的次方。
选择好的feature,就是降低input-space的维度。

不论是降低次方还是降低维度其实都是让model·「不对x太敏感」,而且这两次方和维度都可以通过w进行调整。

y' = b + w1·x + w2·x^2 + w3·x^3 ...
w2 = w3 = 0  OK --> 降次方
.   eg: w1·x
.                      _  _
.                     | x1 |
.    -----------      | x2 |
.    1 0 1 0 0 1   ·  | x3 |
.    -----------      | x4 |
.                     | x5 |
.                     |_x6_|
.   w1_2 = w1_4 = w1_5 =0  OK --> 降维度

所以总体上看,限制 w 向量的大小,可以在一定程度上解决overfitting的作用。

1.0.10 regularization

所以可以加上 λ|w|2 作为限制放进 model 中。 y' = b + wx + λ|w|^2 这就是 regularization

那 regularization 具象化一些是什么呢?

就是 我限制w的大小,让w不那么大,因为input的变化会被放大w倍体现在 output 上,所以降低w,就是让x轴上较小的变化不会在y轴上产生太大的变化。整体看就不会出现太陡峭的地方,函数图像整体区域平缓平滑。

这就像是《疯狂动物城》里的树懒,你吼的声音再大他都很·「稳定」。这样让函数变·「懒」的方式,虽然不能精确对治overfitting的两个问题,但是他能近似的保证model不会对x太敏感。

而且 λ 是一个可以调整的参数,他越大就会让|w|越小,就会让函数越·「懒惰」,让函数越平缓平滑。但是当 λ 太大而导致 |w| 过于小的时候,w的每一个维度以及每一个w都会变得很小,整个model也损失了对于·「重要特征的专有化」。一旦损失了重要特征的专有化,那么不论是 trainingdata 还是未知数据的预测误差都会加大。

所以 regularization 像是·「普杀」性质的疗法。像是化疗不但杀癌细胞,也杀正常细胞,需要注意调节用量 — λ. 所以 λ 是什么,是·「化疗的强度」

Date: 2017-5-20

Author: yiddi

Created: 2018-08-12 日 14:55

Validate