机器学习:逻辑回归(ovr与ovo)(代码片段)

volcao volcao     2022-12-18     260

关键词:

一、基础理解

  • 问题:逻辑回归算法是用回归的方式解决分类的问题,而且只可以解决二分类问题
  • 方案:可以通过改造,使得逻辑回归算法可以解决多分类问题;
  • 改造方法:
  1. OvR(One vs Rest),一对剩余的意思,有时候也称它为  OvA(One vs All);一般使用 OvR,更标准;
  2. OvO(One vs One),一对一的意思;
  • 改造方法不是指针对逻辑回归算法,而是在机器学习领域有通用性,所有二分类的机器学习算法都可使用此方法进行改造,解决多分类问题

 

 

二、原理

 1)OvR

  • 思想:n 种类型的样本进行分类时,分别取一种样本作为一类,将剩余的所有类型的样本看做另一类,这样就形成了 n二分类问题,使用逻辑回归算法对 n 个数据集训练出 n 个模型,将待预测的样本传入这 n 个模型中,所得概率最高的那个模型对应的样本类型即认为是该预测样本的类型
  • 技术分享图片
  • 时间复杂度:如果处理一个二分类问题用时 T,此方法需要用时 n.T;

 

 2)OvO

  • 思想: n 类样本中,每次挑出 2 种类型,两两结合,一共有 Cn2 种二分类情况,使用 Cn2 种模型预测样本类型,有 Cn2 个预测结果,种类最多的那种样本类型,就认为是该样本最终的预测类型;
  • 技术分享图片
  • 时间复杂度:如果处理一个二分类问题用时 T,此方法需要用时 Cn2 .T = [n.(n - 1) / 2] . T;

 

 3)区别

  • OvO 用时较多,但其分类结果更准确,因为每一次二分类时都用真实的类型进行比较,没有混淆其它的类别;

 

 

三、scikit-learn 中的逻辑回归

  • scikit-learn的LogisticRegression 算法内包含了:正则化、优化损失函数的方法、多分类方法等;
  • LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
              intercept_scaling=1, max_iter=100, multi_class=ovr, n_jobs=1,
              penalty=l2, random_state=None, solver=liblinear, tol=0.0001,
              verbose=0, warm_start=False)

    # LogisticRegression() 实例对象,包含了很多参数;

  • 不懂的要学会 看文档、看文档、看文档:help(算法、实例对象)

  1. C=1.0:正则化的超参数,默认为 1.0;

  2. multi_class=‘ovr‘:scikit-learn中的逻辑回归默认支持多分类问题,分类方式为 ‘OvR‘;
  3. solver=‘liblinear‘、‘lbfgs‘、‘sag‘、‘newton-cg‘:scikit-learn中优化损失函数的方法,不是梯度下降法;
  4. 多分类中使用 multinomial (OvO)时,只能使用 ‘lbfgs‘、‘sag‘、‘newton-cg‘ 来优化损失函数;
  5. 当损失函数使用了 L2 正则项时,优化方法只能使用 ‘lbfgs‘、‘sag‘、‘newton-cg‘;
  6. 使用 ‘liblinear‘ 优化损失函数时,正则项可以为 L1 和 L2 ;

 1)例(3 种样本类型):LogisticRegression() 默认使用 OvR

  • import numpy as np
    import matplotlib.pyplot as plt
    from sklearn import datasets
    
    iris = datasets.load_iris()
    # [:, :2]:所有行,0、1 列,不包含 2 列;
    X = iris.data[:,:2]
    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)
    
    from sklearn.linear_model import LogisticRegression
    
    log_reg = LogisticRegression()
    log_reg.fit(X_train, y_train)
    
    log_reg.score(X_test, y_test)
    # 准确率:0.6578947368421053

     

  • 绘制决策边界
    def plot_decision_boundary(model, axis):
        
        x0, x1 = np.meshgrid(
            np.linspace(axis[0], axis[1], int((axis[1]-axis[0])*100)).reshape(-1,1),
            np.linspace(axis[2], axis[3], int((axis[3]-axis[2])*100)).reshape(-1,1)
        )
        X_new = np.c_[x0.ravel(), x1.ravel()]
        
        y_predict = model.predict(X_new)
        zz = y_predict.reshape(x0.shape)
        
        from matplotlib.colors import ListedColormap
        custom_cmap = ListedColormap([#EF9A9A,#FFF59D,#90CAF9])
        
        plt.contourf(x0, x1, zz, linewidth=5, cmap=custom_cmap)
    
    plot_decision_boundary(log_reg, axis=[4, 8.5, 1.5, 4.5])
    # 可视化时只能在同一个二维平面内体现两种特征;
    plt.scatter(X[y==0, 0], X[y==0, 1])
    plt.scatter(X[y==1, 0], X[y==1, 1])
    plt.scatter(X[y==2, 0], X[y==2, 1])
    plt.show()

    技术分享图片

 

 2)使用 OvO 分类

  • log_reg2 = LogisticRegression(multi_class=multinomial, solver=newton-cg)
    # ‘multinomial‘:指 OvO 方法;
    
    log_reg2.fit(X_train, y_train)
    log_reg2.score(X_test, y_test)
    # 准确率:0.7894736842105263
    
    
    plot_decision_boundary(log_reg2, axis=[4, 8.5, 1.5, 4.5])
    plt.scatter(X[y==0, 0], X[y==0, 1])
    plt.scatter(X[y==1, 0], X[y==1, 1])
    plt.scatter(X[y==2, 0], X[y==2, 1])
    plt.show()

    技术分享图片

 

 3)使用所有分类数据

  • OvR
    X = iris.data
    y = iris.target
    
    X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)
    
    log_reg_ovr = LogisticRegression()
    log_reg_ovr.fit(X_train, y_train)
    log_reg_ovr.score(X_test, y_test)
    # 准确率:0.9473684210526315

     

  • OvO
    log_reg_ovo = LogisticRegression(multi_class=multinomial, solver=newton-cg)
    log_reg_ovo.fit(X_train, y_train)
    log_reg_ovo.score(X_test, y_test)
    # 准确率:1.0

 

 4)分析

  • 通过准确率对比可以看出,使用 OvO 方法改造 LogisticRegression() 算法,得到的模型准确率较高;

 

 

