精华内容
下载资源
问答
  • 1.任务名称:实验-sklearn-user-guide 1.1.11 2.使用包:sklearn(里面提供了许多机器学习算法的详细教程和案例,需要...逻辑回归(Logistic regression 或logit regression),即逻辑模型(英语:Logit model,也...

    1.任务名称:实验-sklearn-user-guide 1.1.11

    2.使用包:sklearn(里面提供了许多机器学习算法的详细教程和案例,需要多多掌握)

    3.资料地址:http://sklearn.apachecn.org/#/docs/79

    逻辑回归

    逻辑回归(Logistic regression 或logit regression),即逻辑模型(英语:Logit model,也译作“评定模型”、“分类评定模型”)是离散选择法模型之一,属于多重变量分析范畴,是社会学、生物统计学、临床、数量心理学、计量经济学、市场营销等统计实证分析的常用方法。——维基百科

    虽然叫做回归其实是个分类模型。逻辑回归实际上是用sigmoid函数将线性回归进行了归一化,把输出值压缩到0-1之间,这个值代表的是发生的概率。

    逻辑函数

    逻辑函数(sigmoid函数)定义的累计分布又叫逻辑斯蒂分布,对分布函数求导得到概率密度函数。公式如下。[1]

    [2]

    不同参数对逻辑分布的影响

     

    图1 不同参数对逻辑分布的影响

    注:图中s就是统计中的γ。

    逻辑回归

    逻辑回归是为了解决分类问题(主要是二分类),根据一些已知的训练集训练好模型,再对新的数据进行预测属于哪个类。比如用户是否点击某个广告、肿瘤是否是恶性的、用户的性别,等等。

    逻辑回归需要找到分类概率P(Y=1)与输入向量x的直接关系,然后通过比较概率值来判断类别,这就用到上文中逻辑函数。它令决策函数的输出值$w^Tx+b$等于概率值比值取对数$log\frac{P(Y=1|x)}{1-P(Y=1|x)}$,求解这个式子得到了输入向量x下导致产生两类的概率为:

    其中w称为权重,b称为偏置,其中的w⋅x+b看成对x的线性函数。然后对比上面两个概率值,概率值大的就是x对应的类。

    对逻辑回归的定义,输出Y=1的对数几率是由输入x的线性函数表示的模型,即逻辑斯蒂回归模型(李航.《统计机器学习》)。

    直接考察公式1可以得到另一种对逻辑回归的定义,线性函数的值越接近正无穷,概率值就越接近1;线性值越接近负无穷,概率值越接近0,这样的模型是逻辑斯蒂回归模型(李航.《统计机器学习》)。

    因此逻辑回归的思路是,先拟合决策边界(这里的决策边界不局限于线性,还可以是多项式),再建立这个边界与分类的概率联系,从而得到了二分类情况下的概率。这里有个非常棒的博文[6]推荐,阐述了逻辑回归的思路。

    Logistic回归模型的适用条件

    1. 因变量为二分类的分类变量或某事件的发生率,并且是数值型变量。但是需要注意,重复计数现象指标不适用于Logistic回归。

    2. 残差和因变量都要服从二项分布。二项分布对应的是分类变量,所以不是正态分布,进而不是用最小二乘法,而是最大似然法来解决方程估计和检验问题。

    3. 自变量和Logistic概率是线性关系

    4. 各观测对象间相互独立。

    原理:如果直接将线性回归的模型扣到Logistic回归中,会造成方程二边取值区间不同和普遍的非直线关系。因为Logistic中因变量为二分类变量,某个概

    率作为方程的因变量估计值取值范围为0-1,但是,方程右边取值范围是无穷大或者无穷小。所以,才引入Logistic回归。

    Logistic回归实质:发生概率除以没有发生概率再取对数。就是这个不太繁琐的变换改变了取值区间的矛盾和因变量自变量间的曲线关系。究其原因,是发生和未发生的概率成为了比值,这个比值就是一个缓冲,将取值范围扩大,再进行对数变换,整个因变量改变。不仅如此,这种变换往往使得因变量和自变量之间呈线性关系,这是根据大量实践而总结。所以,Logistic回归从根本上解决因变量要不是连续变量怎么办的问题。还有,Logistic应用广泛的原因是许多现实问题跟它的模型吻合。例如一件事情是否发生跟其他数值型自变量的关系。[3]

    求解/优化

    数学模型的形式确定之后,接下来就要求解参数。统计学中常用的一种方法是最大似然估计,即找到一组参数,使得在这组参数下,我们的数据的似然度(概率)越大。

    在逻辑回归中,似然度为:

    取对数得到对数似然度:

    逻辑回归中最大化似然函数和最小化log损失函数实际上是等价的。

    损失函数(loss function)是用来估量你模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好[4]。常用的损失函数有0-1损失,log损失,hinge损失等。

    优化的主要目标是找到一个方向,参数朝这个方向移动之后使得似然函数的值能够减小,这个方向往往由一阶偏导或者二阶偏导各种组合求得。逻辑回归的优化方法有很多,比如梯度下降,牛顿法和BFGS。

    正则化

    过拟合:提高在训练数据上的表现时,在测试数据上反而下降,这就被称为过拟合。

    image

    图2 同样数据下欠拟合,拟合和过拟合

    所以要用正则化来限制模型参数,也叫惩罚项。正则化不是只有逻辑回归存在,它是一个通用的算法和思想,所以会产生过拟合现象的算法都可以使用正则化来避免过拟合。一般是在目标函数(经验风险)中加上一个正则化项Φ(w)。

    啊~~~数学太差,看到公式就脑仁疼。

    接下来去python里试试吧。

    SKlearn实现逻辑回归

    方法与参数

    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='liblinear', max_iter=100, 
              multi_class='ovr', verbose=0, warm_start=False, n_jobs=1)
    
    • penalty='l2' : 字符串‘l1’或‘l2’,默认‘l2’。
      • 用来指定惩罚的基准(正则化参数)。只有‘l2’支持‘newton-cg’、‘sag’和‘lbfgs’这三种算法。
      • 如果选择‘l2’,solver参数可以选择‘liblinear’、‘newton-cg’、‘sag’和‘lbfgs’这四种算法;如果选择‘l1’的话就只能用‘liblinear’算法。
    • dual=False : 对偶或者原始方法。Dual只适用于正则化相为l2的‘liblinear’的情况,通常样本数大于特征数的情况下,默认为False。
    • C=1.0 : C为正则化系数λ的倒数,必须为正数,默认为1。和SVM中的C一样,值越小,代表正则化越强。
    • fit_intercept=True : 是否存在截距,默认存在。
    • intercept_scaling=1 : 仅在正则化项为‘liblinear’,且fit_intercept设置为True时有用。
    • solver='liblinear' : solver参数决定了我们对逻辑回归损失函数的优化方法,有四种算法可以选择。
      • a) liblinear:使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。
      • b) lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
      • c) newton-cg:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
      • d) sag:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候。

    从上面的描述可以看出,newton-cg、lbfgs和sag这三种优化算法时都需要损失函数的一阶或者二阶连续导数,因此不能用于没有连续导数的L1正则化,只能用于L2正则化。而liblinear通吃L1正则化和L2正则化。
    同时,sag每次仅仅使用了部分样本进行梯度迭代,所以当样本量少的时候不要选择它,而如果样本量非常大,比如大于10万,sag是第一选择。但是sag不能用于L1正则化,所以当你有大量的样本,又需要L1正则化的话就要自己做取舍了。要么通过对样本采样来降低样本量,要么回到L2正则化。
    但是liblinear也有自己的弱点!我们知道,逻辑回归有二元逻辑回归和多元逻辑回归。对于多元逻辑回归常见的有one-vs-rest(OvR)和many-vs-many(MvM)两种。而MvM一般比OvR分类相对准确一些。而liblinear只支持OvR,不支持MvM,这样如果我们需要相对精确的多元逻辑回归时,就不能选择liblinear了。也意味着如果我们需要相对精确的多元逻辑回归不能使用L1正则化了。

    总结:

    正则化 算法 适用场景
    L1 liblinear liblinear适用于小数据集;如果选择L2正则化发现还是过拟合,即预测效果差的时候,就可以考虑L1正则化;如果模型的特征非常多,希望一些不重要的特征系数归零,从而让模型系数稀疏化的话,也可以使用L1正则化。
    L2 liblinear libniear只支持多元逻辑回归的OvR,不支持MvM,但MVM相对精确。
    L2 lbfgs/newton-cg/sag 较大数据集,支持one-vs-rest(OvR)和many-vs-many(MvM)两种多元逻辑回归。
    L2 sag 如果样本量非常大,比如大于10万,sag是第一选择;但不能用于L1正则化。

    来源:http://jishu.y5y.com.cn/cherdw/article/details/54891073

    • multi_class='ovr' : 分类方式。官网有个对比两种分类方式的例子:链接地址
      • ovr即one-vs-rest(OvR),multinomial是many-vs-many(MvM)。如果是二元逻辑回归,ovr和multinomial并没有任何区别,区别主要在多元逻辑回归上。
      • ovr不论是几元回归,都当成二元回归来处理。mvm从从多个类中每次选两个类进行二元回归。如果总共有T类,需要T(T-1)/2次分类。
      • OvR相对简单,但分类效果相对略差(大多数样本分布情况)。而MvM分类相对精确,但是分类速度没有OvR快。
      • 如果选择了ovr,则4种损失函数的优化方法liblinear,newton-cg,lbfgs和sag都可以选择。但是如果选择了multinomial,则只能选择newton-cg, lbfgs和sag了。
    • class_weight=None : 类型权重参数。用于标示分类模型中各种类型的权重。默认不输入,即所有的分类的权重一样。
      • 选择‘balanced’自动根据y值计算类型权重。
      • 自己设置权重,格式:{class_label: weight}。例如0,1分类的er'yuan二元模型,设置class_weight={0:0.9, 1:0.1},这样类型0的权重为90%,而类型1的权重为10%。
    • random_state=None : 随机数种子,默认为无。仅在正则化优化算法为sag,liblinear时有用。
    • max_iter=100 : 算法收敛的最大迭代次数。
    • tol=0.0001 : 迭代终止判据的误差范围。
    • verbose=0 : 日志冗长度int:冗长度;0:不输出训练过程;1:偶尔输出; >1:对每个子模型都输出
    • warm_start=False : 是否热启动,如果是,则下一次训练是以追加树的形式进行(重新使用上一次的调用作为初始化)。布尔型,默认False。
    • n_jobs=1 : 并行数,int:个数;-1:跟CPU核数一致;1:默认值。

    LogisticRegression类的常用方法

    • fit(X, y, sample_weight=None)
      • 拟合模型,用来训练LR分类器,其中X是训练样本,y是对应的标记向量
      • 返回对象,self。
    • fit_transform(X, y=None, **fit_params)
      • fit与transform的结合,先fit后transform。返回X_new:numpy矩阵。
    • predict(X)
      • 用来预测样本,也就是分类,X是测试集。返回array。
    • predict_proba(X)
      • 输出分类概率。返回每种类别的概率,按照分类类别顺序给出。如果是多分类问题,multi_class="multinomial",则会给出样本对于每种类别的概率。
      • 返回array-like。
    • score(X, y, sample_weight=None)
      • 返回给定测试集合的平均准确率(mean accuracy),浮点型数值。
      • 对于多个分类返回,则返回每个类别的准确率组成的哈希矩阵。

    示例

    参考官网的例子,对鸢尾花数据进行逻辑回归。画图参考

    import numpy as np
    from sklearn import linear_model, datasets
    from sklearn.cross_validation import train_test_split
    
    # 1.加载数据
    iris = datasets.load_iris()
    X = iris.data[:, :2]  # 使用前两个特征
    Y = iris.target
    #np.unique(Y)   # out: array([0, 1, 2])
    
    # 2.拆分测试集、训练集。
    X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3, random_state=0)
    # 设置随机数种子,以便比较结果。
    
    # 3.标准化特征值
    from sklearn.preprocessing import StandardScaler
    sc = StandardScaler()
    sc.fit(X_train)
    X_train_std = sc.transform(X_train)
    X_test_std = sc.transform(X_test)
    
    # 4. 训练逻辑回归模型
    logreg = linear_model.LogisticRegression(C=1e5)
    logreg.fit(X_train, Y_train)
    
    # 5. 预测
    prepro = logreg.predict_proba(X_test_std)
    acc = logreg.score(X_test_std,Y_test)
    

    因为这里数据量小,结果准确率只有0.7。嘛,只是小小的示范一下怎么使用sklearn的逻辑回归方法。在训练模型之前,可以优化一下模型参数,用GridSearchCV()函数。


    参考文章:


    1. 【机器学习算法系列之二】浅析Logistic Regression

    2. Cmd Markdown 公式指导手册

    3. 78logistic 回归与线性回归的比较

    4. 机器学习-损失函数



    作者:ChZ_CC
    链接:https://www.jianshu.com/p/e51e92a01a9c
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    展开全文
  • 逻辑回归((logistic Regression),也称为对数几率回归。虽然名字上是回归,但实际是处理分类问题的算法(回归问题的输出是连续值,分类问题的输出是离散值)。 1.引入 (多元)线性回归——  广义线性回归—— ...

    名称:描述对数几率回归算法的过程。
    提交形式:简洁的文字描述算法的通用形式,文字打卡提交。

    逻辑回归((logistic  Regression),也称为对数几率回归。虽然名字上是回归,但实际是处理分类问题的算法(回归问题的输出是连续值,分类问题的输出是离散值)。

    1.引入

    (多元)线性回归—— 
    广义线性回归——  
    对数线性回归—— ,对数线性回归是广义线性模型的特例:

    但是,想要分类——0、1。参考单位阶跃函数,但是单位阶跃函数不连续,不能直接用作g(·)的逆函数,因此找到了对数几率函数(logistic function) 来代替单位阶跃函数。

    (图片来自西瓜书)

    如上图所示,将对数几率函数带入广义线性模型后,求一次ln,左边就是包含y的表达式,右边就是包含x的表达式,可以发现,等式左边的内容,“若将 y 视为样本 z 作为正例的可能性,则 1-y 是其反例可能性,两者的比值称为‘几率’,反映了x作为正例的相对可能性”(ps:之所以y视作x作为正例的可能性,我理解是因为等式中y与x呈正向相关,1-y作为分子与x呈反向相关)。对这个几率取对数,就得到了“对数几率”,简称“对率”。因此,本模型实际上是用线性回归模型的预测结果去逼近真实标记的对数几率。

    2、求解——如何求解模型中的w和b呢?

    然后可以通过“极大似然法”来估计w和b。

     

    3.对数几率回归算法在python库中的参数。

    api 参数 意义 备注
    LogisticRegression的parameters penalty  惩罚项  str类型,可选参数为l1和l2,默认为l2。用于指定惩罚项中使用的规范。newton-cg、sag和lbfgs求解算法只支持L2规范。L1G规范假设的是模型的参数满足拉普拉斯分布,L2假设的模型参数满足高斯分布,所谓的范式就是加上对参数的约束,使得模型更不会过拟合(overfit),但是如果要说是不是加了约束就会好,这个没有人能回答,只能说,加约束的情况下,理论上应该可以获得泛化能力更强的结果。 
     

    dual

    对偶或原始方法  bool类型,默认为False。对偶方法只用在求解线性多核(liblinear)的L2惩罚项上。当样本数量>样本特征的时候,dual通常设置为False。
      tol 停止求解的标准  float类型,默认为1e-4。就是求解到多少的时候,停止,认为已经求出最优解。 
      c 正则化系数λ的倒数  float类型,默认为1.0。必须是正浮点型数。像SVM一样,越小的数值表示越强的正则化。 
      fit_intercept  是否存在截距或偏差  bool类型,默认为True。 
      intercept_scaling    仅在正则化项为”liblinear”,且fit_intercept设置为True时有用。float类型,默认为1。
      class_weight  用于标示分类模型中各种类型的权重,可以是一个字典或者’balanced’字符串,默认为不输入,也就是不考虑权重,即为None。  如果选择输入的话,可以选择balanced让类库自己计算类型权重,或者自己输入各个类型的权重。举个例子,比如对于0,1的二元模型,我们可以定义class_weight={0:0.9,1:0.1},这样类型0的权重为90%,而类型1的权重为10%。如果class_weight选择balanced,那么类库会根据训练样本量来计算权重。某种类型样本量越多,则权重越低,样本量越少,则权重越高。当class_weight为balanced时,类权重计算方法如下:n_samples / (n_classes * np.bincount(y))。n_samples为样本数,n_classes为类别数量,np.bincount(y)会输出每个类的样本数,例如y=[1,0,0,1,1],则np.bincount(y)=[2,3]。
      random_state  随机数种子  int类型,可选参数,默认为无,仅在正则化优化算法为sag,liblinear时有用。 
      solver  优化算法选择参数  只有五个可选参数,即newton-cg,lbfgs,liblinear,sag,saga。默认为liblinear。solver参数决定了我们对逻辑回归损失函数的优化方法,有四种算法可以选择,分别是: liblinear:使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。 lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。 newton-cg:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。 sag:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候。 saga:线性收敛的随机优化算法的的变重。
      max_iter  算法收敛最大迭代次数  int类型,默认为10。仅在正则化优化算法为newton-cg, sag和lbfgs才有用,算法收敛的最大迭代次数。 
      multi_class 分类方式选择参数 str类型,可选参数为ovr和multinomial,默认为ovr。ovr即前面提到的one-vs-rest(OvR),而multinomial即前面提到的many-vs-many(MvM)。如果是二元逻辑回归,ovr和multinomial并没有任何区别,区别主要在多元逻辑回归上。 
      verbose  日志冗长度y int类型。默认为0。就是不输出训练过程,1的时候偶尔输出结果,大于1,对于每个子模型都输出。
      warm_start  热启动参数 bool类型。默认为False。如果为True,则下一次训练是以追加树的形式进行(重新使用上一次的调用作为初始化)。 
      n_jobs 并行数  int类型,默认为1。1的时候,用CPU的一个内核运行程序,2的时候,用CPU的2个内核运行程序。为-1的时候,用所有CPU的内核运行程序。

    参考:

    周志华《机器学习》

    https://blog.csdn.net/jark_/article/details/78342644

    http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression.decision_function%20%E9%80%BB%E8%BE%91%E5%9B%9E%E5%BD%92

    展开全文
  • 在线性回归中我们利用均方误差来衡量公式预测值和实际值之间的误差,但是在逻辑回归中,我们不能用均方误差来做,因为逻辑回归用均方误差写出的损失中包含sigmoid的平方,它是是非凸函数,极值不是最值,所以我们要...

    在前文中讲了线性回归,但是线性回归主要用作回归任务,如果要做分类任务,可以采用逻辑回归。虽然它们名字里都有回归俩字,但是逻辑回归是用来分类用的。。线性回归的方程返回值是个任意实值,想要用这个值对特征类别进行判定,我们无法找到一个稳定的阈值(因为返回值是任意的,无法找到一个固定的阈值来将两类分隔开)。如果我们能将这个值映射到0到1之间,那么我们就可以在(0, 1)范围内找一个固定值来分隔两类特征(这里有两个类别:0和1)。

    1. 逻辑回归

    逻辑回归中使用的映射函数是sigmoid函数,它能讲实值z映射到(0, 1)范围内并且函数处处可导,为使用梯度下降或者牛顿迭代提供了很好的性质。下图蓝色的曲线就是sigmoid函数


    假设线性回归为g(x) = wx+b,把它代入到f(z)里去,得到y = 。这样我们就能将g(x)的值映射到(0, 1)里。

    我们可以将y当作特征x属于类别1的概率,比如,输入样本的特征为xi,输出yi就是这个样本属于类别1的概率。逻辑回归最简单的用法就是当y>0.5时类别判定为1,否则为0。实际中可能需要调整这个阈值。


    2.参数学习

    得到逻辑回归的表达式后,我们就需要从样本中学习,来获得参数的具体值。在线性回归中我们利用均方误差来衡量公式预测值和实际值之间的误差,但是在逻辑回归中,我们不能用均方误差来做,因为逻辑回归用均方误差写出的损失中包含sigmoid的平方,它是是非凸函数,极值不是最值,所以我们要重新找方法来衡量这个误差。

    逻辑回归中使用的是似然函数来衡量预测值和实际值的契合程度。之前说过返回值y可以当作x属于1的概率,那么我们可以将它表示为条件概率:


    p(y=1|x)表示再已知特征x的情况下预测值为1的概率,那么1-y就是预测值为0的概率,也就是上式中的p(y=0|x)。我们学习的目的是要使预测类别等于实际类别的概率最大。那么怎么表示这种概率,假设第i个样本的标签为yi,那么预测值y和标签yi相等的概率p(y=yi)为:


    这样表示的话,当y=1,要使y=yi,yi也为1,那么‘+’右边的式子为0,就只有左边p(y=1|x;w)。当y=0同理。然后似然函数L就可以用p(y=yi)来表示:

    这个式子表示的就是m个样本的预测值和标记相等的总概率,学习参数的过程就是最大化L(w)因为p里面有e,所以用ln()可以简化后面的运算,如果我们用梯度下降来求,只需要在式子前面加个负号,这样最大化就变成最小化了。如果用牛顿法来求,直接套公式就行。


    展开全文
  • 任务标题:学习sklearn包中逻辑回归算法的使用 任务简介:实验-sklearn-user guide 1.1.11 任务详解: 本节的主要任务是,了解sklearn包中逻辑回归算法的使用。逻辑回归算法大家基本了解了,简单使用大家也用过了。 ...

    要求

    知识点

    1. 分类模型
    2. 使用逻辑函数对描述单个试验的可能结果的概率进行建模
    函数

    Logistic回归实现于LogisticRegression。此实现可以使用可选的二进制,一对多静态或多项逻辑回归1\ell_12\ell_2或弹性网络正规化。(使用正则化增加使模型更好训练,增加泛化性,提高数值稳定性;正则化相当于将C设置为非常高的值)
    在这里插入图片描述 1)“liblinear”使用坐标下降(CD)算法,并依赖于scikit-learn附带的优秀C ++ LIBLINEAR库。然而,在liblinear中实现的CD算法无法学习真正的多项(多类)模型; 相反,优化问题以“一对一”方式分解,因此为所有类训练单独的二元分类器。这发生在幕后,因此 LogisticRegression使用此解算器的实例表现为多类分类器。对于1\ell_1正则化sklearn.svm.l1_min_c允许计算C的下界,以便获得非“空”(所有特征权重为零)模型。
    2)“lbfgs”,“sag”和“newton-cg”解算器只支持2\ell_2正则化或没有正则化,并且发现对于某些高维数据更快收敛。multi_class使用这些求解器设置为“多项式”可以学习一个真正的多项Logistic回归模型[5],这意味着它的概率估计应该比默认的“one-vs-rest”设置更好地校准。
    3) “下垂”求解器使用随机平均梯度下降[6]。当样本数量和特征数量都很大时,它比大型数据集的其他求解器更快。
    4)“saga”解算器[7]是“sag”的变体,也支持非平滑penalty=“l1”。因此,这是稀疏多项Logistic回归的首选求解器。它也是唯一支持的解算器 penalty=“elasticnet”。
    5)“lbfgs”是一种近似于Broyden-Fletcher-Goldfarb-Shanno算法的优化算法[8],属于准牛顿方法。建议将“lbfgs”求解器用于小型数据集,但对于较大的数据集,其性能会受到影响。[9]
    在这里插入图片描述
    6)默认情况下,“lbfgs”求解器用于其稳健性。对于大型数据集,“saga”解算器通常更快。对于大型数据集,您还可以考虑使用SGDClassifier “log”丢失,这可能更快,但需要更多调整。

    1. 使用稀疏逻辑回归进行特征选择
      逻辑回归与 ℓ1惩罚产生稀疏模型,因此可用于执行特征选择,如基于L1的特征选择中所详述 。
    参数
    LogisticRegression(penalty='l2', dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='liblinear', max_iter=100, multi_class='ovr', verbose=0, warm_start=False, n_jobs=1)
    

    1.penalty:

    正则化项的选择。正则化主要有两种:L1和L2,LogisticRegression默认选择L2正则化。
    ‘liblinear’ 支持L1和L2,但‘newton-cg’, ‘sag’ 和‘lbfgs’ 只支持L2正则化。

    2.dual:bool(True、False), default:False

    如果为True,则求解对偶形式,只有在penalty=‘l2’ 且solver=‘liblinear’ 时有对偶形式;通常样本数大于特征数的情况下,默认为False,求解原始形式。

    3.tol : float, default:1e-4

    停止标准,误差不超过tol时,停止进一步的计算。

    4.C :float,default:1.0

    正则化强度(正则化系数λ)的倒数; 必须是大于0的浮点数。 与支持向量机一样,较小的值指定更强的正则化,通常默认为1。

    5.fit_intercept:bool(True、False),default:True

    是否存在截距,默认存在。

    6.intercept_scaling :float,default :1.0

    仅在使用solver为“liblinear”且fit_intercept=True时有用。 在这种情况下,x变为[x,intercept_scaling],即具有等于intercept_scaling的常数值的“合成”特征被附加到实例矢量。 截距变成了intercept_scaling * synthetic_feature_weight. 注意: 合成特征权重与所有其他特征一样经受l1 / l2正则化。 为了减小正则化对合成特征权重(并因此对截距)的影响,必须增加intercept_scaling。相当于人造一个特征出来,该特征恒为 1,其权重为b。

    7.class_weight :dict or ‘balanced’,default:None

    class_weight参数用于标示分类模型中各种类型的权重,可以不输入,即不考虑权重,或者说所有类型的权重一样。如果选择输入的话,可以选择balanced让类库自己计算类型权重,或者我们自己输入各个类型的权重,比如对于0,1的二元模型,我们可以定义class_weight={0:0.9, 1:0.1},这样类型0的权重为90%,而类型1的权重为10%。
    如果class_weight选择balanced,那么类库会根据训练样本量来计算权重。某种类型样本量越多,则权重越低,样本量越少,则权重越高。当class_weight为balanced时,类权重计算方法如下:n_samples / (n_classes * np.bincount(y))

    8.random_state:

    int,RandomState instance or None,optional,default:None
    在随机数据混洗时使用的伪随机数生成器的种子。 如果是int,则random_state是随机数生成器使用的种子; 如果是RandomState实例,则random_state是随机数生成器; 如果为None,则随机数生成器是np.random使用的RandomState实例。 在求solver是’sag’或’liblinear’时使用。

    9.solver :‘newton-cg’,‘lbfgs’,‘liblinear’,‘sag’,‘saga’,default:liblinear

    liblinear:使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。
    lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
    newton-cg:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
    sag:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候。
    saga:线性收敛的随机优化算法。
    对于小型数据集,‘liblinear’是一个不错的选择,而’sag’和’saga’对于大型的更快。对于多类问题,只有’newton-cg’,‘sag’,'saga’和’lbfgs’处理多项损失;'liblinear’仅限于一项损失。 ‘newton-cg’,'lbfgs’和’sag’只处理L2惩罚,而’liblinear’和’saga’处理L1惩罚。“sag”和“saga”快速收敛仅在具有大致相同比例的要素上得到保证, 可以使用sklearn.preprocessing中的缩放器预处理数据。

    10.max_iter:int ,default:100

    仅适用于newton-cg,sag和lbfgs求解器。 求解器收敛的最大迭代次数。

    11.multi_class:str,{‘ovr’, ‘multinomial’},default:‘ovr’

    ‘ovr’ :采用 one-vs-rest 策略,‘multinomial’:直接采用多分类逻辑回归策略。
    多类选项可以是’ovr’或’multinomial’。 如果选择的选项是’ovr’,那么二进制问题适合每个标签。 另外,最小化损失是整个概率分布中的多项式损失拟合。 不适用于liblinear解算器。

    12.verbose:int,default:0

    对于liblinear和lbfgs求解器,将verbose设置为任何正数以表示详细程度。用于开启/关闭迭代中间输出的日志。

    13.warm_start:bool(True、False),default:False

    如果为True,那么使用前一次训练结果继续训练,否则从头开始训练。对于liblinear解算器没用。

    14.n_jobs:int,default:1

    如果multi_class =‘ovr’,则在对类进行并行化时使用的CPU数量。 无论是否指定’multi_class’,当solver设置为’liblinear’时,都会忽略此参数。 如果给定值-1,则使用所有CPU。

    参考文献:

    [5] Christopher M. Bishop:模式识别和机器学习,第4.3.4章
    [6] Mark Schmidt,Nicolas Le Roux和Francis Bach:用随机平均梯度最小化有限和。
    [7] Aaron Defazio,Francis Bach,Simon Lacoste-Julien:SAGA:一种支持非强凸复合目标的快速增量梯度法。
    [8] https://en.wikipedia.org/wiki/Broyden–Fletcher–Goldfarb–Shanno_algorithm
    [9] “Lbfgs与其他求解器的性能评估”

    本文参考:

    1. sklearn:https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html
    展开全文
  • 推荐阅读: 逻辑回归(LR);线性判别分析(LDA);类别不平衡(class-imbalance) 3.3对数几率回归(logistic regression,逻辑回归) 关键词:逻辑回归,对数几率回归(logistic regression) 这里先说一下逻辑...
  • 相信很多同学在学习对数几率回归(逻辑回归)时,都会有很多困惑,比如: 1.对数几率回归(逻辑回归)到底是用来干嘛的? 2.sigmoid函数是用来干嘛的? 3.z值为什么表示样本点属于其中一个类别的概率? 4.预测出的y...
  • 机器学习1——逻辑回归欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左...
  • 逻辑回归求解方法 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~ 0. 前言 逻辑回归,根据数据对分类边界进行回归,以此分类。 y=σ(wTx+b)=11+exp⁡(−wTx+b) y=\sigma(w^Tx+b)=\...
  • 只需找到一个单调可微函数将分类任务的真实标记y与线性回归模型的预测值联系起来。一般采用单位阶跃函数,但是这个函数不连续,所以找一个可以近似替代的函数,这个函数就是对数几率函数。是一种sigmoid(s型)函数y视...
  • 逻辑回归

    2019-07-17 13:50:14
    逻辑回归一、什么是逻辑回归?二、决策边界三、多项式中的逻辑回归四、逻辑回归中使用正则化 一、什么是逻辑回归逻辑回归假设样本服从伯努利分布,利用极大似然估计,运用梯度下降法进行求解,从而达到将样本二...
  • logistic回归算法描述: 2. 对数几率回归(logistic regression) Logistic回归目的是从特征学习出一个0/1分类模型,而这个模型是将特性的线性组合作为自变量,由于自变量的取值范围是负无穷到正无穷。因此,...
  • 逻辑回归与线性回归算法梳理

    千次阅读 2019-03-31 16:19:11
    逻辑回归算法梳理逻辑回归与线性回归算法1线性回归2 逻辑回归2.1 逻辑回归原理2.2 逻辑回归损失函数2.3 简化后的逻辑回归损失函数3 联系与区别3.1 联系3.2 区别4 正则化与模型评估指标4.1 正则化作用4.2 线性回归...
  • 以下是南非男性心脏病的一个逻辑回归例子: 传统的逻辑回归的代码应该将偏置加入到X中,再在weights的首位加个1,方便矩阵运算。我这里是分开算得 import pandas as pd import numpy as np import random import ...
  • 本文主要是对周志华的西瓜书机器学习第三章内容线性模型的学习记录。首先给出线性模型的一般形式,然后从回归问题到二分类问题,再到多分类问题,最后是分类问题中出现的类别不平衡问题进行了阐述。回归问题分为一元...
  • 逻辑回归算法梳理

    千次阅读 2019-04-01 21:40:48
    逻辑回归算法梳理1.逻辑回归与线性回归的联系与区别2.逻辑回归的原理3.逻辑回归损失函数推导及优化4.正则化与模型评估指标5.逻辑回归的优缺点6.样本不均衡问题解决办法7.sklearn参数参考文档 1.逻辑回归与线性回归的...
  • 本章将讨论尽可能简单的白话的逻辑回归(尽量降低数学要求)。我自己琢磨了好多天,也没有琢磨透彻,只能记录一下自己的理解和思路。 1.什么是分类任务? 以西瓜书中的西瓜问题为例,我们走到水果店想要买一个西瓜。...
  • 文章目录 数据集 代码 分析 数据集 | 代码 import matplotlib.pyplot as ...70.588235% w1 = 3.156135,w2 = 12.541667,b = -4.431267 散点图: 可以看出此图并不便于进行二分类,这也是逻辑回归在此数据集表现不佳的原因
  • 文章目录1 逻辑回归算法简介2 算法原理2.1 线性回归2.2 逻辑回归2.3 损失函数(cost function)2.4 梯度下降法(1) 直观理解(2) 梯度下降法——代数法(3) 梯度下降的种类2.5 线性回归与逻辑回归的区别3 实验3.1 逻辑...
  • 本文内容:主要梳理从线性回归模型到逻辑回归模型转换思路,以及求解逻辑回归相关参数的过程。重在梳理思路,不提供公式推导。 线性回归模型 线性回归模型: y=wTx+b(1)y=w^Tx+b \tag{1}y=wTx+b(1) 广义线性模型 ...
  • 2、LR-逻辑回归

    2018-06-15 14:31:17
    对于输出的y值,大于阈值就是正类,小于它就是负类,而逻辑回归就是让输出的值等于几率的对数值,就是这个公式:2、看西瓜书3、逻辑回归假设数据服从伯努利分布(两点分布),通过极大化似然函数的方法,运用...
  • 【任务2 - 逻辑回归算法梳理】时长:2天 1、逻辑回归与线性回归的联系与区别 2、 逻辑回归的原理 3、逻辑回归损失函数推导及优化 4、 正则化与模型评估指标 5、逻辑回归的优缺点 6、样本不均衡问题解决办法 7、...
  • 02 逻辑回归Logistic Regression(对数几率回归) 2.1 逻辑回归和线性回归 二者都使用极大似然法来对训练样本进行建模。 在求解超参数的过程中,都可以使用梯度下降的方法。 逻辑回归处理的是分类问题,线性...
  • 监督学习--逻辑回归

    2020-08-04 22:23:05
    逻辑回归西瓜书中又被称为对数几率回归。进行分类的主要思想是:根据现有数据对分类边界线建立回归公式,以此进行分类。训练分类器时的做法就是寻找最佳拟合参数,使用的是最优化算法。 适合数据类型:数值型 优点...
  • 对数线性回归与广义线性模型对数线性回归广义线性模型对数几率回归对数几率函数表现形式loss补充 1.线性回归 学得 f(xi)=ωTxi+b,使得f(x)≃yi f(x_{i})=\omega ^ T x_{i} + b,使得f(x)\simeq y_{i} f(xi​)=ωTxi...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,119
精华内容 447
关键字:

西瓜书逻辑回归