KNN与SVM对比&SVM与逻辑回归的对比

KNN与SVM对比&SVM与逻辑回归的对比

首先说一下两种学习方式: lazy learning  和  eager learning

先说 eager learning, 这种学习方式是指在进行某种判断(例如,确定一个点的分类或者回归中确定某个点对应的函数值)之前,先利用训练数据进行训练得到一个目标函数,待需要时就只利用训练好的函数进行决策,这是一种一劳永逸的方法, SVM 就属于这种学习方式;

而 lazy learning 是指只有到了需要决策时才会利用已有数据进行决策,而在这之前不会经历eager learning 所拥有的训练过程, KNN 属于这种方式。

 

Eager learning 考虑到了所有训练样本,说明它是一个全局的近似,优点是虽然它需要耗费训练时间,可是它的决策时间基本为 0。

Lazy learning 在决策时虽然需要计算所有样本与查询点的距离,但是在真正做决策时却只用了局部的几个训练数据,所以它是一个局部的近似,然而虽然不需要训练,它的复杂度还是需要 O(n),n 是训练样本的个数。

Lazy learning 的缺点: 1.  需要的存储空间比较大  2. 决策过程比较慢。

 

针对全局和局部的问题,我想了一个实际的例子。假设,现在我们要针对中国各地区的贫富问题进行划分,已经知道西部大部分地方比较贫穷,少部分地方富裕;而东部大部分地方富裕,少部分地方贫穷。首先,我们使用 SVM进行求解,按照 SVM 的思想,最后的结果一定是沿着中国地图无情的划一条线,而用KNN 时,东部城市中北京,上海等算是富裕的,而菏泽啊这样的就不太富裕;西部呢,像成都啊(不知道算不算西部,就假设算吧)算是富裕的,西宁啊这样的算是不太富裕的。

使用应用KNN算法时,我们无法对预测的误差有一个统计意义上的估计,结果的波动可能很大,这通常不是我们希望看到的。但是KNN的实现简单,使用灵活,也有自己的用武之地。

 

参考:http://www.52ml.net/10152.html

 

因此:

SVM需要训练过程,预测效率高。

KNN计算复杂度高,但是需要调的参比较小。

 

 

至于
逻辑回归和SVM,一个统计的方法,一个几何的方法,逻辑回归对于每一个样本都有考虑,而SVM只考虑了支持向量。
同样的线性分类情况下,如果异常点较多的话,无法剔除,由于LR中每个样本都是有贡献的,因此分类效果会受到影响,可能存在过拟合。
LR模型找到的那个超平面,是尽量让所有点都远离他,而SVM寻找的那个超平面,是只让最靠近中间分割线的那些点尽量远离,即只用到那些支持向量的样本。

<span>KNN与SVM对比&SVM与逻辑回归的对比</span>

 

理由:因为训练样本数量特别大,使用复杂核函数的SVM会导致运算很慢,因此应该考虑通过引入更多特征,然后使用线性核函数的SVM或者lr来构建预测性更好的模型。

SVM有多种核可以选择,可以处理各种非线性问题(条件是选对核函数)。大多数情况准确率都比LR要高,但是模型较大,训练效率低。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119459.html原文链接:https://javaforall.net

(0)
上一篇 2021年11月19日 下午8:00
下一篇 2021年11月19日 下午8:00


相关推荐

  • Java标识符规范

    Java标识符规范?标识符标识符是我们给变量、类、方法等取的名字。取名规则:1.标识符中可以包含字母(中文)、下划线、美元符$、数字,不能包含其他符号2.标识符不能以数字开头3.标识符不能是关键字命名建议:1.类名,每个单词的首字母大写(大驼峰)例如:MyFirstApp,TestApp等2.方法名,首字母小写,后面每个单词开头大写例如:getHttpMessage(),localValue等3.变量名,和方法名规则一样。4.常量命名全部大写,每个单词间下划线分开5.字定义的标识符在命名时,使用尽

    2022年7月26日
    10
  • 出生率新低!1978-2020中国人口出生率、死亡率及自然增长率变迁「建议收藏」

    出生率新低!1978-2020中国人口出生率、死亡率及自然增长率变迁「建议收藏」根据国家统计局近日发布的《中国统计年鉴2021》,2020中国人口出生率为8.52‰,再创历史新低。同时,2020中国人口自然增长率仅为1.45‰,勉强维持正增长,同样是历史新低。下面的视…

    2025年9月13日
    28
  • implementation和api的区别

    implementation和api的区别关于 implementati 和 api 的区别 一共分为两个方面 一 编译范围关于这一部分 参考官网 说的很清楚 implementati Gradle 会将依赖项添加到编译类路径 并将依赖项打包到构建输出 不过 当您的模块配置 implementati 依赖项时 会让 Gradle 了解您不希望该模块在编译时将该依赖项泄露给其他模块 也就是说 其他模块只有在运行时才能

    2026年3月17日
    2
  • 推荐一款颜值逆天且功能齐全的开源Shell工具

    推荐一款颜值逆天且功能齐全的开源Shell工具前言以前在 windows 上一直使用的 SSH 工具是 XShell 后来转到 mac 平台 XShell 没有 mac 版本 所以之前一直在找一款颜值高 功能齐全的可以作为日常使用的 Shell 工具 我知道 mac 下也有不少优秀的 Shell 终端工具 比如 SecureCRT putty Termius FinalShell 等 我是从以下几个维度考虑的 颜值要高 毕竟天天面对本就枯燥乏味的 shell 命令行 界面不好看会影响心情 心情也是生产力要素中很重要的一个因素 不知道你们认同么 功能要全 什么文件上传 云端同步 主题

    2026年3月19日
    2
  • kafka的应用场景有_后端用到kafka的地方

    kafka的应用场景有_后端用到kafka的地方kafka作为一个消息流处理平台。很多开发人员都作它作为一个生产&消费的中间件,并没有细细去思考kafka可以在哪些应用场景中使用,下面根据我的经验,总结下kafka可以应用在以下场景中。消息队列这种场景是日常用得最多之一。我日常需要将多台服务器上的日志集中收集到一个点上,通过logstash进行扫描并发到kafka队列中,然后通过消费者程序进行消费写到hbase或者es中。…

    2022年10月14日
    4
  • 国内如何安装和使用 Claude Code 教程 – Windows 用户篇

    国内如何安装和使用 Claude Code 教程 – Windows 用户篇

    2026年3月16日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号