四、

 

python逻辑回归(logisticregressionlr)底层代码实现bgd梯度下降算法softmax多分类

...化参考前言逻辑回归模型(LogisticRegressionModel)是机器学习领域著名的分类模型。其常用于解决二分类(BinaryClassification)问题。但是在现实工作/学习/项目中,我们要解决的问题是经常多分类(MulticlassClass... 查看详情

机器学习逻辑回归算法(代码片段)

逻辑回归算法学习目标1.逻辑回归的介绍1.1逻辑回归的应用场景1.2逻辑回归的原理1.2.1输入1.2.2激活函数1.3损失以及优化1.3.1损失1.3.2优化1.4小结2.逻辑回归api介绍3.案例:癌症分类预测-良/恶性乳腺癌肿瘤预测3.1背景介绍3.... 查看详情

机器学习-逻辑回归与线性回归(代码片段)

logistic回归与线性回归实际上有很多相同之处,最大的区别就在于他们的因变量不同,其他的基本都差不多,正是因为如此,这两种回归可以归于同一个家族,即广义线性模型(generalized linear model)。这一家族中的模型形... 查看详情

机器学习逻辑回归分类评估方法(代码片段)

目录1分类评估方法1.1精确率与召回率1.1.1混淆矩阵1.1.2精确率与召回率1.2F1-score1.3分类评估报告api2ROC曲线与AUC指标2.1TPR与FPR2.2ROC曲线2.3AUC指标2.4AUC计算API2.5小结3ROC曲线的绘制3.1曲线绘制3.1.1序列一曲线绘制3.1.2序列二曲线绘制3.1.3... 查看详情

机器学习系列7基于python的scikit-learn库构建逻辑回归模型(代码片段)

课前测验本文所用数据免费下载在本文中,你将学习:0用于数据可视化的新库1逻辑回归原理及技术目录一、内容介绍二、理论知识1.分类与回归的区别2.逻辑回归与其他回归的区别3.逻辑回归的数学原理①逻辑回归基本原... 查看详情

逻辑回归|机器学习|分类算法(代码片段)

目录1.逻辑回归1.1逻辑回归原理1.2sigmoid函数2.相关代码2.1LogisticsRegression类2.2求解代码2.3输出结果3.直接调库使用1.逻辑回归1.1逻辑回归原理∙\\bullet∙逻辑回归又叫对数几率回归,是一种对数几率模型,可以求解二分类问... 查看详情

逻辑回归的特征筛选方法(代码片段)

...pimportpyechartsimportxlrd#withopen(r‘F:数据分析专用数据分析与机器学习ankloan.xls‘,‘rb‘)asf:file=r‘F:数据分析专用数据分析与机器学习ankloan.xls‘data=pd.read_excel(file)# 查看详情

我的机器学习之旅:回归与工程应用(代码片段)

内容:线性回归;逻辑回归,应用场景。一、线性回归有监督学习,根据学习样本x->y,学习一个映射f:X->Y(线性相关),输出预测结果y_i。最简单的例子:y=ax+b重要组成:训练数据集trainingset,学习算法learningalgorithm,损失函数lossfun... 查看详情

机器学习实验五基于多分类线性svm实现简易人机猜拳游戏(代码片段)

文章目录基于多分类线性SVM&mediapipe手势关键点实现简易人机猜拳游戏基于SMO优化的SVM分类算法完整实现版本SVM决策结果与数据集可视化多分类SVM实战:基于mediapipe手势关键点实现简易版人机猜拳二分类算法如何实现多分... 查看详情

机器学习笔记-基于逻辑回归的分类预测(代码片段)

基于逻辑回归的分类预测1逻辑回归的介绍和应用1.1逻辑回归的介绍逻辑回归(Logisticregression,简称LR)虽然其中带有"回归"两个字,但逻辑回归其实是一个分类模型,并且广泛应用于各个领域之中。虽然... 查看详情

机器学习算法:逻辑回归api介绍(代码片段)

学习目标知道逻辑回归api的用法sklearn.linear_model.LogisticRegression(solver='liblinear',penalty=‘l2’,C=1.0)solver可选参数:'liblinear','sag','saga','newton-cg','l 查看详情

机器学习--逻辑回归的原理与基础实现(代码片段)

文章目录概述一、逻辑回归二、小案例总结概述逻辑回归(LogisticRegression,简称LR),其实是一个很有误导性的概念,虽然它的名字中带有“回归”两个字,但是它最擅长处理的却是分类问题。LR分类器适用于各项广义上... 查看详情

机器学习逻辑回归对肿瘤预测(代码片段)

目录1逻辑回归api介绍2案例:癌症分类预测-良/恶性乳腺癌肿瘤预测2.1背景介绍2.2案例分析2.3代码实现2.4小结1逻辑回归api介绍sklearn.linear_model.LogisticRegression(solver=‘liblinear’,penalty=‘l2’,C=1.0)solver可选参数:‘libl... 查看详情

机器学习-9.逻辑回归(代码片段)

逻辑回归是将线性回归的结果通过sigmoid函数映射到0到1的区间内,而[0,1]对应百分比即概率,从而转化为分类问题逻辑回归只能解决二分类问题。公式:hθ(x)=g(θTx)=11+e−θTxh_\\theta(x)=g(\\theta^Tx)=\\frac11+... 查看详情

逻辑回归实例(代码片段)

  简介  Logistic回归是一种机器学习分类算法,用于预测分类因变量的概率。在逻辑回归中,因变量是一个二进制变量,包含编码为1(是,成功等)或0(不,失败等)的数据。换句话说,逻辑回归模型预测P(Y=1)是X的函数... 查看详情

机器学习100天(十八):018逻辑回归python实战(代码片段)

机器学习100天,今天讲的是:逻辑回归Python实战。我们打开spyder。首先,导入标准库和数据集。#导入标准库importnumpyasnpimportmatplotlib.pyplotaspltimportpandasaspd#导入数据集dataset=pd.read_csv(\'data.csv\')X=dataset.iloc[:, 查看详情

机器学习100天(十八):018逻辑回归python实战(代码片段)

机器学习100天,今天讲的是:逻辑回归Python实战。我们打开spyder。首先,导入标准库和数据集。#导入标准库importnumpyasnpimportmatplotlib.pyplotaspltimportpandasaspd#导入数据集dataset=pd.read_csv(\'data.csv\')X=dataset.iloc[:, 查看详情

机器学习一般线性回归(代码片段)

...归"模型。 0.概述线性回归应该是我们听过次数最多的机器学习算法了。在一般的统计学教科书中,最后都会提到这种方法。因此该算法也算是架起了数理统计与机器学习之间的桥梁。线性回归虽然常见,但是却并不简单。该... 查看详情