阿里云安全恶意程序检测(速通三)

2023-11-08 02:45

本文主要是介绍阿里云安全恶意程序检测(速通三),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

阿里云安全恶意程序检测

  • 特征工程进阶与方案优化
    • pivot特征构建
      • pivot特征
      • pivot特征构建时间
      • pivot特征构建细节特点
    • 业务理解和结果分析
      • 结合模型理解业务
      • 多分类问题预测结果分析
    • 特征工程进阶
      • 基于LightGBM模型验证
      • 模型结果分析
      • 模型测试
  • 优化技巧与解决方案升级
    • 内存管理控制
    • 加速数据处理技巧
    • 其他开源工具包
    • 深度学习解决方案:TextCNN建模
  • 开源方案学习

特征工程进阶与方案优化

pivot特征构建

pivot特征

pivot特征,简言之就是采用pandas pivot操作获得的特征。

pivot特征的本质是分层统计特征,同时也是一种组合特征。很多时候因为样本在每层的表现都不一一样,所以需要我们先对特征进行分层,然后在新层对特征进行构建,此时的特征相较于直接用所有层构建得到的特征更加细化,也更具有代表性。

pivot特征构建步骤如下:
(1) tmp= df.groupby (A) [B]agg (opt) .to_ frame © .reset_ index()。
(2) mp_ pivot = pd.pivot _table ( data-tmp,index = A,columns=B,values=C)。

pivot特征构建时间

当样本在同一层不同面的表现有较大区别时,则需要进行pivot特征的构建。比如,我们有用户在不同商店的购物信息,其中商店就是层,而每个不同的商店就是一个面,即层包含多个面。

再如,我们要判断某个用户是不是重要用户,往往会统计用户过去的购物频率。虽然这是一个很不错的方法,但是它反映的信息却很粗,因为小朋友每天去买零食和商业成功人士每天去购买名牌的次数可能一样。但如果此时我们将其按面展开,就可以得到每个用户每天去不同店的购物次数,此时就可以很明显地将二者区分开,信息表示得也更加细致。

pivot特征构建细节特点

pivot特征构建的细节: pivot 层一般是 categorical类别的特征。

pivot特征的优点:表示得更加细致,往往可以获得更好的效果,有时还可以大大提升模型的性能。缺点:会大大增加特征的冗余度,特征展开后经常会带来特征稀疏的问题。此时冗余的特征不仅会加大存储压力,而且也会大大增加模型训练的资源,同时冗余的特征有时也会降低模型的准确性。

业务理解和结果分析

结合模型理解业务

结合模型特征的重要性理解业务:LightGBM等一类基于树的集成模型和我们理解业务的过程类似,都是层层递进的形式。LightGBMtopN重要性的特征往往也是问题的关键所在,可以思考为什么这些特征重要,对业务会产生什么样的影响等。

多分类问题预测结果分析

在多分类问题中,我们常常会通过观察预测结果的Confusion Matrix 混淆矩阵,来了解哪一类分得不好、 哪两个类经常混淆、能否通过其他的方式来改进等。常见的有混淆矩阵、归一化混淆矩阵等形式,如图4-5-1所示。
在这里插入图片描述

特征工程进阶

每个API调用线程tid的次数

def api_pivot_count_features(df):tmp = df.groupby(['file_id','api'])['tid'].count().to_frame('api_tid_count').reset_index()tmp_pivot = pd.pivot_table(data=tmp,index = 'file_id',columns = 'api',values = 'api_tid_count',fill_value = 0)tmp_pivot.columns = [tmp_pivot.columns.names[0] + '_pivot_' + str(col)for col in tmp_pivot.columns]tmp_pivot.reset_index(inplace = True)tmp_pivot = memory_process._memory_process(tmp_pivot)return tmp_pivot

每个API调用不同线程tid的次数

def api_pivot_nunique_features(df):tmp = df.groupby(['file_id','api'])['tid'].nunique().to_frame('api_tid_nunique').reset_index()tmp_pivot = pd.pivot_table(data=tmp,index = 'file_id',columns = 'api',values = 'api_tid_nunique',fill_value = 0)tmp_pivot.columns = [tmp_pivot.columns.names[0] + '_pivot_' + str(col)for col in tmp_pivot.columns]tmp_pivot.reset_index(inplace = True)tmp_pivot = memory_process._memory_process(tmp_pivot)return tmp_pivot

