逻辑回归以及sklearn.linear_model.LogisticRegression的使用

一、逻辑回归

1、基本概念

   (1)分类算法:通过对训练样本进行学习,得到从样本特征到标签之间的映射关系,也就是假设函数,然后通过该假设函数对新数据进行分类。
   (2)广义线性模型:g(y) = wx+b,其中g称为联系函数,当g=lny的时候为对数线性回归,当g为y的时候为线性回归。当g为ln(y/1-y)的时候就是对数几率回归,也称为逻辑回归。y为x为正例的可能性y = P(y=1|x),y/1-y是x称为正例的相对可能性,所以ln(y/1-y)就是对数几率。广义线性模型的参数估计通常是加权最小二乘法或极大似然法。
   (3)逻辑回归的由来:单位阶跃函数并不连续,无法作为联系函数,我们使用对数几率函数(logistic function)替代它,它是任意可导的凸函数。联系起来后,可得y = 1/1+e-z。利用sigmoid函数 1/1+e-z将z= wx+b值转化为一个接近0或1的y值,直接对分类可能性建模,达到分类的目的。为了在将一个样本x的z带入到sigmoid函数后,它可以大概率地接近它所对应的真实的类标,当y值大于0.5时属于正例,当y小于0.5时属于反例,我们要训练出好的权重向量w和偏置b。
   (4)损失函数及其参数求解:线性回归的损失函时是误差平方和,但它是非凸函数,不利于求解。这里使用极大似然法求解,希望的是最大化每个样本属于其真实类标的概率,取负号,成为损失函数,是一个高阶可导连续凸函数,根据凸函数优化理论利用梯度下降或其他方法对其进行求解。推导过程如下:
在这里插入图片描述

二、sklearn.linear_model.LogisticRegression的使用

1、sklearn库提供了逻辑回归模型,链接地址

2、class sklearn.linear_model.LogisticRegression参数说明

   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, l1_ratio=None)

参数名解释
penalty惩罚项,str,默认l2正则化,可为’l1’ ,‘l2’,‘elasticnet’ 或 ‘none’。‘netton-cg’, ‘sag’, ‘lbfgs’只支持’l2’,因为’l1’正则化的损失函数不是连续可导的。调参时如果主要是为了解决过拟合,选择’l2’正则化就够了。若选择’l2’正则化还是过拟合,可考虑’l1’正则化。若模型特征非常多,希望一些不重要的特征系数归零,从而让模型系数化的话,可使用’l1’正则化。
dual选择目标函数为原始形式还是对偶形式,bool值,默认False,将原始函数等价转化为一个新函数,该新函数称为对偶函数。对偶函数比原始函数更易于优化。当n_samples> n_features时,首选dual = False。
tol优化算法停止的条件。float,默认0.0001,当迭代前后的函数差值小于等于tol时就停止。
C正则化系数。float,默认1.0,是正则化强度的逆,必须是正浮点数,其越小,正则化越强。
fit_interceptbool,默认True,指定逻辑回归模型中是否添加常数偏置项b。
intercept_scalingfloat,默认为1,仅在使用solver=“liblinear”,且fit_intercept=True时有用。 这时,x变为[x,self.intercept_scaling],将该常数值的附加到实例矢量后面,形成合成向量。注意! 合成特征权重与所有其他特征一样经受l1 / l2正则化。 为了减少正则化对合成特征权重(并因此对截距)的影响,必须增加intercept_scaling。
class_weightdict or ‘balanced’,默认为None,用于标示分类模型中各个类的权重。权重Weights与{class_label:weight}形式的类相关联。 如果没有给出,所有类的权重为1。“balanced”模式使用类标y的值来自动调整与输入数据中的类频率成反比的权重,如n_samples /(n_classes * np.bincount(y))。请注意,如果指定了sample_weight,这些权重将与sample_weight(通过fit方法传递)相乘。New in version 0.17: class_weight=’balanced’。
random_stateint, 默认为None,当打乱数据时,使用伪随机数种子。 如果是int,则random_state是随机数生成器产生的种子;如果是RandomState实例,则random_state是随机数生成器;如果为None,则随机数生成器是np.random使用的RandomState实例,只 在solver=='sag’或’liblinear’时使用。
solverstr: {‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’, ‘saga’},逻辑回归损失函数的优化方法。用于优化问题的算法。具体使用看官方文档。liblinear’:使用坐标轴下降法来迭代优化损失函数。‘lbfgs’:拟牛顿法的一种。利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数,推荐用于较小的数据集。‘newton-cg’:牛顿法的一种。‘sag’:随机平均梯度下降。每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候。saga 是 sag 的一类变体,它支持非平滑(non-smooth)的 L1 正则选项 penalty=“l1” 。因此对于稀疏多项式 logistic 回归 ,往往选用该求解器。
max_iter优化算法的迭代次数。默认100。
multi_class‘ovr’ or ‘multinomial’。一对多和多对多。如果选择的选项是’ovr’,那么在每个类上训练一个二分类问题。 对于“多项式”,最小化的损失是整个概率分布中的多项式损失拟合,即使数据是二分类的。 当solver ='liblinear’时,‘multinomial’不可用。 如果数据是二分类的,或者如果solver =‘liblinear’,‘auto’选择’ovr’,否则选择’multinomial’。
verboseint,控制是否print训练过程。对于liblinear和lbfgs求解器,将verbose设置为任何正数以表示详细程度。
warm_startbool,默认为False,设置为True时,重用上一次调用的解作为训练的初始化,否则,只需擦除以前的解。
n_jobsint or None,默认为None,用cpu的几个核来跑程序。如果multi_class =‘ovr’“,则在对类进行并行化时使用的CPU核心数。 无论是否指定了“multi_class”,当求解器设置为“liblinear”时,都会忽略此参数。’‘None’'表示1,除非在joblib.parallel_backend上下文中。 -1表示使用所有处理器。 有关详细信息。
l1_ratiofloat or None,默认为None,弹性网络混合参数,0 <= l1_ratio <= 1.仅在惩罚='elasticnet’时使用。 设置``l1_ratio = 0相当于使用penalty =‘l2’,而设置l1_ratio = 1相当于使用penalty =‘l1’。 对于0 <l1_ratio <1,惩罚是L1和L2的组合。

