1.逻辑回归与线性回归的联系与区别
线性回归 | 逻辑回归 |
---|---|
因变量是连续的<回归> | 因变量是离散值<分类> |
需要服从正太分布 | 没有特殊的分布要求 |
因变量与自变量需要有线性关系 | 需要引入Sigmoid函数 |
logistic回归与线性回归实际上有很多相同之处,最大的区别就在于他们的因变量不同,其他的基本都差不多,正是因为如此,这两种回归可以归于同一个家族,即广义线性模型(generalized linear model)。这一家族中的模型形式基本上都差不多,不同的就是因变量不同,如果是连续的,就是多重线性回归,如果是二项分布,就是logistic回归。logistic回归的因变量可以是二分类的,也可以是多分类的,但是二分类的更为常用,也更加容易解释。所以实际中最为常用的就是二分类的logistic回归。
2.逻辑回归的原理
逻辑回归模型是一种分类模型,用条件概率分布的形式表示 P(Y|X),这里随机变量 X 取值为 n 维实数向量,例如x=(x(1),x(2),…,x(n)),Y 取值为 0 或 1。即:
或:
假设有一个二分类问题,输出为y∈{0,1},二线性回归模型z=wTx+b是个实数值,我们希望有一个理想的阶跃函数来帮我什么实现z值到0/1值的转化,于是找到了Sigmoid函数来代替:
有了 Sigmoid 函数之后,由于其值取值范围在[0,1]。就可以将其视为类 1 的后验概率估计p(y=1|X)。说白了,就是如果有了一个测试点 x,那么就可以用Sigmoid函数算出来的结果当作该点 x 属于类别 1 的概率大小。
于是,非常自然地,我们把 Sigmoid 函数计算得到的值大于等于0.5的归为类别1,小于0.5的归为类别0
3.逻辑回归损失函数推导及优化
代价函数:
损失函数:
4.逻辑回归的优缺点
优点:1)适合需要得到一个分类概率的场景。2)计算代价不高,容易理解实现。LR在时间和内存需求上相当高效。它可以应用于分布式数据,并且还有在线算法实现,用较少的资源处理大型数据。3)LR对于数据中小噪声的鲁棒性很好,并且不会受到轻微的多重共线性的特别影响。(严重的多重共线性则可以使用逻辑回归结合L2正则化来解决,但是若要得到一个简约模型,L2正则化并不是最好的选择,因为它建立的模型涵盖了全部的特征。)
缺点:1)容易欠拟合,分类精度不高。2)数据特征有缺失或者特征空间很大时表现效果并不好。
5.样本不均衡问题解决办法
- 产生新数据型:过采样小样本(SMOTE),欠采样大样本。
过采样是通过增加样本中小类样本的数据量来实现样本均衡。其中较为简单的方式是直接复制小类样本,形成数量上的均衡。这种方法实现简单,但会由于数据较为单一而容易造成过拟合。 SMOTE过采样算法: 针对少数类样本的xi,求出其k近邻。随机选取k紧邻中一个样本记为xn。生成一个0到1之间的随机数r,然后根据Xnew = xi + r * (xn - xi)生成新数据。也可通过经过改进的抽样的方法,在少数类中加入随机噪声等生成数据。
欠采样大样本是通过减少多数类样本的样本数量来实现样本均衡。其中比较简单直接的方法就是随机去掉一些数据来减少多数类样本的规模,但这种方法可能会丢失一些重要的信息。还有一种方法就是,假设少数类样本数量为N,那就将多数类样本分为N个簇,取每个簇的中心点作为多数类的新样本,再加上少数类的所有样本进行训练。这样就可以保证了多数类样本在特征空间的分布特性。 - 对原数据的权值进行改变
通过改变多数类样本和少数类样本数据在训练时的权重来解决样本不均衡的问题,是指在训练分类器时,为少数类样本赋予更大的权值,为多数类样本赋予较小的权值。例如scikit-learn中的SVM算法,也称作penalized-SVM,可以手动设置权重。若选择balanced,则算法会设定样本权重与其对应的样本数量成反比。 - 通过组合集成方法解决
通过训练多个模型的方式解决数据不均衡的问题,是指将多数类数据随机分成少数类数据的量N份,每一份与全部的少数类数据一起训练成为一个分类器,这样反复训练会生成很多的分类器。最后再用组合的方式(bagging或者boosting)对分类器进行组合,得到更好的预测效果。简单来说若是分类问题可采用投票法,预测问题可以采用平均值。这个解决方式需要很强的计算能力以及时间,但效果较好,相当于结合了组合分类器的优势。 - 通过特征选择
在样本数据较为不均衡,某一类别数据较少的情况下,通常会出现特征分布很不均衡的情况。例如文本分类中,有大量的特征可以选择。因此我们可以选择具有显著区分能力的特征进行训练,也能在一定程度上提高模型的泛化效果。
6.Sklearn
- 参数
penalty: 一个字符串,制定了正则化策略。
dual:一个布尔值。如果为True,则求解对偶形式(只是在penalty=‘l2’ 且solver=‘liblinear’ 有对偶形式);如果为False,则求解原始形式。
C:一个浮点数,它指定了惩罚系数的倒数。如果它的值越小,则正则化越大。
fit_intercept:一个布尔值,制定是否需要b 值。如果为False,则不会计算b值(模型会假设你的数据已经中心化)。
intercept_scaling:一个浮点数,只有当solver=‘liblinear’ 才有意义。当采用 fit_intercept 时,相当于人造一个特征出来,该特征恒为 1,其权重为b 。在计算正则化项的时候,该人造特征也被考虑了。因此为了降低人造特征的影响,需要提供 intercept_scaling。
class_weight:一个字典或者字符串’balanced’。如果为字典:则字典给出了每个分类的权重,如
max_iter:一个整数,指定最大迭代数
random_state:一个整数或者一个RandomState实例,或者None。如果为整数,则它指定了随机数生成器的种子。如果为RandomState实例,则指定了随机数生成器。如果为None,则使用默认的随机数生成器。 - 返回值
coef_:权重向量。
intercept:b值。
n_iter_:实际迭代次数。 - 方法
fix(X,y[,sample_weight]):训练模型。
predict(X):用模型进行预测,返回预测值。
score(X,y[,sample_weight]):返回(X,y)上的预测准确率(accuracy)。
predict_log_proba(X):返回一个数组,数组的元素一次是 X 预测为各个类别的概率的对数值。
predict_proba(X):返回一个数组,数组元素一次是 X 预测为各个类别的概率的概率值。
sparsify():将系数矩阵转换为稀疏格式。
set_params(**params):设置此估计器的参数。
decision_function(X):预测样本的置信度分数。