特征获取

%%time
simple_train_fea3 = api_pivot_count_features(train)
simple_test_fea3 = api_pivot_count_features(test)
simple_train_fea4 = api_pivot_nunique_features(train)
simple_test_fea4 = api_pivot_nunique_features(test)

基于LightGBM模型验证

#获取标签
train_label = train[['file_id','label']].drop_duplicates(subset=['file_id','label'],keep='first')
test_submit = test[['file_id']].drop_duplicates(subset=['file_id'],keep='first')
#训练集和测试集的构建,此处将之前提取的特征与新生成的特征进行合并
train_data = train_label.merge(simple_train_fea1,on = 'file_id',how = 'left')
train_data = train_data.merge(simple_train_fea2,on = 'file_id',how = 'left')
train_data = train_data.merge(simple_train_fea3,on = 'file_id',how = 'left')
train_data = train_data.merge(simple_train_fea4,on = 'file_id',how = 'left')test_submit = test_submit.merge(simple_test_fea1,on = 'file_id',how = 'left')
test_submit = test_submit.merge(simple_test_fea2,on = 'file_id',how = 'left')
test_submit = test_submit.merge(simple_test_fea3,on = 'file_id',how = 'left')
test_submit = test_submit.merge(simple_test_fea4,on = 'file_id',how = 'left')
#关于LGB的自定义评估指标的书写
def lgb_logloss(preds,data):labels_ = data.get_label()classes_ = np.unique(labels_)preds_prob = []for i in range(len(classes_)):preds_prob.append(preds[i * len(labels_):(i+1)*len(labels_)])preds_prob_ = np.vstack(preds_prob)loss = []for i in range(preds_prob_.shape[1]):  #样本个数sum_ = 0for j in range(preds_prob_.shape[0]):  #类别个数pred = preds_prob_[j,i]  #第i个样本预测为第j类的概率if j == labels_[i]:sum_ += np.log(pred)else:sum_ += np.log(1 - pred)loss.append(sum_)return 'loss is: ',-1 * (np.sum(loss) / preds_prob_.shape[1]),False
#模型采用5折交叉验证方式
train_features = [col for col in train_data.columns if col not in ['label','file_id']
]
train_label = 'label'
%%time
from sklearn.model_selection import StratifiedKFold,KFold
params = {'task':'train','num_leaves':255,'objective':'multiclass','num_class':8,'min_data_in_leaf':50,'learning_rate':0.05,'feature_fraction':0.85,'bagging_fraction':0.85,'bagging_freq':5,'max_bin':128,'random_state':100
}folds = KFold(n_splits=5,shuffle=True,random_state = 15)  #n_splits = 5定义5折
oof = np.zeros(len(train))predict_res = 0
models = []
for fold_, (trn_idx,val_idx) in enumerate(folds.split(train_data)):print("fold n°{}".format(fold_))trn_data = lgb.Dataset(train_data.iloc[trn_idx][train_features],label = train_data.iloc[trn_idx][train_label].values)val_data = lgb.Dataset(train_data.iloc[val_idx][train_features],label = train_data.iloc[val_idx][train_label].values)clf = lgb.train(params,trn_data,num_boost_round = 2000,valid_sets = [trn_data,val_data],verbose_eval = 50,early_stopping_rounds = 100,feval = lgb_logloss)models.append(clf)

模型结果分析

特征相关性分析:计算特征之间的相关性系数,并用热力图可视化显示。

这里采样10000个样本,观察其中20个特征的线性相关性。

plt.figure(figsize = [10,8])
sns.heatmap(train_data.iloc[:10000,1:21].corr())

在这里插入图片描述
通过查看特征变量与label的相关性,我们也可以再次验证之前数据探索EDA部分的结论,每个文件调用API的次数与病毒类型是强相关的。

#特征重要性分析
feature_importance = pd.DataFrame()
feature_importance['fea_name'] = train_features
feature_importance['fea_imp'] = clf.feature_importance()
feature_importance = feature_importance.sort_values('fea_imp',ascending = False)
feature_importance.sort_values('fea_imp', ascending = False)
#plt.figure(figsize = [20,10,])
#sns.barplot(x = feature_importance['fea_name'],y = feature_importance['fea_imp'])
plt.figure(figsize = [20,10,])
sns.barplot(x = feature_importance.iloc[:10]['fea_name'],y = feature_importance.iloc[:10]['fea_imp'])

