LR文本分类

LR参数分析

LogisticRegression(penalty=’l2’, C=1.0, class_weight=None, solver=’liblinear’, max_iter=100)
  1. C的系数是对损失函数的惩罚

  2. 默认求解策略(solver)是用的liblinear, 迭代次数100

    1. liblinear(坐标下降法, coordinate descent)

      LR文本分类_第1张图片
      image
      1. 定义: 沿一个方向(变量)移动, 当目标函数不在下降时换另一个变量, 遍历完所有变量为一圈
      2. 适用: 目标函数不可微, 特征少(特征多用梯度下降, 梯度下降沿目标函数下降最快的方向移动)
      3. 广泛应用于L1_norm
    2. sag(随机梯度下降法, Stochastic Average Gradient descent )

      1. 对大样本, 大特征支持较好
      2. 不支持L1_norm
    3. saga

      1. sag的变体, 支持L1_norm, 即支持稀疏多项式回归的计算方法
    4. 对于文本分类, 样本较大, 特征较高, 特征稀疏

      • 则使用的是saga+L2_norm

NB-LR

先从贝叶斯角度判断这个特征的可信度是否较高, 然后再使用SVM进行分类

NB计算特征的置信度
$$
r = log(\frac{p / ||p||_1}{q / ||q||_1})
$$

说明

  • 分子: 标签取1中特征取1的比率
  • 分母: 标签取0中特征取1的比率

原理

  1. 标签为1中特征取1的比率 比上 标签为0中特征取1的比率, 取对数, 得到特征的一个置信度, 作为模型的输入
  2. 这个置信度是对特征的一个标准化, 当使用L2时, 会对权值进行限制, 此时相当于加大了对置信度高的贡献
  3. 与tf-idf的比较, 其作用恰好相反, 所以tf-idf在文本分类上效果并不好
  4. 思考: LR+L2模型通过特征缩放加大特征的权重

nb_norm代码

def nb_norm(x_train, y_train, x_test):
    """ nb norm feature
        An Classifier is built over NB log-count ratios as feature values
            https://www.kaggle.com/jhoward/nb-svm-strong-linear-baseline-eda-0-052-lb
            paper: https://nlp.stanford.edu/pubs/sidaw12_simple_sentiment.pdf
    """
    from scipy.sparse import csr_matrix

    def pr(x, y_i, y):
        p = x[y == y_i].sum(0)  # 标签取1/0中, 特征取1的个数
        return (p + 1) / ((y == y_i).sum() + 1)  # 标签取1/0中, 特征取1的比率; 1: smooth term
    """
    classifier is built over NB log-count ratios as feature values.
    r = log(p(x=1|y=1) / p(x=1|y=0)) // 作为特征
    思想: 先从贝叶斯角度判断这个特征的可信度是否较高, 然后再使用SVM进行分类
    ---
    标签为1中特征取1的比率 比上 标签为0中特征取1的比率, 取对数, 得到特征的一个置信度
    这个置信度相当于是对特征的一个标准化, 当使用L2时, 较大权值会受到抑制
    而较高的特征值相当于加大了对模型的影响, 相当于加大了特征的权重
    同样的思想可对比tf-idf文本特征的抑制作用
    """
    r = np.log(pr(x_train, 1, y_train) / pr(x_train, 0, y_train))
    r = csr_matrix(r)
    x_train = x_train.multiply(r)
    x_test = x_test.multiply(r)

    return x_train, x_test

bow vs tf-idf vs word2vec

  1. 为什么不使用tf-idf
    1. tf-idf反映了词语相对权重(tf: 在该文档出现的频率(重要度), idf: 在多少个文档中出现(普遍度))
    2. 在分类问题中, 如果使用全部的数据作为语料, 那么对于单个词语
      1. 逆文档频率是相同的(纵向上), 所以对于样本的区分度不影响, 但是增加了量纲(对正则的影响)
      2. 出现越多的词语取值较少(横向上), 当使用正则时, 会使得对应的权值更大, 加大了正则项带来的损失, 抑制出现较多的词语
      3. 然而在正负面评价中, 关键词的逆文档频率都是很高的, 所以并不适用
  2. 为什么不使用word2vec
    1. word2vec是把每个词语转换为一个向量(向量化), 保留了词语之间的局部关联性, 使词语具有计算特性(相似度)
    2. 丢失信息(降维)
      1. 把10w的词语用300维的向量进行表达, 虽然增加了局部信息, 但是丢失了本身的一些信息
      2. 可使用max, min, mean生成一句话的特征, 增加了泛化, 更进一步丢失了词语本身的信息
      3. 我们需要文本的上下文信息吗? 需要, 但是多元词袋模型能够解决这个问题
  3. 为什么BOW
    1. 简单, 计算快
    2. 特征为0-1取值, 可是用NB-LR + L2

文本特征选择

  1. 卡方检验
  2. 信息增益
  3. 互信息

思考

在使用LR进行文本分类的时候, 最主要的是如何解决特征之间的非线性关系

  1. 多元特征模型
  2. boosting
  3. nb-norm
  4. 去除非线性特征

参考:

坐标下降法

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

https://blog.csdn.net/u013802188/article/details/40476989

nb-svm

https://nlp.stanford.edu/pubs/sidaw12_simple_sentiment.pdf

https://www.kaggle.com/jhoward/nb-svm-strong-linear-baseline-eda-0-052-lb

文本特征选择

https://blog.csdn.net/lk7688535/article/details/51322423

你可能感兴趣的:(LR文本分类)