机器学习之一:聚类实战

导读

可预见的未来数据分析和机器学习将成为工作中必备技能,也许已经在某个项目中讨论怎么调参优化,就像过去讨论如何优雅的写python、如何避免C++内存泄露一样常见。

一、简单介绍聚类算法

1、聚类的定义

聚类就是对大量未知标注的数据集,按数据的内在相似性将数据集划分为多个类别,使类别内的数据相似度较大而类别间的数据相似度较小。

2、聚类的基本思想

给定一个有N个对象的数据集,构造数据的k个簇,k≤n。满足下列条件:

  • 每一个簇至少包含一个对象;
  • 每一个对象属于且仅属于一个簇;
  • 将满足上述条件的k个簇称作一个合理划分。

对于给定的类别数目k,首先给出初始划分,通过迭代改变样本和簇的隶属关系,使得每一次改进之后的划分方案都较前一次好。

3、相似度/距离计算方法总结

4、K-means算法

K-means算法也被称为k均值,k值的选择、距离度量及分类决策是三个基本要素。

假定输入样本为S=x1,x2,...,xm,则算法步骤为:

  • 选择初始的k个类别中心μ1μ2…μk;
  • 对于每个样本xi,将其标记为距离类别中心最近的类别;
  • 将每个类别中心更新为隶属该类别的所有样本的均值;
  • 重复最后两步,直到类别中心的变化小于某阈值。

中止条件:

  • 迭代次数/簇中心变化率/最小平方误差MSE(MinimumSquared Error)

5、一个简单的例子

二、项目实战

某专项测试实际业务中,海量样本为同一病毒类型,如何落地为本地能力将是挑战,所有样本都处理工作量大且重复性高,只处理高热样本会落入长尾困境,如果能将N个样本通过特征聚类为K类,报毒覆盖K类则理论会达到覆盖整体的能力,无论效率和产品能力、自动化上都将有收益。

具体的思路如下:

  • 数据清洗:提取相同病毒名的文件
  • 特征提取:提取多维度文件静态特征
  • 聚类:K-means,目标聚类覆盖该类型病毒特征
  • 特征验证:k个特征对k个子编写特征验证通杀性
  • 工具包:NumPy、SkiPy、 Pandas、Skikit-Learn

1、数据清洗

PE文件结构和样本特征的关系:常用的恶意文件一般都是基于格式分析,从PE文件格式分析来提取文件特征符合业务特征

这里使用本人在filefuzz项目里封装的pe解析模块来处理,拉取某报毒类型样本5722个, 去除坏PE后解析出下列参数做为维度参数

NumberOfSections,SizeOfCode,BaseOfData,ImageBase,SizeOfImage,SizeOfHeaders ,IMAGE_DATA_DIRECTORY[16],IMAGE_DIRECTORY_ENTRY_IMPORT

2、特征提取

去重后导入函数为688,参数维度共711个。

处理前特征:

处理后特征:

3、聚类:K-means

使用pandas加载数据后填充缺失数据,通过特征分布可视化预处理参数观察数据分布。

数据加载

特征归一化

分割训练集和测试集:不同目标参数训练结果如下:

y=voice_data['NumberOfSections'].values+voice_data['SizeOfCode'].values

y=voice_data['NumberOfSections'].values+voice_data['SizeOfImage'].values

y = voice_data['NumberOfSections'].values, 此时目标参数区分度有效性最高,准确率也达到99%。

sklearn函数介绍

train_test_split将给定数据集X和类别标签Y,按一定比例随机切分为训练集和测试集。

X_train,X_test,y_train,y_test =train_test_split(train_data,train_target,test_size=0.4, random_state=0)

train_data:  所要划分的样本特征集

train_target:所要划分的样本结果

test_size:样本占比  

random_state:是随机数的种子。

http://scikit-learn.org/0.16/modules/generated/sklearn.cross_validation.train_test_split.html

cross_val_score交叉验证函数

scores = cross_val_score(clf, raw_data,raw_target, cv=5, score_func=None)

clf:表示不同分类器,例支持向量clf=svm.SVC(kernel=’linear’, C=1)

raw_data:原始数据

raw_target:原始类别标号

cv:不同的cross validation的方法

cross_val_score:不同划分raw_data在test_data得到分类的准确率。

http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.cross_val_score.html

代码简要:

4、特征验证

k个特征对k个子类编写特征验证通杀性,样本处理数量从4726下降到K类集合。

总结

通过对大量同质数据的聚类,对测试集合的覆盖度和效率都有显著收益,对长尾问题解决也提供了可行的思路方法。

参考:

http://scikit-learn.org/stable/

<<统计学习方法>>

<<计算机病毒防范艺术>>

<<机器学习>>

关注腾讯移动品质中心TMQ,获取更多测试干货!

版权所属,禁止转载!

原文发布于微信公众号 - 腾讯移动品质中心TMQ(gh_2052d3e8c27d)

原文发表时间:2018-07-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI科技大本营的专栏

900万张标注图像,谷歌发布Open Images最新V3版

翻译 | Shawn 过去几年机器学习的发展使得计算机视觉有了快速的进步,系统能够自动描述图片,对共享的图片创造自然语言回应。其中大部分的进展都可归因于 Ima...

4067
来自专栏小鹏的专栏

tensorflow_cookbook--preface

Preface         TensorFlow在2015年11月由Google开放,从此,它已经成为GitHub上最受欢迎的机器学习库。 TensorFl...

18510
来自专栏AI科技大本营的专栏

如何通过机器学习还原图像色彩

作者 | Klevis Ramo 译者 | Teixeira10 在本文中,作者提出了使用k-means算法来对图像进行色彩还原,介绍算法的步骤,同时应用在图...

35112
来自专栏ATYUN订阅号

适合开发者的深度学习:第一天就能使用的编码神经网络工具

当前的深度学习浪潮在五年前就开始了。深度学习是驱动汽车的技术,也可以在Atari游戏中击败人类,甚至能够诊断癌症。 深度学习是机器学习的一个分支。它被证明是一种...

3676
来自专栏超然的博客

Name Disambiguation in AMiner-Clustering, Maintenance, and Human in the Loop

Name Disambiguation in AMiner: Clustering, Maintenance, and Human in the Loop

1312
来自专栏计算机视觉战队

深度学习——感受野

最近在组会讲解框架时,在感受野这个小知识点,大家开始产生歧义,今天我就简单的给大家讲解下这个小知识点,也给初学者带来一个对Receptive Field崭新的认...

4517
来自专栏数据处理

矩阵奇异分解(SVD)应用

1003
来自专栏人工智能

使用TensorFlow自动识别验证码(三)

先知安全技术社区独家发表本文,如需要转载,请先联系先知案件技术社区授权;未经授权请勿转载。 0X000 前言 这是该 系列的第三篇文章, 本系列最后一篇。前面几...

2637
来自专栏PPV课数据科学社区

学习SVM,这篇文章就够了!

支持向量机(SVM),一个神秘而众知的名字,在其出来就受到了莫大的追捧,号称最优秀的分类算法之一,以其简单的理论构造了复杂的算法,又以其简单的用法实现了复杂的问...

5004
来自专栏AI启蒙研究院

【通俗理解】协方差

992

扫码关注云+社区

领取腾讯云代金券