diff --git "a/2023/11/07/\345\205\263\344\272\216\344\275\277\347\224\250SVM\350\277\233\350\241\214\345\236\203\345\234\276\347\237\255\344\277\241\345\210\206\347\261\273\347\232\204\345\233\236\351\241\276/index.html" "b/2023/11/07/\345\205\263\344\272\216\344\275\277\347\224\250SVM\350\277\233\350\241\214\345\236\203\345\234\276\347\237\255\344\277\241\345\210\206\347\261\273\347\232\204\345\233\236\351\241\276/index.html" index 9663cfa..3c70794 100644 --- "a/2023/11/07/\345\205\263\344\272\216\344\275\277\347\224\250SVM\350\277\233\350\241\214\345\236\203\345\234\276\347\237\255\344\277\241\345\210\206\347\261\273\347\232\204\345\233\236\351\241\276/index.html" +++ "b/2023/11/07/\345\205\263\344\272\216\344\275\277\347\224\250SVM\350\277\233\350\241\214\345\236\203\345\234\276\347\237\255\344\277\241\345\210\206\347\261\273\347\232\204\345\233\236\351\241\276/index.html" @@ -165,17 +165,18 @@

关于使用SVM进行垃圾短信分类的回顾

1.什么是Bag of Words?

一个概念:词袋:一张由训练语料得到的词汇表(词典)
一个操作:在给出一篇文本后,需要把文本转换(编码)成数值,才能汇编成词典。用数值表示文本的方法有很多,例如最常见的One-Hot表示法,此外还有TF表示法、TF-IDF表示法。

-

1.1文本向量化

文本向量化就是指用数值向量来表示文本的语义,即,把人类可读的文本转化成机器可读形式。

-

如何转化成机器可读的形式?这里用到了信息检索领域的词袋模型,词袋模型在部分保留文本语义的前提下对文本进行向量化表示。

+

1.1文本向量化

​ 文本向量化就是指用数值向量来表示文本的语义,即,把人类可读的文本转化成机器可读形式。

+

​ 如何转化成机器可读的形式?这里用到了信息检索领域的词袋模型,词袋模型在部分保留文本语义的前提下对文本进行向量化表示。

1.2 词袋及编码方法

1
2
1 Jane wants to go to Shenzhen. 
2 Bob wants to go to Shanghai.
-

将所有词语装进一个袋子里,不考虑其词法和语序的问题,即每个词语都是独立的。例如上面2个例句,就可以构成一个词袋,袋子里包括Jane、wants、to、go、Shenzhen、Bob、Shanghai。假设建立一个数组(或词典)用于映射匹配:

+

​ 将所有词语装进一个袋子里,不考虑其词法和语序的问题,即每个词语都是独立的。例如上面2个例句,就可以构成一个词袋,袋子里包括Jane、wants、to、go、Shenzhen、Bob、Shanghai。假设建立一个数组(或词典)用于映射匹配:

1
[Jane, wants, to, go, Shenzhen, Bob, Shanghai]
-

(如果是One-Hot表示则,不统计出现的次数,只统计是否出现:1 [1,1,1,1,1,0,0] 2 [0,1,1,1,0,1,1])

+

如果是One-Hot表示则,不统计出现的次数,只统计是否出现:

+
1
2
1 [1,1,1,1,1,0,0]
2 [0,1,1,1,0,1,1]

那么上面两个例句就可以用以下两个向量表示,对应的下标与映射数组的下标相匹配,其值为该词语出现的次数:

1
2
3
4
# 词典的key值:
[Jane, wants, to, go, Shenzhen, Bob, Shanghai]
1 [1,1,2,1,1,0,0]
2 [0,1,2,1,0,1,1]
-

这两个词频向量就是词袋模型,可以很明显的看到语序关系已经完全丢失。CountVectorizer默认采用的是TF表示法,TF表示法的数值计算规则为:词语序列中出现的词语其数值为词语在所在文本中的频次,词语序列中未出现的词语其数值为0。

+

​ 这两个词频向量就是词袋模型,可以很明显的看到语序关系已经完全丢失。CountVectorizer默认采用的是TF表示法,TF表示法的数值计算规则为:词语序列中出现的词语其数值为词语在所在文本中的频次,词语序列中未出现的词语其数值为0。

1.3词袋模型的构建步骤

