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. AttributeText创建多彩文字Label --- hl

    一般用富文本实现多种花样的Label文字,下图是利用UILabel分类快速创建的多彩多样lable文字,快速简单,自定义性强,更重要的是无代码污染,特别适合轻量级使用 https://github.c ...

  2. 浅谈php web安全

    首先,笔记不是web安全的专家,所以这不是web安全方面专家级文章,而是学习笔记.细心总结文章,里面有些是我们phper不易发现或者说不重视的东西.所以笔者写下来方便以后查阅.在大公司肯定有专门的we ...

  3. 简单的MAC的终端命令

    今天小研究了一下MAC的终端命令,主要为了方便调试程序用,XCODE用不来啊... 在这里记下..防止丢失 pwd 当前工作目录 cd(不加参数) 进root cd(folder) 进入文件夹 cd ...

  4. BGP路由协议(Border Gateway Protocol)

    BGP路由协议(Border Gateway Protocol) 目录 BGP路由协议(Border Gateway Protocol) 一.BGP概述 1.自治系统(AS,autonomous sy ...

  5. python篇第10天【While 循环语句】

    while 语句时还有另外两个重要的命令 continue,break 来跳过循环,continue 用于跳过该次循环,break 则是用于退出循环,此外"判断条件"还可以是个常值 ...

  6. python篇第5天【变量】

    第4天加班 多个变量赋值 Python允许你同时为多个变量赋值.例如: a = b = c = 1 以上实例,创建一个整型对象,值为1,三个变量被分配到相同的内存空间上. 您也可以为多个对象指定多个变 ...

  7. Solution -「Gym 102979L」 Lights On The Road

    \(\mathcal{Description}\)   Link.   给定序列 \(\{w_n\}\),选择 \(i\) 位置的代价为 \(w_i\),要求每个位置要不被选择,要不左右两个位置至少被 ...

  8. Solution -「ABC 213G」Connectivity 2

    \(\mathcal{Description}\)   Link.   给定简单无向图 \(G=(V,E)\),点的编号从 \(1\) 到 \(|V|=n\).对于 \(k=2..n\),求 \(H= ...

  9. Solution -「ARC 101E」「AT 4352」Ribbons on Tree

    \(\mathcal{Description}\)   Link.   给定一棵 \(n\) 个点的树,其中 \(2|n\),你需要把这些点两两配对,并把每对点间的路径染色.求使得所有边被染色的方案数 ...

  10. macbook安装scala、hadoop、saprk环境

    一.scala安装 1. 安装jdk 有mac专用的jdk安装包,这里下载安装jdk1.8 2. 安装scala 2.1下载scala 2.2解压到指定目录 tar -zxvf /Users/lode ...