前言

 简单介绍各种机器学习算法的优缺点,和用python中的一些相关库的用法

一、监督学习算法

1、k-NN近邻

1.1 简介

 k-NN 算法可以说是最简单的机器学习算法。构建模型只需要保存训练数据集即可。想要对新数据点做出预测,算法会在训练数据集中找到最近的数据点,也就是它的“最近邻”。

 主要过程为:1. 计算训练样本和测试样本中每个样本点的距离(常见的距离度量有欧式距离,马氏距离等);2. 对上面所有的距离值进行排序;3. 选前k个最小距离的样本;4. 根据这k个样本的标签进行投票,得到最后的分类类别;

1.2 实现

1.2.1 导入

from sklearn.neighbors import KNeighborsClassifier
# 还可以用于回归,在使用多个近邻时,预测结果为这些邻居的平均值
from sklearn.neighbors import KNeighborsRegressor

1.2.2 实例化并设定邻居的个数为3

clf = KNeighborsClassifier(n_neighbors=3)

1.2.3 训练、预测和评估

clf.fit(X_train, y_train)
clf.predict(X_test)
clf.score(X_test, y_test)

1.3 优缺点及参数

1.3.1 优点

  • 理论成熟,思想简单,既可以用来做分类也可以用来做回归;
  • 可用于非线性分类;
  • 训练时间复杂度为O(n);
  • 对数据没有假设,准确度高,对outlier不敏感;

1.3.2 缺点

  • 计算量大,预测速度慢;
  • 样本不平衡问题(即有些类别的样本数量很多,而其它样本的数量很少);
  • 需要大量的内存;
  • 不能处理具有很多特征的问题

1.3.3参数

  主要有两个参数,即邻居的个数和距离的选择,默认的是欧式距离

2、线性模型

2.1 简介

 线性模型是在实践中广泛使用的一类模型,利用输入特征的线性函数进行预测。

 分为回归和分类,回归又包括最小二乘回归、岭回归(斜率参数尽可能小,用L2正则惩罚)和lasso回归(有的斜率参数为0,用L1正则惩罚),分类包括Logistic回归。

2.2 实现

2.2.1 导入

# 线性回归
from sklearn.linear_model import LinearRegression
# 岭回归
from sklearn.linear_model import Ridge
# lasso回归
from sklearn.linear_model import Lasso# Logistic回归
from sklearn.linear_model import LogisticRegression

2.2.2 训练、预测和评估

# 线性模型的训练
lr = LinearRegression().fit(X_train, y_train)
# 线性模型的预测
lr.predict()
# 斜率参数,是一个numpy数组
lr.coef_
# 截距参数,是一个浮点数
lr.intercept_
lr.score(X_test, y_test)# 岭回归与线性回归类似,但可以设置α参数,α越大,惩罚越厉害,斜率越小,但可能会提高泛化性能
Ridge(alpha=10)# lasso回归与线性回归类似,同样可以设置α和运行迭代得最大次数,α越大,惩罚越厉害,斜率可能会降为0
Lasso(alpha=0.01, max_iter=100000)# Logistic回归用参数C控制正则化强度,c越大,对应的正则化越弱
LogisticRegression(C=100)

2.3 优缺点

2.3.1 优点

  • 线性回归实现简单,计算简单
  • 训练速度非常快,预测速度也很快
  • Logistic回归实现简单,广泛的应用于工业问题上
  • 对Logistic回归而言,多重共线性并不是问题,它可以结合L2正则化来解决该问题

2.3.2 缺点

  • 线性模型不能拟合非线性数据
  • 当特征空间很大时,Logistic回归性能不太好
  • Logistic回归容易欠拟合,一般准确度不太高
  • Logistic回归不能很好地处理大量多类特征或变量

3、朴素贝叶斯

3.1 简介

 与线性模型非常相似,但它的训练速度往往更快。这种高效率所付出的代价是,朴素贝叶斯模型的泛化能力要比线性分类器(如LogisticRegression 和LinearSVC)稍差。

 朴素贝叶斯基于贝叶斯定理与特征条件独立假设,对于给定的训练数据集,首先基于特征条件独立假设学习输入输出的联合概率分布;然后基于此模型,对于给定的输入x,利用贝叶斯定理求出后验概率最大的输出y

4、支持向量机

4.1 简介

 功能强大,能执行线性或非线性分类、回归,甚至是异常值检测问题。特别适用于中小型复杂数据集的分类。就算数据在原特征空间线性不可分,只要给个合适的核函数,它就能运行得很好。但内存消耗大,难以解释,运行和调参也有些烦人,而随机森林却刚好避开了这些缺点,比较实用。

 支持向量机分为有核和无核,无核和线性模型类似。

