一、基础理解

  • 问题:逻辑回归算法是用回归的方式解决分类的问题,而且只可以解决二分类问题
  • 方案:可以通过改造,使得逻辑回归算法可以解决多分类问题;
  • 改造方法:
  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 datasetsiris = datasets.load_iris()
    # [:, :2]:所有行,0、1 列,不包含 2 列;
    X = iris.data[:,:2]
    y = iris.targetfrom 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 LogisticRegressionlog_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 ListedColormapcustom_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.targetX_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() 算法,得到的模型准确率较高;

四、OvR 和 OvO 的封装

  • scikit-learn单独封装了实现 OvO 和 OvR 的类,使得任意二分类算法都可以通过使用这两个类解决多分类问题;

 1)OvR 的封装

  • 模块

    from sklearn.multiclass import OneVsRestClassifier

  • 使用方法
  1. ovr = OneVsRestClassifier(二分类算法的实例对象):得到一个可以解决多分类的实例对象;
  2. ovr.fit(X_train, y_train):拟合多分类实例对象;
  • from sklearn.multiclass import OneVsRestClassifierovr = OneVsRestClassifier(log_reg)
    ovr.fit(X_train, y_train)
    ovr.score(X_test, y_test)
    # 准确率:0.9473684210526315

 2)OvO 的封装

  • 模块

    from sklearn.multiclass import OneVsOneClassifier

  • 使用方法:同理 OvR;
  • from sklearn.multiclass import OneVsOneClassifierovo = OneVsOneClassifier(log_reg)
    ovo.fit(X_train, y_train)
    ovo.score(X_test, y_test)
    # 准确率:1.0

转载于:https://www.cnblogs.com/volcao/p/9389921.html

机器学习:逻辑回归(OvR 与 OvO)相关推荐

  1. [转载] 吴恩达机器学习逻辑回归练习题:逻辑回归及规则化(python实现)

    参考链接: 了解逻辑回归 Python实现 练习题背景:网易云课堂->吴恩达机器学习课程->逻辑回归练习题 对于练习题的详细内容,和课程中推荐的octave编程实现,请见:吴恩达机器学习逻 ...

  2. 机器学习——逻辑回归

    机器学习--逻辑回归 一.逻辑回归 logistic回归又称logistic回归分析,常用于数据挖掘,疾病自动诊断,经济预测等领域.它是一种广义的线性回归分析模型,因此与多重线性回归分析有很多相同之处 ...

  3. 机器学习 逻辑回归算法应用案例

    机器学习 逻辑回归算法应用案例 时间:2020.09.12 出处:https://www.kesci.com/home/project/5bfe39b3954d6e0010681cd1 注明:初学逻辑 ...

  4. 泰坦尼克(机器学习逻辑回归)

    泰坦尼克(机器学习逻辑回归) 原文链接 数据预处理 import pandas as pd train=pd.read_csv('C:/Users/Admin/Downloads/train.csv' ...

  5. EduCoder 机器学习 逻辑回归

    逻辑回归是属于机器学习里面的监督学习,它是以回归的思想来解决分类问题的一种非常经典的二分类分类器.由于其训练后的参数有较强的可解释性,在诸多领域中,逻辑回归通常用作 baseline 模型,以方便后期 ...

  6. python 画出决策边界_Python3入门机器学习 - 逻辑回归与决策边界

    logistic回归又称logistic回归分析,是一种广义的线性回归分析模型,以胃癌病情分析为例,选择两组人群,一组是胃癌组,一组是非胃癌组,两组人群必定具有不同的体征与生活方式等.因此因变量就为是 ...

  7. 机器学习 --- 逻辑回归

    逻辑回归是属于机器学习里面的监督学习,它是以回归的思想来解决分类问题的一种非常经典的二分类分类器.由于其训练后的参数有较强的可解释性,在诸多领域中,逻辑回归通常用作 baseline 模型,以方便后期 ...

  8. Python遇见机器学习 ---- 逻辑回归 Logistic Regression

    综述 "子非鱼,焉知鱼之乐" 本文采用编译器:jupyter 逻辑回归方法是从线性回归方法发展过来的,通常解决的是分类问题,读者或许有这样一个疑问:既然是回归算法又么解决分类问题的 ...

  9. 机器学习算法平台alink_机器学习-逻辑回归算法

    1-逻辑回归算法原理推导 逻辑回归算法其实是一个分类算法,是非常经典,优秀的算法.一般我们不知道用哪个分类算法的时候,首先用逻辑回归算法试一试:它不仅可以实现二分类算法,还可以解决多分类问题 逻辑回归 ...

  10. 机器学习-逻辑回归-信用卡检测任务

    信用卡欺诈检测 基于信用卡交易记录数据建立分类模型来预测哪些交易记录是异常的哪些是正常的. 任务流程: 加载数据,观察问题 针对问题给出解决方案 数据集切分 评估方法对比 逻辑回归模型 建模结果分析 ...

最新文章

  1. Python:Spider
  2. CAS (10) —— JBoss EAP 6.4下部署CAS时出现错误exception.message=Error decoding flow execution的解决办法...
  3. mysql global index_CHECK GLOBAL INDEX
  4. 简单图片浏览器的实现
  5. js 判断变量是否有值返回bool_有没有办法可以获得javascript函数返回值里的bool值,代码如下:...
  6. 来电通java版_我的世界基岩版1.19正式版下载-我的世界基岩版1.19下载手机版v1.19...
  7. Python 一次for遍历多个列表及遍历时获取index
  8. Mediostream框架filter使用说明
  9. form表单,submit,ajax提交
  10. apache服务器进程配置文件是,apache服务器进程配置文件是
  11. Java Script小技巧【对象,属性】(转载)
  12. 视频会议受追捧,省钱又节能
  13. 【学习笔记】移动无线信道理论
  14. 作为一名程序员,我都收集了哪些好玩的神器工具?
  15. 【风马一族_php】常用的语句
  16. 移动支付申请所需材料及流程整理
  17. 复选框checkbox实现批量删除
  18. android 录音的格式转换,Android仿微信录音功能(录音后的raw文件转mp3文件)
  19. 六自由度机械臂基于力传感器的末端力控及拖动示教
  20. 【案例】揭秘Netflix个性化推荐系统,你看到哪版电影海报?由算法决定

热门文章

  1. 穿过网络防火墙监视的木马下载器(转)
  2. supermap gis
  3. 有声音显示音频服务器,Win7右下角声音图标显示音频服务未运行的解决方法小结...
  4. 万测试验机软件,万测关注检查井盖质量检测
  5. Android利用zxing生成二维码
  6. MySQL RR隔离级别解决幻读问题?
  7. 【概率论与数理统计 宋浩】P2(1) 互不相容事件 对立事件
  8. android 旋转屏幕全屏,重新组合活动布局以在旋转屏幕时全屏播放video
  9. 性能监控与调优篇之【3. JVM 监控及诊断工具-GUI 篇】
  10. 苹果个人开发者账号申请+获取证书+上架应用商城