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

损失函数重新定义

当有多个样本时

代入

scikit_learn

使用逻辑回归会默认自动使用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)
网友评论