逻辑回归

  1. 线性回归与逻辑回归
    线性回归中回归的目标是使得回归值接近我们的标签,如果我们想让回归的目标为标签的衍生物呢?如对数线性回归lny=wTx+blny=wTx+b      lny=w^Tx+blny=wTx+b。此时实际上是让ewTx+bewTx+b      e{wTx+b}ewTx+b逼近yy      yy,是在求取输入空间到输出空间的非线性函数映射,将线性回归的预测值通过联系函数与真实的预测值联系在了一起。
    预测值是一个二值结果{0,1},通过何种联系函数能将线性回归的预测值变为二值结果呢?Sigmoid函数便是很理想的一个函数,连续且可微,值域为(0,1)
    (0,1),将Sigmoid作为联系函数后的结果与0.5进行大小比较便可得到一个二值的结果。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.正则化与模型评估指标
逻辑回归中的正则项与线性回归的正则项相同,包括L1正则项和L2正则项,L1正则使得参数中有更多的0,起到了稀疏的作用;L2正则化会使得模型的参数都比较小,限制某一个参数权值过大,可以很好的防止过拟合。
分类问题中最常用的一个评估指标是准确率,准确率等于分类正确的样本数除以总样本数。但是在很多类别不均衡问题中,用准确率去衡量算法效果很不理想,下面会详细讲解类别不均衡问题以及它常见的解决办法。

3.样本不均衡问题
3.1 获得更多数据集
首先想到能否获得更多数据,尤其是小类(该类样本数据极少)的数据,更多的数据往往能得到更多的分布信息。3.2
对数据集进行重采样
过采样(over-sampling),对样本较少的类别数据进行过采样来增加小类的数据样本个数,即采样的个数大于该类样本的个数。
欠采样(under-sampling),对样本较多的类别数据样本进行欠采样来减少大类的数据样本个数,即采样的个数少于该类样本的个数。
重采样算法容易实现,效果也不错,但可能增大模型的偏差(Bias),因为放大或者缩小某些样本的影响相当于改变了原数据集的分布。
3.2 人造样本
一种简单的产生人造样本的方法是:在该类下所有样本的每个属性特征的取值空间中随机选取一个组成新的样本,即属性值随机采样。此方法多用于小类中的样本,不过它可能破坏原属性的线性关系。如在图像中,对一幅图像进行扭曲得到另一幅图像,即改变了原图像的某些特征值,但是该方法可能会产生现实中不存在的样本。主要使用的方法叫SMOTE(Synthetic Minority Over-sampling Technique)。SMOTE是一种过采样算法,它构造新的小类样本而不是产生小类中已有的样本的副本。它基于距离度量选择小类别下两个或者更多的相似样本,然后选择其中一个样本,并随机选择一定数量的邻居样本对选择的那个样本的一个属性增加噪声,每次处理一个属性。这样就构造了许多新数据。
3.3 改变分类算法
(1)使用代价函数时,可以增加小类样本的权值,降低大类样本的权值(这种方法其实是产生了新的数据分布,即产生了新的数据集),从而使得分类器将重点集中在小类样本身上。刚开始,可以设置每个类别的权值与样本个数比例的倒数,然后可以使用过采样进行调优。
(2)可以把小类样本作为异常点(outliers),把问题转化为异常点检测问题(anomaly detection)。此时分类器需要学习到大类的决策分界面,即分类器是一个单个类分类器(One Class Classifier)

4.逻辑回归优缺点
LR是解决工业规模问题最流行的算法。在工业应用上,如果需要分类的数据拥有很多有意义的特征,每个特征都对最后的分类结果有或多或少的影响,那么最简单最有效的办法就是将这些特征线性加权,一起参与到决策过程中。比如预测广告的点击率,从原始数据集中筛选出符合某种要求的有用的子数据集等等。 优点:1)适合需要得到一个分类概率的场景。2)计算代价不高,容易理解实现。LR在时间和内存需求上相当高效。它可以应用于分布式数据,并且还有在线算法实现,用较少的资源处理大型数据。3)LR对于数据中小噪声的鲁棒性很好,并且不会受到轻微的多重共线性的特别影响。(严重的多重共线性则可以使用逻辑回归结合L2正则化来解决,但是若要得到一个简约模型,L2正则化并不是最好的选择,因为它建立的模型涵盖了全部的特征。) 缺点:1)容易欠拟合,分类精度不高。2)数据特征有缺失或者特征空间很大时表现效果并不好。

5.sklearn 参数
sklearn中LR的调用如下形式:
class sklearn.linear_model.LogisticRegression(penalty=’l2’, dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver=’warn’, max_iter=100, multi_class=’warn’, verbose=0, warm_start=False, n_jobs=None)
penalty:惩罚项,即用L1正则项或是L2正则项,默认是L2正则项,且对应下面的solver是lbfgs,newton-cg,sag时,只能对应L2正则项
dual:默认值为False,对偶或原始方程式,仅当solver为liblinear且正则项为L2时为对偶方程式。当n_samples> n_features时,首选dual = False。
tol:迭代结束时的误差值范围
C:正则项系数,默认是1.0
fit_intercept:模型中是否存在截距,默认True即存在截距
intercept_scaling:布尔型,默认:False。当样本数>特征数时,令dual=False;用于liblinear解决器中L2正则化。
class_weight:用于设定不同类别在计算代价函数时的权重,以“{class_label: weight}”形式中的类相关联的权重,默认为none,在样本不均衡问题会考虑设置一个例如{0:1,1:5}这样的值
random_state:随机种子,默认为none。在随机数据混洗时使用的伪随机数生成器的种子。如果是int,则random_state是随机数生成器使用的种子;如果是RandomState实例,则random_state是随机数生成器;如果为None,则随机数生成器是np.random使用的RandomState实例。在solver是’sag’或’liblinear’时使用。
solver:目标函数所用的优化方法,可以是liblinear,lbfgs,newton-cg,sag
max_iter:最大迭代次数,默认是100
multi_class:字符串型,{ovr’, ‘multinomial’,‘auto’’},默认:‘ovr’;如果选择的选项是“ovr”,那么一个二进制问题适合于每个标签,否则损失最小化就是整个概率分布的多项式损失。若solver为liblinear该参数无效。
verbose:对于solver取值为’liblinear’和’lbfgs’求解器,verbose可以设置为任何正数。
warm_start:默认为False,若为True,将上一次训练结束的参数作为本次训练初始化参数;若为False,则清除上一次的参数随机初始化;若solver为’liblinear’该参数无效。
n_jobs:默认是none,表示1;如果multi_class=‘ovr’ ,则为在类上并行时使用的CPU核数。无论是否指定了multi_class,当将’ solver ’ '设置为’liblinear’时,将忽略此参数。如果给定值为-1,则使用所有核。
逻辑回归算法的具体调用可以参考下图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值