吴恩达机器学习——异常检测


异常检测算法


  • 算法就是通过已有数据集根据所有的特征建立一个概率模型,用于新样本的预测,当新样本的概率小到一定程度时则认为出现异常。

  • 算法步骤:
  1. 选择有用的特征集。
  2. 对每一个特征x_{j}结合高斯算法公式得到均值u_{j}和方差\sigma ^{2}_{j}
  3. 概率p(x)是各个特征概率的乘积。
  4. 对一个新样本x的各个分量值代入对应的概率公式得到p(x)值,于预设的阈值作比较得到结果。当小于阈值时则认为出现异常。
  • 算法图像:

以有两个特征为例,立体图像越高则代表概率越大。


数据集的划分


数据集通常是个偏差类,且正确的数据集划分方案应为蓝色部分,将不同的正确的数据集部分分别划分到CV和Test。而紫色线部分(即CV和Test的正确数据集相同)则是不好的划分方式。


模型的评价


由于是偏差类数据集,我们采用的评估方式应为召回率和准确率结合的F1值方式。

我们可以根据不同模型得到的F1值比较得到最佳模型,同时可以通过修改阈值得到不同F1值比较得到最佳阈值。


异常检测算法与监督学习


那么我们何时采用异常检测算法,何时又更倾向于直接采用监督学习呢?

  • 采用异常检测算法:
  1. 正样本(y=1,具有异常)数量很少,通常0-20个,最多50个。
  2. 负样本(y=0,正常)数量很多,足够用于计算出概率参数。
  3. 异常涉及到的特征多,监督学习很难从大量正常样本中学习到异常特征。

特征的选择


  • 有时我们选择的特征,画出分布直方图发现他们不满足高斯分布,但我们可以利用数学上的特征变换得到类似高斯变换的新特征。

  • 挖掘新特征:我们可以根据误差分析,找到被误判的样本,回溯查得在某一个新特征下其与正常样本有明显的偏离,将该新特征添加到特征集合中。
  • 我们可以随意对几个信息做数学上的组合计算来得到可用的特征。

多变量高斯分布


我们上面所说的高斯分布,变量之间的大小关系对概率的影响是不会被考虑到的,而当两个变量呈现线性相关时,我们除了可以人工构造新的特征\frac{x_{2}}{x_{1}}外,还可以使用多变量高斯分布算法。

首先,我们先来研究一下性质。

可见,我们可以通过调整协方差矩阵改变概率分布。

再考虑加上正负相关的性质。

还可以改变中心点。

得到改进版新的算法:

区别在于p(x)的计算方案。在新的计算方案中,得到的协方差是一个斜对角矩阵,对角上的值为各个特征的方差,而其他区域均为0。


新方案与原始方案的对比


新方案可以自动识别出变量之间的线性关系,而不用像初始方案一样人工创造出表示线性关系的新特征。

但由于新方案要计算逆矩阵,所以计算量远远大于初始方案。

所以当数据集数量大于特征数量时,一般是远大于(10倍),我们才会选择新方案。

新方案下有两种情况逆矩阵无法计算:

  1. m<=n
  2. 有重复信息的特征,如x1=x2或x5=x3+x4这种没有产生新信息的特征。

猜你喜欢

转载自blog.csdn.net/weixin_39714797/article/details/87562093