文本分类从入门到精通——各种库的基本解读与使用(一)

文本分类从入门到精通—常用模块基本方法

tqdm库

tqdm是python的进度条库,可以再python的长循环中添加一个进度提示信息,用户只需封装任意的迭代器,是一个快速,扩展性强的进度条工具库。
使用方法,
传入可迭代对象。

import time
from tqdm import *

for i in tqdm(range(100)):
    time.sleep(0.01)

update () 手动控制进度条更新的进度。


```python
pbar = tqdm(total=200)

for i in range (20):
    pbar.update(10)
    time.sleep(1)

pbar.close()

`

``

要求:会自己再进度条模块中设置进度条信息,全部将其搞定都行啦的样子与打算。

from sklearn.svm import SVC

SVM是一个非常优雅的算法,具有完善的数学理论,常用于数据分类,也可以用于数据的回归预测中,由于其优美得理论保证和利用核函数对于线性不可分问题得处理技巧,SVM曾红极一时。
SVM囊括很多算法功能:
文本分类从入门到精通——各种库的基本解读与使用(一)_第1张图片

Sklearn中得支持向量机:
文本分类从入门到精通——各种库的基本解读与使用(一)_第2张图片

文本分类从入门到精通——各种库的基本解读与使用(一)_第3张图片
SVM是一种二分类模型,其基本思想是在特征空间中寻找间隔最大得分离超平面使数据得到高效得二分类,具体来讲(有三种情况下,不加核函数得话就是这个线性模型,加了之后才会升级一个非线性模型。)

  • 当训练样本线性可分时,通过硬间隔最大化,学习一个线性分类器,即线性可分支持向量机。
  • 当训练数据近似线性可分时,引入松弛变量,通过软间隔最大化,学习一个线性分类器,叫做线性支持向量机

当数据集线性不可分时,通过使用核函数技巧及软间隔最大化,学习非线性支持向量机。

sklearn.svm.SVC

class sklearn.svm.SVC(*, C=1.0, kernel='rbf', degree=3, gamma='scale', coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=- 1, decision_function_shape='ovr', break_ties=False, random_state=None)


文本分类从入门到精通——各种库的基本解读与使用(一)_第4张图片
文本分类从入门到精通——各种库的基本解读与使用(一)_第5张图片

核函数

文本分类从入门到精通——各种库的基本解读与使用(一)_第6张图片
软间隔和硬间隔:
当两组数据是完全线性可分时,我们可以找出一个决策边界使得训练集上得分类误差为0,这两种数据称为存在硬间隔的,当两组数据几乎是完全线性可分的,但决策边界在训练集上存在较小的训练误差,这两种数据就被称为存在软间隔

慢慢的将各种模型的机器向量机,全部将其搞定都行啦的样子与打算。全部将其搞定都行啦的回事,慢慢的结合各种比赛,将SVM算法你彻底搞懂都行啦的理由与打算。

from keras.models import Sequential

Sequential模型是一系列网络层按顺序构成的栈,利用串联的方式将各种网咯层给其传串联起来,形成序贯模型,会将各种网络层给其串联起来。都行啦的样子与打算。

from keras.layers.recurrent import LSTM, GRU

keras的层主要包括:
常用层(Core), 卷积层(Convolutional)、Pooling池化层,局部连接层、递归层、嵌入层、高级激活层、规范层、噪声层、包装层等, 也可以编写自己的层.

常用的网络层

Dense层(全连接层)

keras.layers.core.Dense(units,activation=None,use_bias=True,kernel_initializer='glorot_uniform',bias_initializer='zeros',kernel_regularizer=None,bias_regularizer=None,activity_regularizer=None,kernel_constraint=None,bias_constraint=None)


Activation层

keras.layers.core.Activation(activation)



激活层对一个层的输出施加激活函数。

Dropout层

keras.layers.core.Dropout(rate, noise_shape=None, seed=None)

将输入数据施加Dropout,Dropout层将在训练过程种按照一定的概率,随机断开输入神经元,用于防止过拟合。

Flatten层

keras.layers.core.Flatten()

用于将输入压平,即把多维输入一维化,常用在从卷积层到全连接层的过度。该层不影响batch的大小。

Reshape层

keras.layers.core.Reshape(target_shape)

Permute层

keras.layers.core.Permute(dims)

