LR参数分析
LogisticRegression(penalty=’l2’, C=1.0, class_weight=None, solver=’liblinear’, max_iter=100)
C
的系数是对损失函数的惩罚-
默认求解策略
(solver)
是用的liblinear
, 迭代次数100
次-
liblinear
(坐标下降法, coordinate descent)- 定义: 沿一个方向(变量)移动, 当目标函数不在下降时换另一个变量, 遍历完所有变量为一圈
- 适用: 目标函数不可微, 特征少(特征多用梯度下降, 梯度下降沿目标函数下降最快的方向移动)
- 广泛应用于
L1_norm
-
sag
(随机梯度下降法, Stochastic Average Gradient descent )- 对大样本, 大特征支持较好
- 不支持
L1_norm
-
saga
-
sag
的变体, 支持L1_norm
, 即支持稀疏多项式回归的计算方法
-
-
对于文本分类, 样本较大, 特征较高, 特征稀疏
- 则使用的是
saga
+L2_norm
- 则使用的是
-
NB-LR
先从贝叶斯角度判断这个特征的可信度是否较高, 然后再使用SVM进行分类
NB计算特征的置信度
$$
r = log(\frac{p / ||p||_1}{q / ||q||_1})
$$
说明
- 分子: 标签取1中特征取1的比率
- 分母: 标签取0中特征取1的比率
原理
- 标签为1中特征取1的比率 比上 标签为0中特征取1的比率, 取对数, 得到特征的一个置信度, 作为模型的输入
- 这个置信度是对特征的一个
标准化
, 当使用L2时, 会对权值进行限制, 此时相当于加大了对置信度高的贡献 - 与tf-idf的比较, 其作用恰好相反, 所以tf-idf在文本分类上效果并不好
- 思考: 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
- 为什么不使用tf-idf
- tf-idf反映了词语的相对权重(tf: 在该文档出现的频率(重要度), idf: 在多少个文档中出现(普遍度))
- 在分类问题中, 如果使用全部的数据作为语料, 那么对于单个词语
- 逆文档频率是相同的(纵向上), 所以对于样本的区分度不影响, 但是增加了量纲(对正则的影响)
- 出现越多的词语取值较少(横向上), 当使用正则时, 会使得对应的权值更大, 加大了正则项带来的损失, 抑制出现较多的词语
- 然而在正负面评价中, 关键词的逆文档频率都是很高的, 所以并不适用
- 为什么不使用word2vec
- word2vec是把每个词语转换为一个向量(向量化), 保留了词语之间的局部关联性, 使词语具有计算特性(相似度)
- 丢失信息(降维)
- 把10w的词语用300维的向量进行表达, 虽然增加了局部信息, 但是丢失了本身的一些信息
- 可使用max, min, mean生成一句话的特征, 增加了泛化, 更进一步丢失了词语本身的信息
- 我们需要文本的上下文信息吗? 需要, 但是多元词袋模型能够解决这个问题
- 为什么BOW
- 简单, 计算快
- 特征为0-1取值, 可是用NB-LR + L2
文本特征选择
- 卡方检验
- 信息增益
- 互信息
思考
在使用LR进行文本分类的时候, 最主要的是如何解决特征之间的非线性关系
- 多元特征模型
- boosting
- nb-norm
- 去除非线性特征
参考:
坐标下降法
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
文本特征选择