why写这篇blog

最近在接触这方面的知识,但是找了许多的笔记,都感觉没有很好的总结出来,也正好当做是边学习,边复习着走。大佬轻喷。参考书目《python机器学习基础教程》

将分别从以下3方面进行总结

1.算法的作用

2.引用的方式(我这里主要是基于scikit-learn

3.重要参数

4.优缺点

5.注意事项

监督学习算法

监督学习主要解决两种问题:回归分类

统一a为回归,b为分类

(既然是总结,那概念就不过多赘述) 有需要了解的概念,可以上这个网站AI知识库

直接上算法

  1. K近邻 k-NN

    理解:近朱者赤,近墨者黑

    作用:回归和分类

    引用方式:a:from sklearn.neighbors import KNeighborsRegressor|b: from sklearn.neighbors import KNeighborsClassifier

    重要参数:n_neighbors=NN为近邻的邻居数量。数据点之间的距离默认使用欧式距离。

    优缺点:模型很容易理解,通常不需要过多调节就可以得到不错的性能。使用 k-NN 算法时,对数据进行预处理是很重要的。预测速度慢且不能处理具有很多特征的数据集。

    注意事项:多邻居的情况采用(voting)投票决定归属,k-NN在实践中往往不会用到。

  2. 线性回归 普通最小二乘法

    理解:确定函数,给自变量,因变量为预测值。

    作用:回归

    引用方式:a:from sklearn.linear_model import LinearRegression

    重要参数:w , b

    优缺点:无法控制复杂度,欠拟合的概率较大。

    注意事项:“斜率”参数(w,也叫作权重或系数)被保存在 coef_ 属性中,而偏移或截距(b)被保存在 intercept_ 属性中。

  3. 岭回归 使用了L2正则化的线性回归

    (正则化的个人拙见:加大或缩小某些特征的权值,改变其对预测结果的影响)

    L2正则化:w 的所有元素都应接近于 0

    理解:确定函数,给自变量,因变量为预测值。

    作用:回归

    重要参数:w(希望w尽量小) , b , alpha(默认=1,增大alpha,w越趋近0)

    引用方法:a :from sklearn.linear_model import Ridge

    优缺点:提高泛化能力,对小数据集的测试分数较高。如果有足够多的训练数据,正则化变得不那么重要,并且岭回归和线性回归将具有相同的性能。

    注意事项:增大或减小alpha均有可能提高泛化性能,alpha 的最佳设定值取决于用到的具体数据集

  4. lasso 使用了L1正则化的线性回归

    L1正则化:某些特征被模型完全忽略,w = 0。

    理解:确定函数,给自变量,因变量为预测值。

    作用:回归

    重要参数:w , b ,alpha , max_iter(运行迭代的最大次数,减小alpha时增大max_iter)

    引用方法:a :from sklearn.linear_model import Lasso

    优缺点:给出更容易理解的模型,因为它只选择了一部分输入特征。

    注意事项:把 alpha 设得太小,那么就会消除正则化的效果,并出现过拟合。

  5. Logistic 回归 其本质是分类算法!!!

    (默认使用L2正则化)

    理解:确定函数,给自变量,y值与因变量比较大小。用于分类的线性模型

    作用:分类

    重要参数:C(默认=1)较小的 C 值可以让算法尽量适应“大多数”数据点,而较大的 C 值更强调每个数据点都分类正确的重要性。

    引用方法:b from sklearn.linear_model import LogisticRegression

    优缺点:

    注意事项:理解成用于分类的线性模型。若想获得可解释性更强的模型可以更改为L1正则化LogisticRegression(C=1, penalty="l1")

  6. 线性支持向量机 线性SVM

    (默认使用L2正则化)

    理解:确定函数,给自变量,y值与因变量比较大小。用于分类的线性模型

    作用:分类

    重要参数:C(默认=1)较小的 C 值可以让算法尽量适应“大多数”数据点,而较大的 C 值更强调每个数据点都分类正确的重要性。

    引用方法:b from sklearn.svm import LinearSVC

    优缺点:适用于二分类问题(可以通过“一对其余”分类器进行多分类)。

    注意事项:理解成用于分类的线性模型。与LogisticRegression作用极为相似。

小结

2--6均为线性模型,线性模型的主要参数是正则化参数,在回归模型中叫作 alpha,在 LinearSVC 和 Logistic-Regression 中叫作 C。如果特征数量大于样本数量,线性模型的表现通常都很好。

  1. 朴素贝叶斯分类器

    这篇文章写的很好零基础学习朴素贝叶斯

    优缺点:训练速度往往更快,泛化能力要比线性分类器稍差。

  2. 决策树

    理解:从一层层的 if/else 问题中进行学习,并得出结论。

    作用:回归和分类

    重要参数:max_depth(树深),max_leaf_nodes(叶结点数目),min_samples_

    leaf(结点中数据点的最小数目)均用于预剪枝

    引用方法: a: from sklearn.tree import DecisionTreeRegressor|b:from sklearn.tree import DecisionTreeClassifier

    优缺点:模型很容易可视化,很容易理解,不受数据缩放的影响,即使做了预剪枝,它也经常会过拟合,泛化性能很差。

    注意事项:决策树的回归不能进行外推,也就是说不能进行回归预测。可以利用 graphviz 模块读取文件,将树可视化。

  3. 随机森林

    理解:本质上是许多决策树的集合。(决策树的数量和每棵树所取的特征)

    作用:回归和分类

    重要参数:n_estimators(构造的决策树的数量),max_features(每棵树所取的特征)

    引用方法:a:from sklearn.ensemble import RandomForestRegressor |b:from sklearn.ensemble import RandomForestClassifier

    优缺点:通常不需要反复调节参数就可以给出很好的结果

    注意事项:固定 random_state 是很重要的,经验法则就是“在你的时间 / 内存允许的情况下尽量多”,max_features好的经验就是使用默认值。

  4. 梯度提升回归树 梯度提升机

    理解:合并多个决策树来构建一个更为强大的模型,采用连续的方式构造树,每棵树都试图纠正前一棵树的错误。

    作用:回归和分类

    重要参数:learning_rate(学习率),n_estimators(树的数量)

    引用方法:a:from sklearn.ensemble import GradientBoostingRegressor |b: from sklearn.ensemble import GradientBoostingClassifier

    优缺点:需要仔细调参,通常不适用于高维稀疏数据

    注意事项:梯度提升模型的 max_depth 通常都设置得很小,一般不超过 5,梯度提升回归树中没有随机化,而是用到了强预剪枝。

小结

9,10均是决策树的集成

集成:是合并多个机器学习模型来构建更强大模型的方法。由于梯度提升和随机森林两种方法在类似的数据上表现得都很好,常用的方法就是先尝试随机森林,它的鲁棒性很好。如果随机森林效果很好,但预测时间太长,或者机器学习模型精度小数点后第二位的提高也很重要,那么切换成梯度提升通常会有用。

  1. 核支持向量机 SVM

    详细内容和理解SVM

    理解:将线性支持向量机推广到更复杂模型。(背后的数学过于复杂)

    作用:分类

    重要参数:gamma(控制高斯核的宽度),C(正则化参数) 。默认情况下,C=1,gamma=1/n_features

    引用方法:b: from sklearn.svm import SVC

    优缺点:预处理数据和调参都需要非常小心,很难检查

  2. 多层感知机 前反馈神经网路MLP

    理解:广义的线性模型。

    作用:回归和分类

    重要参数:solver(默认=adam,还有lbfgs,sgd),层数,每层的隐单元个数

    引用方法:a: from sklearn.neural_network import MLPRegressor |b:from sklearn.neural_network import MLPClassifier

    优缺点:能够获取大量数据中包含的信息,并构建无比复杂的模型,需要很长的训练时间。它还需要仔细地预处理数据。

    注意事项:所有流行的深度学习库也都允许使用高性能的图形处理单元(GPU),而 scikit-learn 不支持 GPU。使用 GPU 可以将计算速度加快 10 到 100倍,GPU 对于将深度学习方法应用到大型数据集上至关重要。

有很多细节的地方是没有讲清楚的,只是一个汇总方便查看。

监督学习,无监督学习常用算法集合总结,引用scikit-learn库(监督篇)的更多相关文章

  1. 《OD学算法》常用算法集合

    1. 排序 (1)冒泡 (2)选择 (3)插入 (4)归并 2. 位运算 Bitmask provide an efficient way to manipulate a small set of B ...

  2. AI之强化学习、无监督学习、半监督学习和对抗学习

    1.强化学习 @ 目录 1.强化学习 1.1 强化学习原理 1.2 强化学习与监督学习 2.无监督学习 3.半监督学习 4.对抗学习 强化学习(英语:Reinforcement Learning,简称 ...

  3. 【机器学习】从分类问题区别机器学习类型 与 初步介绍无监督学习算法 PAC

    如果要对硬币进行分类,我们对硬币根据不同的尺寸重量来告诉机器它是多少面值的硬币 这种对应的机器学习即使监督学习,那么如果我们不告诉机器这是多少面额的硬币,只有尺寸和重量,这时候让机器进行分类,希望机器 ...

  4. 无监督学习——K-均值聚类算法对未标注数据分组

    无监督学习 和监督学习不同的是,在无监督学习中数据并没有标签(分类).无监督学习需要通过算法找到这些数据内在的规律,将他们分类.(如下图中的数据,并没有标签,大概可以看出数据集可以分为三类,它就是一个 ...

  5. <机器学习>无监督学习算法总结

    本文仅对常见的无监督学习算法进行了简单讲述,其他的如自动编码器,受限玻尔兹曼机用于无监督学习,神经网络用于无监督学习等未包括.同时虽然整体上分为了聚类和降维两大类,但实际上这两类并非完全正交,很多地方 ...

  6. 监督学习 VS 无监督学习

    监督学习 就是人们常说的分类,通过已有的训练样本(即已知数据以及其对应的输出)去训练得到一个最优模型(这个模型属于某个函数的集合,最优则表示在某个评价准则下是最佳的),再利用这个模型将所有的输入映射为 ...

  7. Machine Learning分类:监督/无监督学习

    从宏观方面,机器学习可以从不同角度来分类 是否在人类的干预/监督下训练.(supervised,unsupervised,semisupervised 以及 Reinforcement Learnin ...

  8. 易百教程人工智能python修正-人工智能无监督学习(聚类)

    无监督机器学习算法没有任何监督者提供任何指导. 这就是为什么它们与真正的人工智能紧密结合的原因. 在无人监督的学习中,没有正确的答案,也没有监督者指导. 算法需要发现用于学习的有趣数据模式. 什么是聚 ...

  9. 深度|OpenAI 首批研究成果聚焦无监督学习,生成模型如何高效的理解世界(附论文)

    本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载,原文. 选自 Open AI 作者:ANDREJ KARPATHY, PIETER ABBEEL, GREG BRO ...

随机推荐

  1. Java向mysql中插入时间的方法

    ava向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明);部分资料参考网络资源  java向MySQL插入当前时间的四种方式 第一种:将java.util.Date类型的 ...

  2. 获取联系人列表的时候contact_id出现null的值

    因为删除联系人只是把它的contact_id设置为null,所以只要手机上删除过联系人id就会有null,用之前先判断是不是null就好了

  3. php函数(parse_str()

    parse_str()函数 把查询字符串解析到变量中 parse_str(string, array); string 规定要解析的字符串 array 存储变量的数组名称 例子: <?php p ...

  4. KubeSphere单节点(all-in-one)平台搭建记录

    KubeSphere单节点(all-in-one)平台搭建记录 目录 KubeSphere单节点(all-in-one)平台搭建记录 一.主机准备 1.1 主机配置 1.2 环境准备 二.下载kube ...

  5. 年前最后一次2022.1.28_RP++

    T1同昨(我看到题目就粘上昨天的代码,结果题还没发我就A了hhhhhh) T2一开始想用深搜,结果T掉了...只好改广搜,就挺令人头大 点击查看宽广对比 #include<bits/stdc++ ...

  6. Solution -「AGC 010C」「AT 2304」Cleaning

    \(\mathcal{Description}\)   Link.   给定一棵 \(n\) 个点的无根树,点有点权,每次选择两个不同的叶子,使它们间的简单路径的所有点权 \(-1\),问能否将所有点 ...

  7. Solution -「CF 802C」Heidi and Library (hard)

    \(\mathcal{Descriptoin}\)   Link.   你有一个容量为 \(k\) 的空书架,现在共有 \(n\) 个请求,每个请求给定一本书 \(a_i\).如果你的书架里没有这本书 ...

  8. JNDI漏洞利用探索

    最近学习了师傅寻找的一些JNDI漏洞的利用链受益匪浅,自己也尝试关于JNDI漏洞利用做一些挖掘,目前JNDI在利用过程我想到了两个问题. 测试每一个JNDI Bypass 利用链都需要手动更改URL很 ...

  9. 树莓派GPIO开发(一):激光头传感器模块的使用

    配置环境 系统:Raspbian11(64位) 设备:树莓派CM4 一.写在前面 主要为了测试我捡漏买的CM4的拓展版 拓展板子没有焊接引脚,但是预留的接口 手动焊接一下 测试成功 ,说明我捡的这块板 ...

  10. JwtAccessTokenConverter问题整理

    Cannot convert access token to JSON 授权服务颁发token(未进行公私钥加密)后,携带此token请求资源服务,提示此错误. 使用token可以在线解析,跟踪代码后 ...