在这里插入图片描述

plt.figure(figsize = [20,10,])
sns.barplot(x = feature_importance['fea_name'],y = feature_importance['fea_imp'])

在这里插入图片描述
对特征的重要性分析也再一次验证了我们的想法:

API的调用次数及API的调用类别数是最重要的两个特征,也就是说不同的病毒常常会调用不同的API,而且因为有些病毒需要复制自身的原因,调用API 的次数会非常多;第三到第五强的都是线程统计特征,这也较为容易理解,因为木马等病毒经常需要通过线程监听一些内容,所以在线程数量的使用上也会表现的略不相同。

树模型绘制。我们把LightGBM的树模型依次输出,并结合绘制的树模型进行业务的理解。

#树模型绘制。把LightGBM的树模型依次输出,并结合绘制的树模型进行业务的理解
ax = lgb.plot_tree(clf,tree_index =1,figsize = (20,8),show_info = ['split_gain'])
plt.show()

模型测试

优化技巧与解决方案升级

内存管理控制

利用数据类型控制内存。首先判断特征列取值的最小表示范围,然后进行类型转换,如float64转换为float16 等。

加速数据处理技巧

1.加速Pandas的merge
当数据量较大时,Pandas的merge操作相比基于object的merge操作耗时,在比赛中index经常会编码成一个非常复杂的字符串序列,此时我们可以直接将index编码为简单的数字,然后存储映射的字典,再对数字进行merge,最后通过字典映射回来。

2.加速Pandas分位数的特征提取
在比赛中经常会遇到提取各种分位数的问题,这时有些选手经常会枚举分位数特征,但如果每次都自定义一个分位数提取函数会极其耗时。这时就可以考虑将所有分位数的提取用一个函数实现,返回一个分位数的list,这样就无须再进行多次分位数的提取了。

3.用Numpy替换Pandas
由于Numpy的操作比Pandas操作得快,因此当Pandas全部是数值等特征时,可以考虑,将其转换为Numpy再进行特征提取。

其他开源工具包

  1. Github的Dask
  2. Github的Numba

深度学习解决方案:TextCNN建模

开源方案学习

这篇关于阿里云安全恶意程序检测(速通三)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/367464

相关文章

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

JAVA保证HashMap线程安全的几种方式

《JAVA保证HashMap线程安全的几种方式》HashMap是线程不安全的,这意味着如果多个线程并发地访问和修改同一个HashMap实例,可能会导致数据不一致和其他线程安全问题,本文主要介绍了JAV... 目录1. 使用 Collections.synchronizedMap2. 使用 Concurren

springboot整合阿里云百炼DeepSeek实现sse流式打印的操作方法

《springboot整合阿里云百炼DeepSeek实现sse流式打印的操作方法》:本文主要介绍springboot整合阿里云百炼DeepSeek实现sse流式打印,本文给大家介绍的非常详细,对大... 目录1.开通阿里云百炼,获取到key2.新建SpringBoot项目3.工具类4.启动类5.测试类6.测

Python从零打造高安全密码管理器

《Python从零打造高安全密码管理器》在数字化时代,每人平均需要管理近百个账号密码,本文将带大家深入剖析一个基于Python的高安全性密码管理器实现方案,感兴趣的小伙伴可以参考一下... 目录一、前言:为什么我们需要专属密码管理器二、系统架构设计2.1 安全加密体系2.2 密码强度策略三、核心功能实现详解

最新Spring Security实战教程之Spring Security安全框架指南

《最新SpringSecurity实战教程之SpringSecurity安全框架指南》SpringSecurity是Spring生态系统中的核心组件,提供认证、授权和防护机制,以保护应用免受各种安... 目录前言什么是Spring Security?同类框架对比Spring Security典型应用场景传统

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

浅析Rust多线程中如何安全的使用变量

《浅析Rust多线程中如何安全的使用变量》这篇文章主要为大家详细介绍了Rust如何在线程的闭包中安全的使用变量,包括共享变量和修改变量,文中的示例代码讲解详细,有需要的小伙伴可以参考下... 目录1. 向线程传递变量2. 多线程共享变量引用3. 多线程中修改变量4. 总结在Rust语言中,一个既引人入胜又可

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推