3、class sklearn.linear_model.LogisticRegression属性说明

   (1)classes_ : array, shape (n_classes, ),分类器已知的一个类标签列表。
   (2)coef_ : array, shape (1, n_features) or (n_classes, n_features),decision function中的特征系数,
   (3)intercept_ : array, shape (1,) or (n_classes,),加载decision function上的偏置intercept。
   (4)n_iter_ : array, shape (n_classes,) or (1, )所有分类的实际迭代次数。

4、class sklearn.linear_model.LogisticRegression方法说明

   (1)decision_function(self, X),预测样本置信度分数,样本的置信度得分是该样本与超平面的有符号距离。Parameters:X:类似数组的或稀疏矩阵的样本集,shape(n_samples,n_features)。Returns:array, 若为2分类,shape=(n_samples,) 否则shape= (n_samples, n_classes)。得到每个(sample, class) 样本,类标的置信度分数。在二分类中,self.classes_[1]>0表示该类要被预测了。
   (2)densify(self):将系数矩阵转换为numpy.ndarray。这是coef_的默认格式,并且是训练所必需的,因此只有在先前已经过稀疏化的模型上才需要调用此方法; 否则,这是一个无操作。Returns:
self : estimator。
   (3)fit(self, X, y, sample_weight=None):使用给定的训练数据训练模型。Parameters:X : {array-like, sparse matrix}, shape (n_samples, n_features),它是个训练向量。y : array-like, shape (n_samples,)与X相关联的目标向量。sample_weight : array-like, shape (n_samples,) optional,分配给各个样本的权重数组。 如果没有提供,则每个样品给定单位权重。Returns:类对象。
   (4)get_params(self, deep=True):获取估计的参数。Parameters:deep : boolean, optional,如果为True,将返回此估计器的参数并包含作为估算器的子对象。Returns:params:将字符串映射到any,就是映射到其值的参数名称。
   (5)predict(self, X):预测X中样本的类标。Parameters:X : array_like or sparse matrix, shape (n_samples, n_features),就是样本。Returns:C : array, shape [n_samples],是每个样本的预测列表构成的。
   (6)predict_log_proba(self, X):概率的log形式。所有类的返回估计值按类标签排序。Parameters:X : array-like, shape = [n_samples, n_features],Returns:T : array-like, shape = [n_samples, n_classes], 返回模型中每个类的样本的对数概率,其中类按self.classes_中的顺序排序。
   (7)predict_proba(self, X):类概率估计。所有类的返回估计值按类标签排序。对于multi_class多分类问题,如果multi_class设置为“multincial”,则softmax函数用于查找对每个类的预测概率。 否则使用一对其余的方法,即使用逻辑函数计算每个类假设为正的概率。 并在所有类中规范化这些值。Parameters:X : array-like, shape = [n_samples, n_features], Returns:T : array-like, shape = [n_samples, n_classes],返回模型中样本对每个类的概率,其中类按照它们的顺序排序self.classes_.。
   (8)score(self, X, y, sample_weight=None):返回给定测试数据和标签的平均准确度mean accuracy。在多标签分类中,这是一个哈希度量的子集准确度,因为需要为每个样本正确预测每个标签集。X : array-like, shape = (n_samples, n_features)测试样本集,y : array-like, shape = (n_samples) or (n_samples, n_outputs)对应的标签。sample_weight : array-like, shape = [n_samples],optional, 样本权重。Returns:score : float,Mean accuracy of self.predict(X) wrt. y.
   (9)set_params(self, params):为某估算器设置删除。
   (10)sparsify(self):将系数矩阵转换为稀疏格式。将coef_成员转换为scipy.sparse矩阵,对于L1正则化模型,它可以比通常的numpy.ndarray有更高的内存和存储效率。intercept_成员不会被转换。
   注意:对于非稀疏模型,即当coef_中没有多个零时,这实际上可能会增加内存使用量,因此请谨慎使用此方法。 根据经验,可以使用(coef_ == 0).sum()计算的零元素数量必须超过50%才能提供显着的优势。调用此方法后,在调用densify之前,进一步使用partial_fit方法(如果有)将无效。

4、其他的逻辑回归方法

   (1)对于建立在交叉验证上的逻辑回归,可以看这里LogisticRegressionCV
   (2)对于逐步训练的逻辑回归 (损失函数 parameter loss=“log”)时,设定 loss=“log” ,则随机梯度下降 SGDClassifier 拟合一个逻辑斯蒂回归模型,可以看这里SGDClassifier

5、阈值函数,损失函数,正则化

   该逻辑回归库中的阈值函数还是sigmoid函数,损失函数也是正常的,正则化也是正常的,目的是求解分隔超平面的参数,权重矩阵W和偏置向量b,就是利用一个的优化方法求解损失函数。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值