将输入维度按照给定的模式进行重排,例如,当需要将RNN和CNN网络连接时,可能会用到该层。所谓的重排也就是交换两行

RepeatVector层

keras.layers.core.RepeatVector(n)

将输入重复n次。
会自己根据比赛,学习keras的各种网络层,并进行keras的各种线性组合。全部将其搞定都行啦啊的回事。

from keras.layers.normalization import BatchNormalization

Google提出来的数据归一化方法,往往用在深度神经网络激活层之前,
其规范化针对单个神经元进行的,,利用网络训练时一个 mini-batch 的数据来计算该神经元的均值和方差。

  • BatchNormalization层在每个batch上将前一层的激活值重新规范化,即使得其输出数据的均值接近0,其标准差接近1
  • 其他方法有横向规范化,参数规范化。

作用

将输入神经网络的数据,先对其做平移和伸缩变换,将数据分布规范化成在固定区间范围的标准分布。

  • 可以加快模型训练时的收敛速度,使得模型训练过程更加稳定,避免梯度爆炸或者梯度消失

(3)并且起到一定的正则化作用,几乎代替了Dropout。控制过拟合,可以少用或不用Dropout和正则

(4)降低网络对初始化权重不敏

(5)允许使用较大的学习率

from keras.utils import np_utils

np_utils.to_categorical 将数值转换成one-hot编码,二值序列。

from sklearn import preprocessing, decomposition, model_selection, metrics, pipeline

sklearn主要包使用及介绍。

Pipeline(流水线)

  • 跟踪记录各步骤的操作,方便地重现实验结果。
  • 对各步骤进行一个封装
  • 确保代码的复杂程度不至于超出掌控范围。

基本使用方法
流水线的输入为一连串的数据挖掘步骤,其中最后一步必须是估计器,前几步是转换器。输入的数据集经过转换器的处理后,输出的结果作为下一步的输入。最后,用位于流水线最后一步的估计器对数据进行分类。
每一步都用元组( ‘名称’,步骤)来表示

scaling_pipeline = Pipeline([
  ('scale', MinMaxScaler()),
  ('predict', KNeighborsClassifier())
])

预处理(Preprocessing)

  • 规范化:

    • MinMaxScaler :最大最小值规范化
    • Normalizer :使每条数据各特征值的和为1
    • StandardScaler :为使各特征的均值为0,方差为1
  • 编码:

    • LabelEncoder :把字符串类型的数据转化为整
      * OneHotEncoder :特征用一个二进制数字来表
      * Binarizer :为将数值型特征的二值
      * MultiLabelBinarizer:多标签二值

model_selection

文本分类从入门到精通——各种库的基本解读与使用(一)_第7张图片

在这里插入图片描述
会自己结合各种代码比赛,不要在一时间,将其中所涉及的各种代码和模块全部都给其搞定都行啦的样子与打算。

decomposition 数据降维度模块

文本分类从入门到精通——各种库的基本解读与使用(一)_第8张图片

文本分类从入门到精通——各种库的基本解读与使用(一)_第9张图片

GridSearchCV

Grid Search:一种调参手段;穷举搜索:在所有候选的参数选择中,通过循环遍历,尝试每一种可能性,表现最好的参数就是最终的结果。其原理就像是在数组里找到最大值。这种方法的主要缺点是比较耗时!

所以网格搜索适用于三四个(或者更少)的超参数(当超参数的数量增长时,网格搜索的计算复杂度会呈现指数增长,这时候则使用随机搜索),用户列出一个较小的超参数值域,这些超参数至于的笛卡尔积(排列组合)为一组组超参数。网格搜索算法使用每组超参数训练模型并挑选验证集误差最小的超参数组合。

TfidfVectorizer,

主要思想:如果某个词或某篇文章在一篇文章中出现的频率TF较高,并且其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度
文本分类从入门到精通——各种库的基本解读与使用(一)_第10张图片

CountVectorizer

将文本文档集合转化为token计数矩阵,(token可以理解成词)
此实现通过使用scipy.sparse.csr_matrix产生了计数的稀疏表示
如果不提供一个先验字典,并且不使用进行某种特征选择的分析器,那么特征的数量将与通过分析数据得到的词汇表的大小一致