4.2 实现

4.2.1 导入

# 用于分类
from sklearn.svm import LinearSVC
# 非线性,添加核函数
from sklearn.svm import SVC# 用于回归
from sklearn.svm import LinearSVR

4.2.2 训练、预测和评估

# 训练
linear_svm = LinearSVC().fit(X, y)
# 预测
linear_svm.predict()
# 评估
linear_svm.score(X_test, y_test)

4.3 优缺点及参数

4.3.1 参数

 参数主要包括gamma,c。小的gamma 值表示决策边界变化很慢,生成的是复杂度较低的模型,而大的gamma 值则会生成更为复杂的模型。C 参数是正则化参数,与线性模型中用到的类似。c越大模型越复杂。默认c=1,gamma=1/n_features。

 另一个重要的参数就是选择核函数。一般选用高斯核函数。

4.3.2 优点

  • 可以解决高维问题,即大型特征空间
  • 能够处理非线性特征的相互作用
  • 无需依赖整个数据
  • 可以提高泛化能力

4.3.3 缺点

  • 预处理数据和调参都需要非常小心
  • 当观测样本很多时,效率并不是很高
  • 对缺失数据敏感

4.4 与Logistic回归的对比

  • 如果相比于样本数(m),样本的特征(n)很大,用Logistic回归或线性svm
  • 如果n很小,m适中,用高斯核的svm
  • 如果n很小,m很大,创建或增加n,然后同第一条

5、随机森林

5.1 简介

 随机森林本质上是许多决策树的集合,其中每棵树都和其他树略有不同。随机森林背后的思想是,每棵树的预测可能都相对较好,但可能对部分数据过拟合。如果构造很多树,并且每棵树的预测都很好,但都以不同的方式过拟合,那么我们可以对这些树的结果取平均值来降低过拟合。既能减少过拟合又能保持树的预测能力。

 随机森林中树的随机化方法有两种:一种是通过选择用于构造树的数据点,另一种是通过选择每次划分测试的特征。而每颗树用的数据集为从原始数据集bootstrap采样得到的。

 对于回归问题,我们可以对这些结果取平均值作为最终预测;对于分类问题,则用到了“软投票”策略。也就是说,每个算法做出“软”预测,给出每个可能的输出标签的概率。对所有树的预测概率取平均值,然后将概率最大的类别作为预测结果。

5.2 实现

5.2.1 导入

from sklearn.ensemble import RandomForestClassifier
# 其中n_estimators控制树的个数,还有max_features参数,控制每棵树在每个节点处选择的特征个数,还有设置n_jobs=-1,使用所有的cpu内核进行训练
forest = RandomForestClassifier(n_estimators=5, random_state=2)

5.2.2 训练、预测和评估

# 训练
forest.fit(X_train, y_train)
# 预测
forest.predict(X_test)
# 评估
forest.score(X_train, y_train)
# 特征的重要性
forest.feature_importances_

5.3 优缺点和重要参数

详见随机森林的优缺点
有一个缺点是训练和预测的速度要比线性模型要慢

6、如何选择?

  1. 首当其冲应该选择的就是逻辑回归,如果它的效果不怎么样,那么可以将它的结果作为基准来参考,在基础上与其他算法进行比较;

  2. 然后试试决策树(随机森林)看看是否可以大幅度提升你的模型性能。即便最后你并没有把它当做为最终模型,你也可以使用随机森林来移除噪声变量,做特征选择;

  3. 如果特征的数量和观测样本特别多,那么当资源和时间充足时(这个前提很重要),使用SVM不失为一种选择。

二、无监督学习算法

