PU learning问题描述

给定一个正例文档集合P和一个无标注文档集U(混合文档集),在无标注文档集中同时含有正例文档和反例文档。通过使用P和U建立一个分类器能够辨别U或测试集中的正例文档 【即想要精确分类U或测试集中的正例文档和反例文档】

应用:

从多个无标注集中学习

从不可靠的反例数据中学习

发现测试集中的突发文档

发现异常值

基于PU-Learning的恶意URL检测

from:https://xz.aliyun.com/t/2190


基于PU-Learning的恶意URL检测

Ya-Lin Zhang, Longfei Li, Jun Zhou, Xiaolong Li, Yujiang Liu, Yuanchao Zhang, Zhi-Hua Zhou
National Key Lab for Novel Software Technology, Nanjing University, China
Ant Financial Services Group, China
来源: CCS’17 https://dl.acm.org/citation.cfm?id=3138825

摘要

本文描述了一种基于PU-Learning(正例和无biao'zhu学习)的潜在恶意URL检测系统。以往的基于机器学习的解决方案是将它定义为有监督学习问题。然而在很多时候,我们所获得的数据总是包含少量已知的攻击URL以及大量的未标记样本,这使得有监督学习不可行。在这项工作中,我们将其定义为PU-Learning问题,并结合两种不同的策略(two-stage strategy and cost-sensitive strategy)。实验结果表明,我们所开发的系统能够有效地发现潜在的恶意URL攻击。该系统既可以作为现有系统的辅助部署,也可以用来帮助网络安全工程师有效地发现潜在的攻击模式,使他们能够快速更新现有的系统。

1 引言

随着互联网的迅速发展,出现了越来越多的恶意URL攻击,严重威胁着网络安全。传统的URL攻击检测系统主要通过使用黑名单或规则列表。而这些名单将变得越来越长,但是以这些方式防范所有的攻击是不现实的。更严重的是,这些方法难以检测潜在的威胁,这使得网络安全工程师很难有效地发现新出现的恶意URL攻击。

为了提高算法的泛化能力,很多研究人员采用基于机器学习的方法来完成这项任务。这些方法主要分为两类:大多数转化为有监督学习问题[6],则需要对数据进行标注,而其他的一些研究人员则试图以无监督的方式解决问题,例如通过异常检测技术[5],就不需要对数据进行标注。当可以得到标注数据时,有监督学习方法通常实现更强的泛化能力。然而在很多时候,我们很难获得精准的标注数据。在更多时候,我们可能只得到一小部分恶意URL和大量未标记的URL样本,缺乏足够可靠的负例样本,这也就意味着我们并不能直接使用上述的机器学习算法。另一方面,如果我们简单地以无监督的方式解决它,那么已知恶意URL的标注信息就难以充分利用,可能无法达到令人满意的性能。

在本文中,我们将上述问题抽象为PU-Learning(正例和未标记学习)问题[3],它可以更充分地利用所检测到的恶意URL以及未标记的URL,并实现了更强的性能。基于此,我们开发了一个基于PU-Learning的潜在恶意URL攻击检测系统。有许多策略可以用来处理PU学习问题,如two-stage strategy[4]、cost-sensitive strategy[2]等。在这项工作中,我们将two-stage strategy、cost-sensitive strategy结合起来构建我们的系统。最后,我们对所开发的系统进行了验证评估,结果表明该方法能有效地发现潜在的恶意URL攻击,大大降低了网络安全工程师的工作量,使其在实际的URL攻击检测中非常有用。

本文的其余部分组织如下。在第2节中,我们描述了所开发的系统。在第3节,我们基于蚂蚁金服的实际业务场景评估了我们所开发的系统。最后,在第4节中,我们总结了这项工作。

2 系统架构

在这一章中,我们介绍了所开发的系统架构。如图1所示,我们的系统主要包括3个模块:

  • (i)特征提取,将原始URL转换成特征向量;
  • (ii)模型训练,利用所提取的URL训练集的特征向量训练PU-Learning模型;
  • (iii)预测,预测输入的URL以及输出可能的恶意URL集。

2.1 特征提取

首先将原始URL转换为特征向量表示,以便于应用到后续的机器学习算法中。下面,我们将简要地解释我们所开发的系统,并介绍我们在系统中使用的特征提取过程的细节。

一般来说,URL可以分成几个部分,包括协议部分、认证部分、路径部分、query部分和fragment部分,如图2所示。攻击者可能修改任意一个部分以发起攻击。在我们的场景中,由于前几个部分受到限制,攻击主要来自fragment部分,所以我们主要关注的是基于恶意修改fragment部分的攻击的执行情况。具体而言,fragment通常是形如“key1 = value1&…&keyn = valuen”的形式,攻击者可以通过任意修改value部分以发起攻击。因此,我们的系统主要处理这个部分,而特征提取过程直接从fragment的Key-Value对中提取特征。

更具体地说,给定一组URL,我们首先将它们分别划分为上述部分,并从每个URL的fragment中提取Key-Value对。其次,由于我们的目标是发现恶意网址的特质,因此我们过滤了Key-Value对,只保留恶意网址出现的前N个Key,并将剩余的Key-Value对合并为一个Key-Value对,从而每个URL将最多提取(N + 1)个Key-Value对。最后,我们试探性地提取8种不同的统计信息从每个过滤值,包括value中出现所有的字符、字母、数字、标点符号的次数和value中出现的不同的字符、字母、数字、标点符号的数目。因此每个URL将被描述为一个(N + 1)∗8维特征向量。

2.2 模型训练

值得注意的是,传统的有监督学习算法并不能直接应用于我们的场景。在这项工作中,我们将其转化为PU-Learning问题。

PU-Learning[3]是半监督学习的一种特殊情况[1,7],它用于解决只提供正例和未标注样本而不提供负例的问题。研究人员已经提出了许多策略来解决这个问题。为了绕过缺乏负标注的问题,two-stage策略首先试图挖掘出一些可靠的负例,然后将问题转化为一个传统的监督和半监督学习问题。另一方面,用于二分类的cost-sensitive策略由于具有不对称的误分类成本,因此非常适合用于解决PU-Learning问题[2]。在我们开发的系统中,这两种策略都被采用并进一步结合形成最终的预测模型。

two-stage strategy:在第一阶段从未标记实例中选择可靠的负例,算法1显示了相关的细节。在第二阶段,利用正例和第一阶段选择的负例,训练传统的监督模型,并进一步用于预测新样本。
在这项工作中,考虑到效率,我们采用Logistic回归来训练分类模型。

cost-sensitive strategy:我们假设在未标注样本只有少量正例。将所有未标注样本设定为负例,最小化以下目标函数:

其中C+和C-分别是正例和负例误分类的惩罚因子;l(yi,f(xi))表示损失函数,例如log损失函数或hinge损失函数;λ是归一化系数,R(w)是归一化范数,例如L1-范数、L2-范数。本文中,我们将损失函数设置为log损失函数,将L2-范数作为归一化范数。因此具体的函数如下:

其中LL(z)=log(1+exp(-z))就是log损失函数,在实际中,C+和C-是基于验证集选取的,并且C+总是大于C-,这表明正例误分类的惩罚因子要大于负例误分类的惩罚因子。这也就使得模型将更关注于对恶意URL的正确分类。

2.3 预测

在预测阶段,一个新输入的URL首先将在特征提取模块被转换为(n + 1)∗8维特征向量,然后所提取的特征向量将送入一个双策略模型,每个模型都将输出一个分数表示恶意URL的概率。得分越高,这个URL就越有可能是恶意的。我们把两个分数平均作为URL的最终得分,选择具有较高分数的URL构造为候选恶意URL集。
在工程实践中,我们会基于候选恶意URL集过滤K个URL,这些过滤的URL将由网络安全工程师进行人工验证。

3 实验验证

3.1 数据集与准备工作

该数据集来自于发送至蚂蚁金服的URL请求的采样。数据主要分为两部分:一大组未标记的URL和少数已经通过现有的系统标注的恶意网址,并出现了不同的攻击类型,包括XXE、XSS和SQL注入等。我们并没有把这些不同类型的恶意网址进行进一步细分。由于总数据集太大,我们从每天的请求中抽取1亿个URL,其中由现有系统检测到的恶意URL的数量从几万到数十万不等。该模型使用连续7天收集的数据进行训练,并用于预测每天新出现的未标记URL的分数。

当提取Key-Value对时,N被设置为99,因此每个URL将由一个800维的特征向量来描述,使用min-max归一化方法来处理不同量纲下的特征。在模型训练部分,我们采用基于logistic回归的方法来训练PU-Learning模型,C+、C−和λ等参数由验证集进行选取。

3.2 实验结果

由于我们并没有未标注URL的具体情况,我们借助网络安全工程师来帮助检查结果并验证我们系统的有效性。
由于检查结果非常耗时,因此我们将候选恶意URL集的大小K设置为至多150,并由网络安全工程师将手动检查所选URL是否是恶意URL。表1展示了实验结果的细节。从表中可以看出,过滤后的候选集的精度可以达到90%,表明该系统能有效地发现潜在的恶意URL,而现有的系统无法捕获这些恶意URL。应该特别提到的是,我们基于候选恶意URL集发现了新的攻击模式,而蚂蚁金服的网络安全工程师已经通过这个发现改进了现有系统。同时,开发的系统还可以与现有系统协同使用,提高整体的网络安全水平。

4 总结

在这项工作中,我们开发了一个基于PU-Learning的潜在恶意URL检测系统。与基于监督学习的方法相比,我们的方法只需要少量恶意URL以及未标注URL,而这正好适合我们遇到的实际情况。

该系统主要包括三个部分:首先,特征提取将原始URL转化为特征向量;然后,利用two-stage strategy、cost-sensitive strategy来训练分类模型;最后,新输入的URL将被首先转化为特征向量,再进行机器学习,输出的分数表明了该URL为恶意网址的概率。

实证结果表明,我们开发的系统能够有效地发现潜在的恶意URL。该系统既可以作为现有系统的辅助部署,也可以用来帮助网络安全工程师有效地发现潜在的攻击模式。

参考文献

[1] Olivier Chapelle, Bernhard Scholkopf, and Alexander Zien. 2009. Semi-Supervised Learning. IEEE Transactions on Neural Networks 20, 3 (2009), 542–542.
[2] Marthinus C du Plessis, Gang Niu, and Masashi Sugiyama. 2014. Analysis of Learning from Positive and Unlabeled Data. In Advances in Neural Information Processing Systems 27. 703–711.
[3] Charles Elkan and Keith Noto. 2008. Learning Classifiers from Only Positive and Unlabeled Data. In Proceedings of the 14th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. 213–220.
[4] Bing Liu, Yang Dai, Xiaoli Li, Wee Sun Lee, and Philip S Yu. 2003. Building Text Classifiers Using Positive and Unlabeled Examples. In Proceeding of the 3rd IEEE International Conference on Data Mining. 179–186.
[5] Fei Tony Liu, Kai Ming Ting, and Zhi-Hua Zhou. 2008. Isolation Forest. In Proceeding ot the 8th IEEE International Conference on Data Mining. 413–422.
[6] Justin Ma, Lawrence K Saul, Stefan Savage, and Geoffrey M Voelker. 2009. Beyond Blacklists: Learning to Detect Malicious Web Sites from Suspicious URLs. In Proceedings of the 15th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. 1245–1254.
[7] Zhi-Hua Zhou and Ming Li. 2010. Semi-Supervised Learning by Disagreement. Knowledge and Information Systems 24, 3 (2010), 415–439.

基于 PU-Learning 的分类方法

from: http://blog.xiaoduoai.com/?p=344

简介

正例和无标记样本学习(Learning from Positive and Unlabled Example)简称PU或LPU学习,是一种半监督的二元分类模型,通过标注过的正样本和大量未标注的样本训练出一个二元分类器。

与普通分类问题不同,PU问题中P的规模通常相当小,扩大正样本集合也比较困难;而U的规模通常很大,比如在网页分类中,未标识的网页资源可以非常廉价、方便的从网络中获取。引入U的目的就是降低人工分类的预备工作量,同时提高精度,尽可能达到自动分类的效果。

本文主要参考「Building Text Classifiers Using Positive and Unlabeled Examples」,对其中的PU学习方法进行简单的介绍。

PU 学习方法

PU学习主要有以下两个步骤:

  1. 根据已标注过的正样本P在未标注样本集U中找出可靠的负样本集合(Reliable Negative Examples,简称RN),将PU问题转化为二分类的问题;
  2. 利用正负样本通过迭代训练得到一个二元分类器。

理论上已经证明:如果最大化未标注样本集U中负样本的个数,同时保证正样本被正确分类,则会得到一个性能不错的分类器。

上述两个步骤中,找出RN以及训练二元分类器都有很多方法可以选择,下面对这些方法进行简单的介绍。

计算 RN

1. 朴素贝叶斯分类器

使用朴素贝叶斯(Naive Bayesian,NB)分类方法计算RN,可以简单参考以下步骤:

  • 把P中的每个样本标记为类别1;
  • 把U中的每个样本标记为类别-1;
  • 使用P和U训练得到贝叶斯分类器;
  • 对U中的每个样本使用上述分类器进行分类,如果分类结果为-1,则把该样本加入RN。

2. Rocchio 技术

Rocchio是一种早期的文档分类技术,其基本思想是:每个样本可以用一组特征向量来表示,特征值可以使用TF-IDF方式计算得到。

设全部样本集合为D,类别为 训练样本集合为 。通过对每个类别构造一个原型向量,可以得到Rocchio分类器:

其中,α和β分别调节与类别相关及不相关类别的权重。

对一个待分类的样本t,使用余弦相似度计算其与每个类别的原型向量的相似距离,取距离最小的类别作为该样本的类别。

使用Rocchio算法与上述NB分类器计算RN的步骤很类似,只要把上述算法中第3步的分类器替换为Rocchio分类器即可。

3. Spy 算法

Spy的基本思想是从P中划分出一个子集S,将S中的样本放到U中,从而得到新的正样本集P-S和未标识样本集U+S。使用P-S作为正样本,U+S作为负样本,利用迭代的EM算法进行分类,当分类结束后,利用对那些“间谍”样本的标识,确定一个参数阈值th,再对U中的文档进行划分得到可靠的反样本集合RN。其中,从P中划分子集S的数量比例一般为15%。算法步骤描述如下:

  1. RN集合置空;
  2. 从P中随机选取子集S,得到新的正样本集PS=P-S和未标识样本集US=U+S,记PS中各个样本类别为1,US各个样本类别为-1;
  3. PS和US作为训练集,用I-EM算法训练得到一个贝叶斯分类器;
  4. 使用子集S确定出一个概率阈值th;
  5. 对US中的每个样本d使用贝叶斯分类器计算其属于正类别的概率P(1|d),如果小于阈值概率th,则把其加入RN集合。

4. 1-DNF 算法

1-DNF算法基本思想是:对于每个特征,如果其在P集合中的出现频次大于N集合,记该特征为正特征(Positive Feature, PF),所有满足该条件的特征组成一个PF集合。对U中的每个样本,如果其完全不包含PF集合中的任意一个特征,则该样本应加入RN。算法步骤描述如下:

PF 置空,RN=U;
设 U∪P 的特征集为:{x1,x2,---,xn};
for i=1 to n:
if (freq(xi,P)/|P| > freq(xi,U)/|U|):PF = PF ∪ {xi}for each d∈U:
Ifョxj,freq(xj,d) > 0 and xj∈PF:RN = RN - {d}

训练分类器

1. SVM

使用SVM直接对P和RN进行训练得到分类器。

2. S-EM

EM算法主要由Expectation和Maximization两个步骤组成。前者对缺失标签的数据打上标签;后者则用全部数据一起计算模型参数。算法步骤描述如下:

  • 对 P 中的每个样本标记为类别 1;
  • 对 RN 中的每个样本标记为类别-1;
  • Q=U-RN 中的样本起初没有任何类别标签,在 EM 算法第一次迭代完成时,这些数据将会具有一个基于概率的类别标签。在后续的迭代中,都使用上一轮更新完类别标签的数据集 Q,直至 EM 算法收敛。

在上述流程中,每次迭代使用Naive Bayesian算法修正Q集合中的数据标签。

3. PEBL 算法

PEBL算法主要思想是使用SVM迭代地从U-RN中抽取出更多的负样本,并把它们放到RN集合中,直至U-RN中没有可以被分为负样本的数据为止。算法步骤如下:

  • 对 P 中的每个样本标记为类别 1;
  • 对 RN 中的每个样本标记为类别-1;
  • 令 i=1,Q=U-RN,开始以下的循环:
    • 使用 P 和 RN 训练一个 SVM 分类器 Si;
    • 使用 Si 对 Q 中的样本进行分类,把其中所以分类为-1 的样本记为 W;
    • 如果 W 为空,则结束循环;否则:Q = Q-W, RN = RN ∪ W, i = i + 1

4. Roc-SVM 算法

PEBL算法中得到的最后一个分类器不一定是最优分类器,为此,对该算法进行一些改进,得到了Roc-SVM算法。算法步骤如下:

  1. 使用 PEBL 算法直至收敛,记最后一个分类器为 S_last;
  2. 使用 S_last 对 P 进行分类;
  3. 如果 P 中超过 8%的样本被分为负样本,则选择 S1 作为最终的分类器;否则,选择 S_last 作为最终分类器。

由于SVM算法对噪声很敏感,如果在迭代过程中,把Q中的一些正样本错分为-1而划分到RN中,那么会导致最终的分类器S_last性能很差,这也是PEBL算法的一个缺陷。为此,需要对S_last的分类性能进行评估,看是否选择其作为最终分类器。选择8%作为判断阈值也是一个保守的做法,以防选择一个性能不好的分类器。

上述的选择S1或S_last的做法其实还是欠妥,因为这两个分类器可能性能都很差。S1性能差是因为初始的RN集合中可能包含很少的负样本,不能体现出负样本的整体分布情况;S_last性能差则是由于PEBL算法在某个迭代过程中把一些正样本错分到RN中。为此,我们可以选择使用Spy或Rocchio算法得到初始的RN,这样可以使S1、更加稳健。有一点要注意的是:多数情况下,最佳分类器可能并不是S1或S_last,而是在迭代过程中产生的某一个分类器,然而,这个最佳分类器却是很难被“catch”的。

有偏的 SVM 算法

由于正样本集合P中难免会有一些噪声,以及正负样本的数据倾斜,可使用一种有偏的SVM算法,使用C+和C-分别控制正负样本的误差(直观上看,对C+取一个较大的值,而C-取一个较小的值):

为了选择合适的C+和C-,通常用验证集来评估在不同取值下的分类器性能。性能指标可采用F值(F=2pr/(p+r),其中,p为准确率,r为召回率)。但又个问题:验证集中没有负样本,如何评估F值呢?

“Learning with positive and unlabeled examples using weighted logistic regression”中给出了一种直接使用不含负样本的验证集来评估分类器性能的方法。判断准则是采用:pr / Pr[Y=1](其中,Pr[Y=1]是正样本的实际概率),其等价于r2 / Pr[f(X)=1] (其中,Pr[f(X)=1]是一个样本被分为正样本的概率)。其中,r可以用验证集中的正样本来计算得到,Pr[f(X)=1]可以由整个验证集计算得到。这个判断指标随p和r的增加而增加,随p或r中任一个减小而减小,所以可以像F值一样来判断分类器的性能。

实验及结论

原文中给出了上述的方法在不同组合下的实验评估,结果表明,采用有偏的SVM方法性能最好(具体的实验及数据比较这里就不写了,可以参考原文)。


参考文献

Bing Liu, Yang Dai, Xiaoli Li, Wee Sun Lee and and Philip Yu. “Building Text Classifiers Using Positive and Unlabeled Examples”.
Proceedings of the Third IEEE International Conference on Data Mining (ICDM-03), Melbourne, Florida, November 19-22, 2003

基于PU-Learning的恶意URL检测——半监督学习的思路来进行正例和无标记样本学习...相关推荐

  1. 基于PU-Learning的恶意URL检测——半监督学习的思路来进行正例和无标记样本学习

    转载自https://www.cnblogs.com/bonelee/p/9848282.html 基于PU-Learning的恶意URL检测--半监督学习的思路来进行正例和无标记样本学习 一.背景介 ...

  2. pu learning的建模实践,半监督学习的好方法!

    这个learning主要是给 你的positive贼少 但是有很多的positive的数据 及时你有很多的确定是negative的数据 你也可以用你预测出来的negative的数据 和你确定是nega ...

  3. 基于PU-Learning的恶意URL检测

    https://xz.aliyun.com/t/2190 Ya-Lin Zhang, Longfei Li, Jun Zhou, Xiaolong Li, Yujiang Liu, Yuanchao ...

  4. 基于DNS数据分析的恶意域名检测

    本文主要参考的是Zhauniarovich Y, et al[1]的工作,发表在Acm Computer Surveys上的一篇较为系统地阐述了基于DNS数据分析来进行恶意域名检测的研究背景,研究过程 ...

  5. 基于异构信息网络的恶意账号检测

    论文学习:Heterogeneous Graph Neural Networks for Malicious Account Detection CIKM 2018 现有的恶意账户识别的方法主要有三种 ...

  6. POSTER: A PU Learning based System for Potential Malicious URL Detection

    POSTER: A PU Learning based System for Potential Malicious URL Detection 基于PU学习的潜在恶意URL检测系统 POSTER: ...

  7. 基于深度学习的安卓恶意应用检测----------android manfest.xml + run time opcode, use 深度置信网络(DBN)...

    基于深度学习的安卓恶意应用检测 from:http://www.xml-data.org/JSJYY/2017-6-1650.htm 苏志达, 祝跃飞, 刘龙     摘要: 针对传统安卓恶意程序检测 ...

  8. [系统安全] 三十三.恶意代码检测(3)基于机器学习的恶意代码检测技术

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  9. 基于机器学习的恶意URL识别--选自《通信技术》

    基于机器学习的恶意URL识别 原文作者:李泽宇,施勇,薛质 原文期刊:信息安全与通信保密杂志社 选自<通信技术>2020年第二期 2020-03-10 原文链接:https://www.s ...

最新文章

  1. for(;;)是什么,for(;;)的作用
  2. Linux对文件内容基本操作(学习笔记七)
  3. android 自定义xml属性
  4. 数聚新动能 数创大未来——2016中国国际大数据大会
  5. 数据仓库被淘汰了?都怪数据湖
  6. 华为云发布 EI 城市智能体
  7. mysql递归查询树,帮你突破瓶颈
  8. 【Proteus仿真8086】并行接口芯片8255
  9. centos mysql5.5 编译安装_centos6.4下编译安装MySQL-5.5.33
  10. 市场大幅逆转速度达史上最快 宏观交易领域也被机器“占领”
  11. 北邮数电 爱课堂答案 Verilog专题
  12. 蓝牙模块的分类和对应的属性特点
  13. 在Octane中提升渲染速度的技巧(第1部分)
  14. VIVO校招C++岗面经(笔试+一面+二面+Offer)
  15. Redis 配置文件重要属性介绍
  16. 靠这篇竟然理解了CAN协议!实战STM32
  17. MySQL创建自定义函数提示:This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its ......
  18. HTTP-Runoob:HTPP Content-Type
  19. 【虚幻引擎UE】UE5 六步实现UE5在网页端查看(云渲染+像素流) 4.26和4.27原理类似
  20. gomonkey permission denied

热门文章

  1. vs项目移植到linux运行,VS2008项目移植到Linux
  2. 为什么升级不了android版本,为啥你的手机无法升级到安卓7.0?原因都在这里!...
  3. 决策树算法详解(1)
  4. 语义分割--Understanding Convolution for Semantic Segmentation
  5. 程序员必备的20个软件
  6. ubuntu安装KVM
  7. mysql修改时间精度_Mysql时间精度丢失问题
  8. mysql a-z排序_mysql实现首字母从A-Z排序
  9. dacom蓝牙耳机怎么重置_双蓝牙耳机另一半怎么连接
  10. centos 打包某个目录_Linux目录基础,带你了解Linux神秘面纱