逻辑回归

逻辑回归

常用于分类中将线性回归转换为概率值[0,1]

image

损失函数重新定义

image

当有多个样本时

image

代入

image

scikit_learn

image

使用逻辑回归会默认自动使用L2正则化,为了必须使用正则化,所以我们前面说的正则化前的比重参数就被删除了, 转而为之的是超参数C,这个C是乘以损失函数的。也就是让我们用来调节损失函数的比重,但正则化一定会存在

from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler

def PolynomialLogisticRegression(degree, C, penalty='l2'):
    return Pipeline([
        ('poly', PolynomialFeatures(degree=degree)),
        ('std_scaler', StandardScaler()),
        ('log_reg', LogisticRegression(C=C, penalty=penalty))#C为损失函数权重,penalty为使用的正则算法
    ])

poly_log_reg = PolynomialLogisticRegression(degree=2,C=0.1)
poly_log_reg.fit(X_train, y_train)
poly_log_reg.score(X_train, y_train)

也可以单独使用

from sklearn.multiclass import OneVsRestClassifier

ovr = OneVsRestClassifier(log_reg)
ovr.fit(X_train, y_train)
ovr.score(X_test, y_test)

逻辑回归解决多分类

  • OvR (One vs Rest)

    image

    一针对剩余。原理是 在有多分类的情况下,先将多分类问题转变为2分类问题。具体:将其中一分类变为1,其余都为0.再使用逻辑回归,看样本属于1的概率。之后以此类推,所有分类都使用一针对剩余。最终会得到每个样本的对应概率,选择最大的就为分类值

      import numpy as np
      import matplotlib.pyplot as plt
      from sklearn import datasets
      from sklearn.linear_model import LogisticRegression
      
      iris = datasets.load_iris()
      X = iris.data
      y = iris.target 
      from sklearn.model_selection import train_test_split
      
      X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)
      
      log_reg = LogisticRegression()#默认使用OvR
      log_reg.fit(X_train, y_train)
      log_reg.score(X_test, y_test)
    
  • OvO (One vs One)

    image

    一对一。原理是 在有多分类的情况下,将数据分割成两两分类的情况。转换为2分类后使用逻辑回归。判断样本在哪个分类中的概率最大,选择最大的分类值。这种方式事件复杂度更高

    log_reg = LogisticRegression(multi_class="multinomial", solver="newton-cg")#multi_class默认使用OvR,这里使用OvO。当使用OvO时,因为scikit-learn不是使用梯度下降,是使用更快的算法,所以这里要重新指定算法来计算OvO

也可以单独使用

from sklearn.multiclass import OneVsOneClassifier

ovo = OneVsOneClassifier(log_reg)
ovo.fit(X_train, y_train)
ovo.score(X_test, y_test)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容