【新人赛】阿里云恶意程序检测 -- 实践记录 11.24 - word2vec模型 + xgboost

C++线性方程求解 程序SolveLinearEquations解决联立方程。该方案需要一个文本文件,其中包含输入和输出方程解决。这个项目是几年前我写在C#中http://www.codeproject.com/Articles/673076/Linear-Equation-Solver线性方程组求解。以外,这个程序没有图形用户界面和一个稍微修改公式格式,这个计划是非常类似于C#程序,该程序使用SparseArray模板类来实现向量和矩阵。矩阵使用DoubleIndex的类,这需要两个整数指数,实行单一的键使用SparseAr 阅读详情

使用word2vec训练词向量

使用word2vec无监督学习训练词向量,输入的是训练数据和测试数据,输出的是每个词的词向量,总共三百个词左右。

求和:然后再将每行数据中的每个词的词向量加和,得到每行的词向量表示。

其他还可以通过求平均,求众数或者最大值等等方法得到每行的词向量表示。

代码如下:

import time
import csv
import pickle
import numpy as np
import xgboost as xgb
from sklearn.model_selection import StratifiedKFold
from sklearn.feature_extraction.text import CountVectorizer
from gensim.models.word2vec import Word2Vec
import warnings

warnings.filterwarnings('ignore')  # 忽略警告
with open("security_train.csv.pkl", "rb") as f:
    labels = pickle.load(f)
    files = pickle.load(f)

with open("security_test.csv.pkl", "rb") as f:
    file_names = pickle.load(f)
    outfiles = pickle.load(f)

训练词向量模型的方法:

def train_w2v_model(files, size, model, flag):
  for batch in range(int(len(files)/size) + 1):
    sentences = []
    print("batch:", batch)
    if batch != int(len(files)/size):
      for i in range(batch*size, size*(batch+1)):
        sentence = files[i].split(' ')
        sentences.append(sentence)
    else:
      for i in range(size*(batch+1), len(files)):
        sentence = files[i].split(' ')
        sentences.append(sentence)

    sentences = np.array(sentences)

    if batch == 0 and flag == True:
      model.build_vocab(sentences)
    else:
      model.build_vocab(sentences, update=True)

    model.train(sentences, total_examples = model.corpus_count, epochs = model.epochs)

  print("done.")
  return model
# 训练词向量
model = Word2Vec()
model = train_w2v_model(files, 1000, model, True)
model = train_w2v_model(outfiles, 1000, model, False)
model.save('./temp/w2cmodel_train_test')
# model = Word2Vec.load('./temp/w2cmodel0')
print(model)

对每行数据求词向量之和的方法:

def train_sum_vec(files, model, size=100):
  rtvec = []
  for i in range(len(files)):
    if i % 100 == 0: 
      print(i)
    text = files[i].split(' ')
    # 对每个句子的词向量进行求和计算
    vec = np.zeros(size).reshape((1, size))
    for word in text:
      try:
        vec += model[word].reshape((1, size))
      except KeyError:
        continue
    rtvec.append(vec)
  
  train_vec = np.concatenate(rtvec)
  return train_vec

得到训练数据的词向量:

# 将词向量保存为 Ndarray
train_vec = train_sum_vec(files, model)
# 保存 Word2Vec 模型及词向量
model.save('w2v_model.pkl')
np.save('X_train_test_vec.npy', train_vec)
print('done.')

得到测试数据的词向量:

test_vec = train_sum_vec(outfiles, model)
np.save('y_test_vec.npy', test_vec)
print('done.')

xgboost训练:

meta_train = np.zeros(shape=(len(files), 8))
meta_test = np.zeros(shape=(len(outfiles), 8))