CountVectorizer()函数只考虑每个单词出现的频率;然后构成一个特征矩阵,每一行表示一个训练文本的词频统计结果。其思想是,先根据所有训练文本,不考虑其出现顺序,只将训练文本中每个出现过的词汇单独视为一列特征,构成一个词汇表,该方法又称为词袋法(Bag of Words)。

TruncatedSVD

把原先规模为(文本数,词汇数)的特征矩阵X化为规模为(文本数,主题数)的新特征矩阵X2:

classification_report

用于显示主要分类指标的文本报告,在报告中显示每个类的精确度,召回率、F1值等信息。
主要参数:

  • y_true:1维数组,或标签指示器数组/稀疏矩阵,目标值。
  • y_pred:1维数组,或标签指示器数组/稀疏矩阵,分类器返回的估计值。
  • labels:array,shape = [n_labels],报表中包含的标签索引的可选列表。
  • target_names:字符串列表,与标签匹配的可选显示名称(相同顺序)。
  • sample_weight:类似于shape = [n_samples]的数组,可选项,样本权重。
  • digits:int,输出浮点值的位数.

MultinomialNB

多项式朴素贝叶斯:
概要:贝叶斯定理是关于随机事件A和B的条件概率(或边缘概率)的一则定理。其中P(A|B)是在B发生的情况下A发生的可能性。多项式朴素贝叶斯多用于高维度向量分类,最常用的场景是文章分类

主要用于离散特征分类,例如文本分类单词统计,以出现的次数作为特征值。
文本分类从入门到精通——各种库的基本解读与使用(一)_第11张图片
文本分类从入门到精通——各种库的基本解读与使用(一)_第12张图片

sequence, text

keras.preprocessing.text.Tokenizer(num_words=None,
filters='!"#$%&()*+,-./:;<=>?@[]^_`{|}~ ‘,
lower=True,
split=’ ',
char_level=False,
oov_token=None,
document_count=0)

该类允许使用两种方法向量化一个文本语料库:将每个文本转化为一个整数序列(每个整数都是词典中标记的索引);或者将其转化为一个向量,其中每个标记的系数可以是二进制值、词频、TF-IDF权重等。

EarlyStopping 早停法

EarlyStopping是Callbacks的一种,callbacks用于指定在每个epoch开始和结束的时候进行哪种特定操作。Callbacks中有一些设置好的接口,可以直接使用,如’acc’,’val_acc’,’loss’和’val_loss’等等。
EarlyStopping则是用于提前停止训练的callbacks。具体地,可以达到当训练集上的loss不在减小(即减小的程度小于某个阈值)的时候停止继续训练

作用:
根本原因就是因为继续训练会导致测试集上的准确率下降
那继续训练导致测试准确率下降的原因猜测可能是1. 过拟合 2. 学习率过大导致不收敛 3. 使用正则项的时候,Loss的减少可能不是因为准确率增加导致的,而是因为权重大小的降低。

当然使用EarlyStopping也可以加快学习的速度,提高调参效率

word_tokenize nltk库文本分类从入门到精通——各种库的基本解读与使用(一)_第13张图片

自带语料库corpus
文本分类从入门到精通——各种库的基本解读与使用(一)_第14张图片
nltk.sent_tokenize(text) #按句子分割
nltk.word_tokenize(sentence) #分词
nltk的分词是句子级别的,所以对于一篇文档首先要将文章按句子进行分割,然后句子进行分词:

总结

接下来,开始敲打代码要求,将自己的词向量全部敲打好,并转移揭示下来都行啦的理由与打算。
各种代码的框架,全部将其搞清楚,并不仅仅局限于该比赛,封装函数以及其他都要学会,以及拆分全部将其搞定,慢慢搞起来都行啊了的理由与打算。全部将其搞定都行啦的回事与样子。

学习心得

必须结合和代码学习模型,各种模型需要好好得研究以下, 全部将i搞定都行啦得样子与打算,各种模型全部将其研究一波。

各种模型需要结合代码进行学习与研究,全部将其吃透彻,搞彻底。研究彻底,彻底都行啦的样子与打算,全部将其搞定都行啦的理由与结果。
比赛的代码,用到那种模型去将其研究透彻,研究该模型的逻辑与表达,都行啦的理由与打算。全部将其吃透彻。

你可能感兴趣的:(文本分类从入门到精通比赛,分类,支持向量机)