各种机器学习算法比较相关推荐

  1. 机器学习算法的优点和缺点总结

    机器学习算法的优点和缺点总结 1.正则化算法(Regularization Algorithms) 它是另一种方法(通常是回归方法)的拓展,这种方法会基于模型复杂性对其进行惩罚,它喜欢相对简单能够更好 ...

  2. 机器学习算法基础知识

    在我们了解了需要解决的机器学习问题的类型之后,我们可以开始考虑搜集来的数据的类型以及我们可以尝试的机器学习算法.在这个帖子里,我们会介绍一遍最流行的机器学习算法.通过浏览主要的算法来大致了解可以利用的 ...

  3. 赠书 | 图解机器学习算法,看这文就够了!

    机器学习指的是计算机根据给定的问题.课题或环境进行学习,并利用学习结果解决问题或课题等的一整套机制(图 1-1). 图 1-1 分类的示意图 与机器学习共同成为热门话题的还有人工智能和深度学习.这里梳 ...

  4. 【机器学习】机器学习算法优缺点对比(汇总篇)

    作者 | 杜博亚 来源 | 阿泽的学习笔记 「本文的目的,是务实.简洁地盘点一番当前机器学习算法」.文中内容结合了个人在查阅资料过程中收集到的前人总结,同时添加了部分自身总结,在这里,依据实际使用中的 ...

  5. 机器学习算法易受攻击?阿里“安全基建”这样应对AI的不安全

    出品 | AI科技大本营(ID:rgznai100) 数字基建的浪潮之下,诸多行业领域都在加速融合5G.大数据中心.AI等新技术,向数字化转型.近日,多位全国政协委员.院士和安全行业专家提出,应尽快出 ...

  6. 解密Kernel:为什么适用任何机器学习算法?

    作者 | Marin Vlastelica Pogančić 译者 | 陆离 编辑 | 一一 出品 | AI科技大本营(ID:rgznai100) 机器学习中Kernel的秘密(一) 本文探讨的不是关 ...

  7. 最实用的机器学习算法优缺点分析,没有比这篇说得更好了

    AI技术年度盛会即将开启!11月8-9日,来自Google.Amazon.微软.Facebook.LinkedIn.阿里巴巴.百度.腾讯.美团.京东.小米.字节跳动.滴滴.商汤.旷视.思必驰.第四范式 ...

  8. 小姐姐带你一起学:如何用Python实现7种机器学习算法(附代码)

    编译 | 林椿眄 出品 | AI科技大本营(公众号ID:rgznai100) [AI科技大本营导读]Python 被称为是最接近 AI 的语言.最近一位名叫Anna-Lena Popkes的小姐姐在G ...

  9. 「数据科学家」必备的10种机器学习算法

    来源 | 雷克世界(ID:raicworld) 编译 | 嗯~是阿童木呀.KABUDA.EVA 可以说,机器学习从业者都是个性迥异的.虽然其中一些人会说"我是X方面的专家,X可以在任何类型的 ...

  10. 盘点|最实用的机器学习算法优缺点分析,没有比这篇说得更好了

    对于机器学习算法的盘点,网上屡见不鲜.但目前,还没人能结合使用场景来把问题说明白,而这一点正是本文的目的所在. 文中作者将结合他的实际经验,细致剖析每种算法在实践中的优势和不足. 本文的目的,是务实. ...

最新文章

  1. Unity下的ECS框架 Entitas简介
  2. 零基础自学python的app-零基础学Python需要用哪些软件?
  3. Redpine Signals RS9110-N-11-02 Wi-Fi解决方案
  4. (转载)MyCat:开源分布式数据库中间件
  5. FreeRTOS实验_独立看门狗监视多线程
  6. 中国火电设备市场发展方向与投资策略研究报告2022版
  7. 重新使用Eclipse建立安卓工程遇到的问题
  8. 使用Sense操作ElasticSearch CRUD
  9. 大数据中常见的端口号 总结汇总大全(最新)
  10. laravel缓存html,Laravel 静态页面缓存 JosephSilber/page-cache - 码农天地
  11. Spring Cloud——Consul——架构体系
  12. MySQL 常用需求写法 记录一下
  13. 12 快件文档“更新终止”从作者“xxx”收到
  14. es6 Promise.all()方法
  15. php 公众号授权登录,微信公众号授权登录
  16. JavaScript 原形链
  17. go语言快速入门:流程控制(7)
  18. Android关于安兔兔手机信息造假的问题。
  19. 汽车管理软件批发,汽车管理软件哪个靠谱?
  20. 哈理工院赛-小乐乐搭积木

热门文章

  1. PostgreSQL简单上手
  2. Django笔记六之外键ForeignKey介绍
  3. SSH框架下 ajax 实现异步加载的案例
  4. Tensorflow TFRecord: Can't parse serialized example
  5. SQLServer里面添加约束条件
  6. STM32定时器配置(TIM1-TIM8)高级定时器+普通定时器,定时计数模式下总结
  7. 01-HTML基础与进阶-day3-录像234
  8. 详解网页设计中的定位与定位应用
  9. vue 上传shp和zip格式转geo
  10. CSDN使用:如何在CSDN中创建自己的博客专栏