k = 10
skf = StratifiedKFold(n_splits=k, random_state=42, shuffle=True)
X_vector = np.load('X_train_test_vec.npy')
y_vector = np.load('y_test_vec.npy')
for i, (tr_ind, te_ind) in enumerate(skf.split(X_vector, labels)):
    X_train, X_train_label = X_vector[tr_ind], labels[tr_ind]
    X_val, X_val_label = X_vector[te_ind], labels[te_ind]

    print('FOLD: {}'.format(str(i)))
    print(len(tr_ind), len(te_ind))
    
    dtrain = xgb.DMatrix(X_train, label=X_train_label)
    dtest = xgb.DMatrix(X_val, X_val_label)
    dout = xgb.DMatrix(y_vector)
    
    param = {'max_depth': 6, 'eta': 0.1, 'eval_metric': 'mlogloss', 'silent': 1, 'objective': 'multi:softprob',
             'num_class': 8, 'subsample': 0.8, 'colsample_bytree': 0.85}

    evallist = [(dtrain, 'train'), (dtest, 'val')]  # 测试 , (dtrain, 'train')
    num_round = 300  # 循环次数
    bst = xgb.train(param, dtrain, num_round, evallist, early_stopping_rounds=50)

    # dtr = xgb.DMatrix(train_features)
    pred_val = bst.predict(dtest)
    pred_test = bst.predict(dout)
    meta_train[te_ind] = pred_val
    meta_test += pred_test
    
meta_test /= 10.0
with open("word2vec_result_{}.pkl".format(
        str(time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime()))),
        'wb') as f:
    pickle.dump(meta_train, f)
    pickle.dump(meta_test, f)
result = meta_test
out = []

for i in range(len(file_names)):
    tmp = []
    a = result[i].tolist()
    tmp.append(file_names[i])
    tmp.extend(a)
    out.append(tmp)
    
with open("word2vec_10k_{}.csv".format(
        str(time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime()))),
        "w",
        newline='') as csvfile:
    writer = csv.writer(csvfile)

    # 先写入columns_name
    writer.writerow(["file_id", "prob0", "prob1", "prob2", "prob3", "prob4", "prob5", "prob6", "prob7"])
    # 写入多行用writerows
    writer.writerows(out)

提交到线上得到的结果为,0.725923

使用词向量的平均值,提交到线上结果为,0.751533

数据增强后,结果为,0.711533

c++ 解方程组_秩与方程组 如果前面的公众号文章都认真阅读了,希望这时你看到行列式想到体积,看到矩阵的秩脑海中马上能想到看待矩阵秩的角度,看见两个矩阵相乘马上想到AB=C,结果是A中各列的线性组合,B中各行的线性组合。今天要讲的是两个结论,通过对这两个结论的理解和认识可以将很多东西串起来,既算是一个深化认识,也算是一个总结。对于方程组Ax=b1、如果A是行满秩的矩阵,那么方程组要么有唯一解,要么有无穷多解。如果A... 阅读详情

相关推荐

有一个2*3的整数矩阵和一个3*2的整数矩阵,请使用指针数组实现这两个矩阵相乘。中国海洋大学2019年930编程题第2题

题目 本题是中国海洋大学2019年930编程题第2题。 题目: 有一个23的整数矩阵和一个32的整数矩阵,请使用指针数组实现这两个矩阵相乘。 以下是本篇文章正文内容,欢迎朋友们进行指正,一起探讨,共同进步。——来自考研路上的lwj 一、解题思路 思路: 1.首先应按题目要求定义2个二维数组用于存放矩阵,然后使用双重循环输入遍历。 2.本题的难点在于矩阵的运算,大家需要了解矩阵是如何相乘的,这里给出推算和公式: c[i][j] += a[i][k] * b[k][j] ; 3,有了公式后,代入求出相乘后的

立志冲海大 4918

在求向量组的极大线性无关组时,为什么要将向量竖着放,然后对所构成的矩阵进行初等行变换?转

https://www.zhihu.com/question/67918047

studyvcmfc的专栏 6447

centos7下安装gcc-10.3.0

生成多个系统版本的代码,如果你的操作系统是32位,默认就已经设置为 disable,这时gcc仅能生成32位的可执行程序;这里只开启了c,c++ 和fortran,因为支持的语言越多,就需要安装越多的相应静态与动态库,还有五花八门的依赖库,这会让管理变得困难,体积也会变得庞大。启用posix标准的线程支持,这个设置取决于宿主或目标操作系统的类型,其它可用值有:aix,dec,solaris,win32等,如果你是其它的类UNIX系统,就需要设置相应的值。指定安装路径,这里没有指定,就直接放到文件夹里就好。

lxystar2003的博客 1189

【新人赛】阿里云恶意程序检测 -- 实践记录10.20 - 数据预处理 / 训练数据分析 / TF-IDF模型调参...

Colab连接与数据预处理 Colab连接方法见上一篇博客 数据预处理: import pandas as pd import pickle import numpy as np # 训练数据和测试数据路径 train_path = './security_train.csv' test_path = './security_test.csv' # 将csv格式的训练数据处理为txt...