词袋模型的构建步骤主要包括以下几个环节:

  1. 分词:将文本切分成词的序列。
  2. @@ -190,12 +191,12 @@

    2.TF-IDF是什么?

    TF-IDF是NLP中一种常用的统计方法,用于评估一个词语对于一篇文档或一个语料库中的其中一篇文档的重要程度,通常用于提取文本的特征,即关键词。词语的重要性与它在文档中出现的次数成正比,但同时与它在语料库中出现的频率成反比。TF-IDF的计算如下:

    +

    2.TF-IDF是什么?

    ​ TF-IDF是NLP中一种常用的统计方法,用于评估一个词语对于一篇文档或一个语料库中的其中一篇文档的重要程度,通常用于提取文本的特征,即关键词。词语的重要性与它在文档中出现的次数成正比,但同时与它在语料库中出现的频率成反比。TF-IDF的计算如下:

    TF为词频,即一个词语在文档中的出现频率,假设一个词语在整个文档中出现了m次,而整个文档有n个词语,则TF的值为m/n。

    IDF为逆文本频率,假设整个语料有n篇文档,而一个词语在k篇文档中出现,则某个单词w的IDF值为

    -

    3.CountVectorizer是什么?

    CountVectorizer是属于常见的特征数值计算类,是一个文本特征提取方法。对于每一个训练文本,它只考虑每种词汇在该训练文本中出现的频率。CountVectorizer会将文本中的词语转换为词频矩阵,它通过fit_transform函数计算各个词语出现的次数。
    CountVectorizer 类接受多个参数,用于配置文本特征提取的各种参数。以下是一些常用的参数:

    +

    3.CountVectorizer是什么?

    ​ CountVectorizer是属于常见的特征数值计算类,是一个文本特征提取方法。对于每一个训练文本,它只考虑每种词汇在该训练文本中出现的频率。CountVectorizer会将文本中的词语转换为词频矩阵,它通过fit_transform函数计算各个词语出现的次数。
    CountVectorizer 类接受多个参数,用于配置文本特征提取的各种参数。以下是一些常用的参数:

    1. input:用于指定输入的数据,可以是字符串列表、文件对象或可迭代对象。通常是文本数据。
    2. analyzer:用于指定分析器的类型,默认为 “word”,表示以单词为单位进行分析。您还可以选择 “char” 表示以字符为单位进行分析。
    3. @@ -204,17 +205,10 @@

      token_pattern:用于指定正则表达式模式,以确定如何提取词语。默认为 r”(?u)\b\w\w+\b”,表示提取至少包含两个字母的单词。
    4. ngram_range:指定要提取的 n-gram 范围,默认为 (1, 1) 表示仅提取单个单词。您可以配置为 (1, 2) 表示提取单个单词和二元组(两个连续单词),以此类推
    -

    from sklearn.feature_extraction.text import CountVectorizer

    -

    `# 创建CountVectorizer对象,配置小写化和停止词`

    -

    vectorizer = CountVectorizer(lowercase=True, stop_words='english')

    -

    # 拟合文本数据并转化为词频矩阵

    -

    corpus = ["This is a sample sentence.", "Another example sentence.", "And one more sentence."]

    -

    X = vectorizer.fit_transform(corpus)

    -

    `# 输出词频矩阵`

    -

    print(X.toarray())

    -

    4.Pipeline是什么?如何使用?

    ​ Pipeline 机制是一种用于将多个数据处理和机器学习步骤有序组合在一起的机制,以形成一个整体工作流程。

    -
    Pipeline 机制是一种用于将多个数据处理和机器学习步骤有序组合在一起的机制,以形成一个整体工作流程。它在机器学习中非常有用,可以简化代码、提高可读性,还可以避免一些常见的错误。在 scikit-learn(一个常用的 Python 机器学习库)中,Pipeline 由 **sklearn.pipeline.Pipeline** 类实现。
    -
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    from sklearn.feature_extraction.text import CountVectorizer

    # 创建CountVectorizer对象,配置小写化和停止词

    vectorizer = CountVectorizer(lowercase=True, stop_words='english')

    # 拟合文本数据并转化为词频矩阵

    corpus = ["This is a sample sentence.", "Another example sentence.", "And one more sentence."]

    X = vectorizer.fit_transform(corpus)

    # 输出词频矩阵

    print(X.toarray())


    + + +

    4.Pipeline是什么?如何使用?

    ​ Pipeline 机制是一种用于将多个数据处理和机器学习步骤有序组合在一起的机制,以形成一个整体工作流程。它在机器学习中非常有用,可以简化代码、提高可读性,还可以避免一些常见的错误。在 scikit-learn(一个常用的 Python 机器学习库)中,Pipeline 由 sklearn.pipeline.Pipeline 类实现。

    Pipeline 机制的关键特点包括:

    1. 有序处理:Pipeline 允许用户定义一个有序的处理流程,其中每个步骤按照指定的顺序依次执行。每个步骤可以包括数据预处理、特征提取、特征选择、模型训练、模型评估等任务。
    2. @@ -224,20 +218,7 @@

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      from sklearn.pipeline import Pipeline

      from sklearn.preprocessing import StandardScaler

      rom sklearn.svm import SVC

      # 创建一个 Pipeline 包含数据标准化和支持向量机分类器

      pipeline= Pipeline([

      ('scaler', StandardScaler()), # 步骤1:数据标准化

      ('svm', SVC()) # 步骤2:支持向量机分类器

      `])

      # 使用 Pipeline 进行训练和预测

      pipeline.fit(X_train, y_train) # 训练模型

      y_pred = pipeline.predict(X_test) # 预测

      # 评估模型性能

      accuracy = accuracy_score(y_test, y_pred)

      print(f'Accuracy: {accuracy}')


      参考文章:

      词袋模型(Bag of Words Model)

      【NLP】词袋模型(bag of words model)和词嵌入模型(word embedding model)

      @@ -261,7 +242,16 @@

      About this Post

      - + + +
      + +
      +
      + +
      + + DL + +
      + + + +
      + November + 7, + 2023 +
      + + +

      深度学习框架

      +
      + +
      + +
      +

      DL Project(总目录)

      models(子目录)

      存放所有模型

      +

      model1.py

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      # 存放配置参数 
      class Configure:
      def__init__(self,)


      # 定义模型
      class Model(nn.Module):
      def __init__(self, config):
      super(Model, self).__init__()
      # 定义网络结构

      # 定义传播函数
      def forward(self,x):

      return
      + + +

      untils.py

      1
      2
      3
      4
      # 存放各种工具函数
      例如利用sklearn包中的from sklearn.model_selection import train_test_split进行数据集划分
      eg:X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
      X 和 y 是特征矩阵和标签,test_size 设置为0.2表示将数据集分成80%的训练集和20%的测试集,random_state 用于确保每次运行时得到相同的随机分割结果。
      +

      train.py

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      # 损失函数
      # 优化器

      # 训练
      # 开启训练模式
      # 进入多轮迭代
      # 将数据放入模型,需要先将数据转化为张量
      # 计算loss
      # 对结果进行处理,是二分类还是多分类
      # loss反向传播
      # 优化器调优
      # 计算正确率或者画损失函数图像 抑或者调用sklearn包中的工具
      例如from sklearn.metrics import confusion_matrix, classification_report accuracy_score
      accuracy_score(y_pre,y_true)
      # 在多轮训练后,仍然没有得到提升后,停止训练,保存参数

      # 测试
      # 进入测试模式
      # 加载模型
      # 调用评估函数

      # 评估函数 用于动态计算输入的数据集的评价指标

      +

      run.py

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      from importlib import import_module
      import argparse

      # 配置命令行脚本参数
      parser = argparse.ArgumentParser(description=' ')
      parser.add_argument()
      parser.add_argument()
      args = parser.parse_args() # argparse 解析用户在命令行中输入的参数,并将这些参数的值存储在 args 对象中

      if __name__ == '__main__':
      # 通过import_module进行模型切换

      x = import_module('models.' + model_name)
      config = x.Config(dataset, )
      + +
      + + +
      +

      About this Post

      +
      +

      This post is written by Kjr, licensed under CC BY-NC 4.0.

      +
      + +

      + + + #框架 +

      + +
      + + +
      + + + + +
      + + + + + +
      + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/archives/2023/11/index.html b/archives/2023/11/index.html index 7deb76f..fb61c41 100644 --- a/archives/2023/11/index.html +++ b/archives/2023/11/index.html @@ -153,6 +153,30 @@

      Archives

      + +
      diff --git a/archives/2023/index.html b/archives/2023/index.html index d8561b4..c606ca3 100644 --- a/archives/2023/index.html +++ b/archives/2023/index.html @@ -153,6 +153,30 @@

      Archives

      + +
      diff --git a/archives/index.html b/archives/index.html index 5ea970d..2a1e3e0 100644 --- a/archives/index.html +++ b/archives/index.html @@ -153,6 +153,30 @@

      Archives

      + +
      diff --git a/categories/DL/index.html b/categories/DL/index.html new file mode 100644 index 0000000..c5a59f4 --- /dev/null +++ b/categories/DL/index.html @@ -0,0 +1,250 @@ + + + + + + + + Category: DL - Mr.K + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      +
      + Category + +
      + +

      DL

      +
      + +
      + +
      + + + +
      + + +
      + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/categories/index.html b/categories/index.html index 55e94fe..6f2b920 100644 --- a/categories/index.html +++ b/categories/index.html @@ -151,7 +151,7 @@

      Categories

      diff --git a/index.html b/index.html index 47958ab..f155151 100644 --- a/index.html +++ b/index.html @@ -149,6 +149,30 @@

      Latest Posts

      + +
      diff --git a/search.json b/search.json index 5c98665..b607c38 100644 --- a/search.json +++ b/search.json @@ -1 +1 @@ -[{"title":"A-novel-deep-framework-for-dynamic-malware-detection-based-on-API-sequence-intrinsic-features","url":"/2023/11/05/A-novel-deep-framework-for-dynamic-malware-detection-based-on-API-sequence-intrinsic-features/","content":"","categories":["essays"],"tags":["Malware detection"]},{"title":"Hello World","url":"/2021/02/03/hello-world/","content":""},{"title":"SVM (使用Sklearn实现)","url":"/2023/11/06/SVM-%EF%BC%88%E4%BD%BF%E7%94%A8Sklearn%E5%AE%9E%E7%8E%B0%EF%BC%89/","content":"","categories":["ML_Code"],"tags":["SVM_Sklearn"]},{"title":"看完SVM的一些问题","url":"/2023/11/06/SVM/","content":"","categories":["ML思考"],"tags":["SVM"]},{"title":"【Hexo】使用hexo+github搭建个人博客","url":"/2021/02/02/%E6%88%91%E7%9A%84%E7%AC%AC%E4%B8%80%E7%AF%87%E5%8D%9A%E6%96%87/","content":"","tags":["Tools"]},{"title":"hexo修改侧边栏文字","url":"/2021/02/03/hexo%E4%BF%AE%E6%94%B9%E4%BE%A7%E8%BE%B9%E6%A0%8F%E6%96%87%E5%AD%97/","content":"","categories":["Tools"]},{"title":"关于使用SVM进行垃圾短信分类的回顾","url":"/2023/11/07/%E5%85%B3%E4%BA%8E%E4%BD%BF%E7%94%A8SVM%E8%BF%9B%E8%A1%8C%E5%9E%83%E5%9C%BE%E7%9F%AD%E4%BF%A1%E5%88%86%E7%B1%BB%E7%9A%84%E5%9B%9E%E9%A1%BE/","content":"","categories":["ML思考"],"tags":["SVM"]}] \ No newline at end of file +[{"title":"A-novel-deep-framework-for-dynamic-malware-detection-based-on-API-sequence-intrinsic-features","url":"/2023/11/05/A-novel-deep-framework-for-dynamic-malware-detection-based-on-API-sequence-intrinsic-features/","content":"","categories":["essays"],"tags":["Malware detection"]},{"title":"SVM (使用Sklearn实现)","url":"/2023/11/06/SVM-%EF%BC%88%E4%BD%BF%E7%94%A8Sklearn%E5%AE%9E%E7%8E%B0%EF%BC%89/","content":"","categories":["ML_Code"],"tags":["SVM_Sklearn"]},{"title":"看完SVM的一些问题","url":"/2023/11/06/SVM/","content":"","categories":["ML思考"],"tags":["SVM"]},{"title":"Hello World","url":"/2021/02/03/hello-world/","content":""},{"title":"hexo修改侧边栏文字","url":"/2021/02/03/hexo%E4%BF%AE%E6%94%B9%E4%BE%A7%E8%BE%B9%E6%A0%8F%E6%96%87%E5%AD%97/","content":"","categories":["Tools"]},{"title":"关于使用SVM进行垃圾短信分类的回顾","url":"/2023/11/07/%E5%85%B3%E4%BA%8E%E4%BD%BF%E7%94%A8SVM%E8%BF%9B%E8%A1%8C%E5%9E%83%E5%9C%BE%E7%9F%AD%E4%BF%A1%E5%88%86%E7%B1%BB%E7%9A%84%E5%9B%9E%E9%A1%BE/","content":"","categories":["ML思考"],"tags":["SVM"]},{"title":"【Hexo】使用hexo+github搭建个人博客","url":"/2021/02/02/%E6%88%91%E7%9A%84%E7%AC%AC%E4%B8%80%E7%AF%87%E5%8D%9A%E6%96%87/","content":"","tags":["Tools"]},{"title":"深度学习框架","url":"/2023/11/07/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E6%A1%86%E6%9E%B6/","content":"","categories":["DL"],"tags":["框架"]}] \ No newline at end of file diff --git a/tags/index.html b/tags/index.html index 9c55c6e..546092d 100644 --- a/tags/index.html +++ b/tags/index.html @@ -151,7 +151,7 @@

      Tags

      diff --git "a/tags/\346\241\206\346\236\266/index.html" "b/tags/\346\241\206\346\236\266/index.html" new file mode 100644 index 0000000..84aa246 --- /dev/null +++ "b/tags/\346\241\206\346\236\266/index.html" @@ -0,0 +1,256 @@ + + + + + + + + #框架 - Mr.K + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file