提交 06376d07 编写于 作者: W wizardforcel

2020-12-10 21:22:20

上级 46b0bdb2
......@@ -169,7 +169,7 @@ Bin edges: [16\. 18.73684211 21.47368421 24.21052632 26.94736842 29.6842
![](img/ab4c2cc0-deca-42f2-a783-a8ed3259ff51.png)
Histogram of the test distribution
测试分布的直方图
该图证实该分布是非常不规则的,并且一些区域的峰被平坦区域包围。 如前所述,当查询基于样本属于特定区域的概率时,直方图会很有帮助。 例如,在这种情况下,我们可能有兴趣确定某个人的年龄在 48.84 和 51.58 之间(对应于第 12^个)的概率 bin 从 0 开始)。 由于所有垃圾箱的宽度相同,因此我们可以简单地用 *n [p] (b [12 []* *)*`h[12]` )和`m``ages.shape[0]`):
......@@ -222,7 +222,7 @@ P(48.84 < x < 51.58) = 0.13 (13.43%)
![](img/8f5b2bb9-40c8-42f2-a728-cdf8638c4e33.png)
Gaussian kernel
高斯核
鉴于其规律性,高斯核是许多密度估计任务的常见选择。 但是,由于该方法不允许混合不同的内核,因此选择时必须考虑所有属性。 从统计数据中,我们知道高斯分布可被视为峰度的平均参考值(峰度与峰高和尾巴的重量成正比)。 为了最大化内核的选择性,我们需要减少带宽。 这意味着即使最小的振荡也会改变密度,并且结果是非常不规则的估计。 另一方面,当`h`大时(即高斯的方差),近似变得非常平滑,并且可能失去捕获所有峰的能力。 因此,结合选择最合适的带宽,考虑其他可以自然简化流程的内核也会很有帮助。
......@@ -242,7 +242,7 @@ Gaussian kernel
![](img/9381573d-6eb5-496a-ae8b-58286a80b41c.png)
Epanechnikov kernel
Epanechnikov
*h→0 时,内核会变得非常尖峰。*但是,由于其数学结构,它将始终保持非常规则; 因此,在大多数情况下,无需用它代替高斯核(即使后者的均方误差稍大)。 此外,由于函数在 *x =±h(K(x; h)= 0* *对于* *| x | > h* )不连续,因此 可能会导密集度估计值迅速下降,特别是在边界处,例如高斯函数非常缓慢地下降。
......@@ -262,7 +262,7 @@ Epanechnikov kernel
![](img/ec0ecff9-d103-47f7-ae02-f4c43a4192cf.png)
Exponential kernel
指数核
可以看到,这样的函数适合于建模非常不规则的分布,其密度高度集中在某些特定点周围。 另一方面,当数据生成过程非常规则且表面光滑时,误差可能会非常高。 **平均积分平方误差****MISE**)可以用来评估内核(和带宽)的性能,是一种很好的理论方法,其定义如下:
......@@ -300,7 +300,7 @@ Exponential kernel
![](img/16463564-80ff-4804-8f84-3edc52ef512f.png)
Density estimation of x[j]. The Kernel functions are evaluated in each point belonging to the neighborhood of x[j]
`x[j]`的密度估计。 在属于`x[j]`邻域的每个点中评估内核函数
在这一点上,自然会问为什么不为每个查询使用整个数据集而不是 k-NN 方法? 答案很简单,它基于这样的假设:可以使用局部行为轻松地插值以`x[j]`计算的密度函数的值(即,对于多变量 分布,以`x[j]`为中心的球和*远点*对估计没有影响。 因此,我们可以将计算限制为`X`的较小子集,避免包含接近零的贡献。
......@@ -326,7 +326,7 @@ kd_15.fit(ages.reshape(-1, 1))
![](img/bc8411ad-244a-4397-969a-c0a400c5ab66.png)
Gaussian density estimations with bandwidths: 0.1 (top), 0.5 (middle), and 1.5 (bottom)
带宽的高斯密度估计:0.1(顶部),0.5(中间)和 1.5(底部)
可能会注意到,当带宽很小(0.1)时,由于缺少特定子范围的样本,因此密度具有强烈的振荡。 当 *h = 0.5* 时,轮廓(由于数据集是单变量的)变得更加稳定,但是仍然存在一些由邻居的内部方差引起的残留快速变化。 当`h`变大(在我们的情况下为 1.5)时,几乎完全消除了这种行为。 一个明显的问题是:如何确定最合适的带宽? 当然,最自然的选择是使 MISE 最小的`h`值,但是,正如所讨论的,只有在知道真实的概率密度时才可以使用此方法。 但是,有一些经验标准已经被证实是非常可靠的。 给定完整的数据集 *X∈^m* ,第一个数据集基于以下公式:
......@@ -388,7 +388,7 @@ kd_exponential.fit(ages.reshape(-1, 1))
![](img/fb73fad6-6582-4d8e-be92-4ed3633003f0.png)
Density estimations with bandwidths equal to 2.0 and Gaussian kernel (top), Epanechnikov kernel (middle), and Exponential kernel (bottom)
带宽等于 2.0 的密度估计,高斯核(上),Epanechnikov 核(中)和指数核(下)
不出所料,Epanechnikov 和指数核都比高斯核振荡(因为当`h`较小时,它们倾向于更趋于峰值); 但是,很明显,中心图肯定是最准确的(就 MISE 而言)。 以前使用高斯核和 *h = 0.5* 时已经获得了相似的结果,但是在那种情况下,振荡极为不规则。 如所解释的, Epanechnikov 内核在值达到带宽边界时具有非常强的不连续趋势。 通过查看估计的极端现象可以立即理解该现象,该估计值几乎垂直下降到零。 相反, *h = 2* 的高斯估计似乎非常平滑,并且无法捕获 50 到 60 年之间的变化。 指数内核也发生了同样的情况,它也显示出其独特的行为:极端尖刺的极端。 在下面的示例中,我们将使用 Epanechnikov 内核; 但是,我邀请读者也检查带宽不同的高斯滤波器的结果。 这种选择有一个精确的理由(没有充分的理由就不能丢弃):我们认为数据集是详尽无遗的,并且我们希望对克服自然极端的所有样本进行惩罚。 在所有其他情况下,可以选择非常小的残差概率。 但是,必须考虑每个特定目标做出这样的选择。
......@@ -404,7 +404,7 @@ Density estimations with bandwidths equal to 2.0 and Gaussian kernel (top), Epan
![](img/54600699-54b0-4f3c-ae51-db92077dc887.png)
Epanechnikov density estimation with anomaly cut-off
具有异常截止的 Epanechnikov 密度估计
红点表示将样本归类为异常的年龄限制。 让我们计算一些测试点的概率密度:
......@@ -508,7 +508,7 @@ IQRs: [0\. 0.34871118 1.99673381]
![](img/1c01b7ee-f0bb-492d-9e1e-ee83094efda8.png)
Histogram for the first component (duration)
第一部分的直方图(持续时间)
不出所料,这种成分不是很重要,因为只有一小部分样本具有不同的值。 因此,在此示例中,我们将跳过它,仅使用源字节和目标字节。 现在,如前所述,计算带宽:
......@@ -534,7 +534,7 @@ h0 = 0.000, h1 = 0.026, h2 = 0.133
![](img/99fdb6a4-0ddc-48d4-8396-53b95f4be661.png)
Density estimations for normal connections (upper line) and malicious attacks (lower line)
正常连接(上面一行)和恶意攻击(下面一行)的密度估计
第一行显示了正常连接的密度,而下一行是恶意攻击。 正如预期的那样,两种情况下的第一部分(持续时间)几乎相同,可以将其丢弃。 相反,源字节和目标字节都表现出非常不同的行为。 在不考虑对数变换的情况下,普通连接平均发送 5 个字节,其方差很小,从而将电位范围扩展到间隔( 4 , 6 ) 。 响应具有较大的方差,其值在 4 和 10 之间,并且从 10 开始具有非常低的密度。 相反,恶意攻击的源字节和目标字节都具有两个峰值:一个较短的峰值对应于 -2 ,一个较高的峰值分别对应于大约 11 和。 9 (与正常区域的重叠最小)。 即使不考虑全部联合概率密度,也不难理解大多数攻击会发送更多的输入数据并获得更长的响应(而连接持续时间并没有受到很大影响)。
......@@ -606,7 +606,7 @@ print(np.sum(Ya < 0.015))
![](img/646b8603-c9d0-4176-81a6-8ce4046caf50.png)
Histogram of anomaly (left) and normal (right) densities
异常(左)和正常(右)密度的直方图
正态分布的右尾并不令人担忧,因为异常高度集中在左侧。 在这一领域,也存在大多数异常,因此也是最严重的。 原因与特定域严格相关(对于不同的请求,输入和输出字节可能非常相似),并且在更稳定的解决方案中,有必要考虑其他参数(例如:完整的 KDD Cup 99 数据集) 。 但是,出于教学目的,我们可以定义一个简单的函数(基于先前定义的阈值),以根据源字节和目标字节的数量(不是对数的)检查连接状态:
......@@ -648,7 +648,7 @@ p = 0.00000 - High risk
![](img/ce9eb95b-7f88-4a3b-9dc0-0faeb226b0bc.png)
Bivariate plot of the source and destination bytes densities
源和目标字节密度的双变量图
前面的屏幕快照确认,尽管攻击通常涉及大量的输入字节,但响应却与正常的响应非常相似,即使它们占据了该区域的最末端。 作为练习,我邀请读者使用整个 KDD Cup 99 数据集训练模型,并找出最佳阈值以检测非常危险和中等风险的攻击。
......@@ -664,7 +664,7 @@ Bivariate plot of the source and destination bytes densities
![](img/0b1fe0d8-9c63-476f-85b5-359a89c61f10.png)
Linear one-class SVM scenario: the training set is separated from the origin with the largest margin
线性单类 SVM 方案:训练集与原点分开,具有最大的边距
训练模型以找出使距原点的距离最大的超平面参数。 超平面一侧的所有样本均应为离群值,输出标签为 **+1** ,而其余所有样本均被视为离群值,并且输出标签为 *`-1`* 。 此标准似乎有效,但仅适用于线性可分离的数据集。 标准 SVM 通过将数据集(通过函数`$1`)投影到特征空间 D 上来解决此问题,在该特征空间 D 中,它获得了这样的属性:
......@@ -696,7 +696,7 @@ Linear one-class SVM scenario: the training set is separated from the origin wit
![](img/b17e49a6-e73b-4799-bbb4-75604fb98847.png)
Decision process in SVM
支持向量机中的决策过程
权向量正交于分离超平面。 样本`x`[`i`] 被确定为一个惯常值,因为点积为正且大于阈值*ρ*。 相反, *`x[j]`* 被标记为异常值,因为决策函数的符号为负。 术语*ξ [i] (ξ [i] ≥0)*被称为松弛变量,它们的引入是为了使异常值和 内线 实际上,如果这些变量都等于零(并且为简单起见, *ρ= 1* ),则优化问题的条件变为:
......@@ -732,7 +732,7 @@ Xs = ss.fit_transform(X)
![](img/0f2a66e7-beca-4734-ac68-5aa079d91c2c.png)
Dataset for the one-class SVM example
单类 SVM 示例的数据集
主斑点主要由内部像素组成,一部分测试样本位于同一高密度区域。 因此,我们可以合理地假设在包含所有样本的数据集中有大约 20% 的异常值(因此*ν= 0.2* )。 当然,这种选择是基于我们的假设,在任何实际场景中, *ν*的值必须始终反映数据集中预期异常值的实际百分比 。 当此信息不可用时,最好从较大的值开始(例如 *ν= 0.5* ),然后再减小它直到找到最佳配置为止(即 ,则错误分类的可能性最小)。
......@@ -755,7 +755,7 @@ Ys = ocsvm.fit_predict(Xs)
![](img/5095f406-a826-4c47-bc76-30fd5e3efdf1.png)
Classification result (left). Outliers from the test set (right)
分类结果(左)。 测试集中的异常值(右)
从左图可以看出,该模型已成功识别出数据集的较高密度部分,并且还在密集 Blob 的外部区域中将一些样本标记为离群值。 它们对应于二元高斯条件下具有较低概率的值,在我们的情况下,我们假设它们是应过滤掉的噪声样本。 在右图中,可能只看到离群区域,这当然是高密度斑点的补充。 我们可以得出结论,即使是一类 SVM,即使有点倾向于过度拟合,它也可以帮助我们以极小的错误概率识别新颖性。 这也是由于数据集的结构(但是,在许多情况下很常见),可以使用 RBF 内核轻松地对其进行管理。 不幸的是,对于高维数据,通常会丢失这种简单性,并且必须进行更彻底的超参数搜索才能使错误率最小化。
......@@ -773,13 +773,13 @@ Liu FT,Ting KM 和 Zhou Z 在文章*隔离林,ICDM 2008* 和*第八届 IEEE
![](img/e2cec22b-e13b-4cb0-a353-000c8a4ba3b4.png)
Generic structure of a binary decision tree
二叉决策树的通用结构
在有监督的任务中,选择元组(功能,阈值)是根据使孩子的杂质最小化的特定标准选择的。 这意味着目标通常是拆分节点,以使结果子集包含属于单个类的大多数样本。 当然,很容易理解,当所有叶子都是纯净的或达到最大深度时,该过程结束。 相反,在此特定上下文中,我们从一个非常特殊(但经过经验证明)的假设开始:如果属于**隔离林**的树木每次都选择随机特征和随机阈值进行生长,则平均长度 从根到包含任何异常值的叶子的路径比隔离异常值所需的路径更长。 通过考虑一个二维示例,可以很容易地理解这一假设的原因,如作者所示:
![](img/7b91e898-5147-47c5-b273-a25e89bfe857.png)
Bidimensional random partitioning. On the left, an inlier is isolated. On the right, an outlier belonging to a low-density region is detected
二维随机分区。 在左侧,孤立了一个内部。 在右侧,检测到属于低密度区域的异常值
可以观察到,正常值通常属于高密度区域,需要更多的分区来隔离样本。 相反,由于所需的粒度与斑点的密度成比例,因此可以使用较少的划分步骤来检测低密度区域中的异常值。 因此,建立了一个隔离林,其目的是测量所有内部节点的平均路径长度,并将其与新样本所需的平均路径长度进行比较。 当这样的长度较短时,成为异常值的可能性增加。 作者提出的异常分数基于指数函数:
......@@ -859,7 +859,7 @@ X_tsne = tsne.fit_transform(Xf)
![](img/eb3a4c8f-2ebe-4c56-bf96-92427af3c8c2.png)
t-SNE plot for the novelty detection with the wine dataset
用于葡萄酒数据集的新颖性检测的 t-SNE 图
可以看到,许多接近训练离群点的样本本身就是离群点,并且通常,几乎所有远测样本都是离群点。 但是,由于维数的减少,很难得出更多的结论。 但是,我们知道,当噪声足够小时,找到内点的可能性就很大(这是合理的结果)。 作为练习,我请读者检查一下[单个化学性质](https://scikit-learn.org/stable/datasets/index.html#wine-dataset),以及每个 他们或小组,找出哪个阈值可以将一个离群值转换为离群值(例如,回答此问题:与训练集兼容的最大酒精含量是多少?)。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册