YanqiangWang的专栏 613

ASPP - 空洞空间金字塔池化

文章目录1 空洞卷积1.1 空洞卷积的理解1.1.1 一维1.1.2 二维1.2 空洞卷积的优劣2. ASPP3. 代码 1 空洞卷积 1.1 空洞卷积的理解 1.1.1 一维 (a) 正常卷积:输入特征 Input feature,kernel = 3,stride = 1,pad = 1,输出特征 Output feature。 (b) 空洞卷积:与图 (a) 不同之处在于 pad = 2,同时引入一个 rate = 2(表示卷积核中参数间间隔的超参)。   还可通过下图进一步理解普通卷积与空洞卷

晓野豬 2万+

运算放大器 VS 仪表放大器

运算放大器(Operational Amplifier, 简称 Op Amp)和仪表放大器(Instrumentation Amplifier, 简称INA)在电子电路设计中都有非常广泛的应用,但两者在结构、特性以及应用场景上都有明显的区别。以下是它们之间主要的差异:运算放大器(Op Amp)仪表放大器(INA)运算放大器仪表放大器运算放大器仪表放大器运算放大器仪表放大器运算放大器仪表放大器总之,运算放大器是通用型放大元件,需要设计者自己做额外的电路配置;而仪表放大器则是针对高精度测量差分信号而生,内部匹配

chinahongjiang的博客 1346

【阿里云新人赛】恶意程序检测-项目实践总结

1. 比赛信息 比赛地址:阿里云恶意程序检测新人赛 比赛介绍:使用自然语言处理的方法对恶意程序的行为(API调用序列)进行分析,实现对恶意程序鉴别及分类。 2. 我的主要工作 1)数据预处理:格式转换csv->txt->pkl,根据fileid分组数据,排序后生成api序列,用于训练; 2)数据分析及可视化:主要是数据分布分析,包括恶意程序类别分布分析、调用api的类别及频率...

YanqiangWang的专栏 1940

5分钟搞定:用Pyannote和Whisper实现带说话人分离的语音转文字(附完整代码)

本文详细介绍了如何快速构建一个集成了说话人分离功能的语音转文字系统。通过结合OpenAI的Whisper模型进行高精度语音识别和Pyannote模型实现说话人分离,并提供了完整的代码实现、环境搭建指南以及核心的对齐与合并逻辑,帮助开发者高效处理会议录音、访谈等多说话人音频,实现自动化转录。

threejs5artist的博客 635

3D图形:矩阵的行列式,矩阵的逆、正交矩阵、齐次矩阵

前言 在前面我们说到关于矩阵的一些计算知识,相信大家已经觉得进入了水深火热之中了,那么为了让大家感到更加刺激的视觉体验和感官体验,这一篇博客,我将对矩阵的行列式,矩阵的逆,正交矩阵,齐次矩阵进行探讨研究整理.我很庆幸你们看到这里了,为什么这么说呢?其实呢,因为齐次矩阵是我们平常开发用的比较多的,我曾经在Core Graphics框架 :仿射变换与齐次坐标简单的提到过(小白视角),这篇我将对齐次矩阵进行进一步的说明. 那么接下来,好戏登场了. 矩阵的行列式 在任意的一个方阵都存在这样的一个标量,称作..

得不到的永远是骚栋. 7801

搭建AutoSAR开发环境

任何开发都需要一套开发环境,包括软硬件环境,笔者后续将介绍的是 NXP 的 S32K144 配套的开发板。接下来详细介绍怎么获取这些软硬件工具。仅供个人学习使用!

cfl927096306的博客 6106

DeepSeek R1-32B医疗大模型的完整微调实战分析(全码版)

【代码】DeepSeek R1-32B医疗大模型的完整微调实战指南(全码版)

AllenLV的博客 5101

向量的加减乘除

4.位置-向量=位置(相当于加负向量)口诀:向量相减,头连头,尾指尾。口诀:位置+向量=平移位置。口诀:位置减向量=平移位置。口诀:向量相加,首尾相连。5.向量a(x,y,z)1.向量+向量=向量。2.位置+向量=位置。3.向量-向量=向量。

qq_57470751的博客 7239

CDDT CST CDDT CSTTT

This is the second part of the SA8653 automotive CDDT configuration guide. It describes the matching rules and modification methods between CDDT and device‑tree DDTS. It explains CDT’s underlying logic and configuration in TZ, QNX and Android. It details C

qq_39257814的博客 1410

【新人赛】阿里云恶意程序检测每周总结——添加数据&拼接词向量

文章目录添加数据拼接词向量 添加数据 通过添加第 1、2、3、4、5 类数据,使用 ngram 词向量和 xgboost 分类器,效果大幅提高 # 类别 1 数据 with open("new_data/label_1.pkl", "rb") as f: labels_1 = pickle.load(f) train_apis_1 = pickle.load(f) # list...

solejay 964

手把手教你玩转服务器芯片架构--​​7.1 项目1:基于FPGA的RISC-V软核设计(Verilog实现核心指令执行单元)​

本文介绍了基于FPGA的RISC-V软核设计实践项目。项目采用Verilog实现RV32I指令集核心处理器,包含指令解码、ALU、寄存器堆等关键模块设计,并通过功能仿真验证。在Xilinx Artix-7 FPGA上完成综合与部署,资源利用率控制在5%以内。最后探讨了五级流水线优化、指令集扩展等进阶方案。该实践完整覆盖了从指令集设计、RTL实现到FPGA部署的全流程,可作为学习处理器架构与FPGA开发的典型案例。

MHD0815的博客 173

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【新人赛】阿里云恶意程序检测 -- 实践记录10.27 - TF-IDF模型调参 / 数据可视化...

TF-IDF模型调参 1. 调TfidfVectorizer的参数 ngram_range, min_df, max_df: 上一篇博客调了ngram_range这个参数,得出了ngram_range=(1, 4)时效果最好这个结论,并在线上验证了下。 本篇博客继续调其他的参数。考虑到训练的速度,先将ngram_range设置为(1, 1),调min_df: min_df trai...

YanqiangWang的专栏 712

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

向量加减法首尾规律_向量加减口诀首尾相接

向量的加法口诀:首尾相连,首连尾,方向指向末向量。向量的减法口诀:首首相连,尾连尾,方向指向被减向量。三角形定则解决向量加减的方法将各个向量依次首尾顺次相接,结果为第一个向量的起点指向最后一个向量的终点。注:两个向量相减,则表示两个向量起点的字母必须相同;差向量的终点指向被减向量的终点。平行四边形定则解决向量加法的方法将两个向量平移至公共起点,以向量的两条边作平行四边形,结果为公共起点的对角线。平...

weixin_36054458的博客 8338

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【线性代数(1)】二阶三阶不等式

行列式1. 数学与线性代数中的部分区别2.方程组3. 二阶行列式4. 三阶行列式5. 排列6. 定理 1. 数学与线性代数中的部分区别 在数学中: 2∗3=3∗22*3 = 3*22∗3=3∗2 ab=abab = abab=ab 1a\frac{1}{a}a1​ 在线性代数中 AB!=BAAB != BAAB!=BA !1a! \frac{1}{a}!a1​ 特别注意:0在线性代数中有多层含义 ① 代表数字0 ② 代表矩阵0 ③ 代表0向量 2.方程组 小例子 {5x+6y=79x+4y=

lys_828的博客 3473

「技美之路」图形 1.2.1 向量基础

这一节的大部分其实都是初高中数学基础,虽是基础,但通过向量(也可称为矢量),我们可以做出想要的效果。比如获取相机到物体的距离用于判断并剔除不可见的物体,获取光照到物体的距离,调节物体的受光照效果等等…点和矢量点(point)是n维空间(游戏中主要使用二维和三维空间)中的一个位置,它没有大小、宽度这类概念。在笛卡儿坐标系中,我们可以使用2个或3个实数来表示一个点的坐标,如P=(PxPy)表示二维空间的点,P=(PxPyPz)表示三维空间中的点。矢量(vector,也被称为向量)的定义则复杂一些。在数学家看来,

wubaohu1314的博客 2775

向量加减法首尾规律_平面向量加减法口诀

一、向量的加法两个向量做加法运算就是向量的加法,是一种向量的运算。首先我们来看图像。向量加法图像向量的加法口诀:首尾相连,首连尾,方向指向末向量。以第一个向量的起点为起点,以第二个向量的终点为终点的向量是两向量的和向量。二、向量的减法两向量做减法运算,图像如下图所示:向量的减法图像向量的减法口诀:首首相连,尾连尾,方向指向被减向量。以第一个向量的终点为起点,以第二个向量的终点为终点的向量是两向量的...

weixin_35919843的博客 1万+

向量的计算(减法)

减法:等于各分量相减 公式:[x1,y1,z1]-[x2,y2,z2]=[x1-x2,y1-y2,z1-z2] 几何意义:向量a,向量b相减,理解为以b的终点为始点,以a的终点为终点的向量,方向由b指向a (指向被减数) 在Unity中 两个向量相减 后的向量的起始坐标和a,b的起点相同(如下图) 使用 ti-t2后得到的向量是这样的(如下图) 应用:计算两点之间的距离和相对方向 代码表示: ...

赵某人 3万+

行列式基础知识

行列式是一个数学概念,主要用于线性代数中,它是一个可以从方阵(即行数和列数相等的矩阵)形成的一个标量(即一个单一的数值)。1.以3阶行列式为例3阶行列式按行展开后为6项,每项为3个不同行不同列的3个元素相乘aij元素的行标i都是123的自然排列aij元素列标j则为:123、231、312、321、213、132,总数为3!=6N(123) = 0 偶数N(231) = 1 + 1 = 2 偶数N(312) = 2 偶数N(321) = 2 + 1 = 3 奇数。

m0_73723097的博客 5680

一文看懂向量的概念及其几何意义

向量是2D、3D数学研究的标准工具,在3D游戏中向量是基础。因此掌握好向量的一些基本概念以及属性和常用运算方法就显得尤为重要。在本篇博客中,马三就来和大家一起回顾和学习一下Unity3D中那些常用的3D数学知识。 一、向量概念及基本定义 1、向量的数学定义 向量就是一个数字列表,对于程序员来说一个向量就是一个数组。 向量的维度就是向量包含的“数”的数目,向量可以有任意正数维,标量可以被认为是一维向量。 书写向量时,用方括号将一列数括起来,如[1,2,3] 水平书写的向量叫行向量垂直书写的...

weixin_42565127的博客 3万+

向量加减法首尾规律_高中数学平面向量知道考什么吗?知道怎么解决吗?

考点1 平面向量的有关概念1. 三个常用的结论(1) 零向量与任何向量平行;(2) 平行向量与起点无关;(3) 若存在非零实数,使得两个向量平行,则三点共线.2. 三个注意点(1) 共线向量与线段共线不同,前者可以不在同一直线上,而后者必须在同一直线上,同样,两个平行向量与两条平行直线也是不同的,因为两个平行向量可以移到同一直线上;(2) 作为两个向量的差时,要注意向量的方向是指向被减向量的终点;...

weixin_39670246的博客 3400

三维向量变化为角度_2.2 三维空间位姿描述

书上写的太难了,一天时间简单的了解了一下,不知道会不会影响以后的学习/(ㄒoㄒ)/~一些知识旋转、平移笛卡尔坐标系{A}通过向量t平移,再以某种方式旋转到坐标系{B},三维的旋转很复杂啊。欧拉旋转定理任何一个正交坐标系,都可以通过不超过三次相对于坐标轴的旋转,与另一任选直角坐标系方向相同,每连续两次旋转不能绕同一轴绕。右手定则拇指指向x,四指伸向y,四指弯曲的方向是z。向量旋转方向手握住向量,拇指...

weixin_39573822的博客 1358

6.进入线性代数的奇妙世界:向量的减法

两个向量相减,结果仍然是一个向量。那么在图形上,结果是怎样的一个向量呢?这个结果向量是两个向量组成的平行四边形的另外一条对角线。 向量减法的计算规则就是将两个向量对应维度的值相减。假定 , ​​​​​​​ ,则向量的减法运算如下: 仍然使用上节中的例子中的向量a 和向量b : , ​​​​​​​,则: 减法计算的图示如图6-1所示。结合上述计算过程及图6-1,可以理解为将向量b 先反向,再相加,结果是处于x 轴上的向量[-2,...

IT人必读的内容 5878
上一篇: 【sklearn】Toy datasets上的分类/回归问题 (XGBoost实践)
下一篇: 【读书笔记】自然语言处理综论 -- 第十四章 -- 统计剖析
Yanqiang_CS
博客等级 码龄12年 34粉丝 94原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值