监督学习,无监督学习常用算法集合总结,引用scikit-learn库(监督篇)
why写这篇blog
最近在接触这方面的知识,但是找了许多的笔记,都感觉没有很好的总结出来,也正好当做是边学习,边复习着走。大佬轻喷。参考书目《python机器学习基础教程》
将分别从以下3方面进行总结
1.算法的作用
2.引用的方式(我这里主要是基于scikit-learn)
3.重要参数
4.优缺点
5.注意事项
监督学习算法
【监督学习,无监督学习常用算法集合总结,引用scikit-learn库(监督篇)】监督学习主要解决两种问题:回归与分类。
统一a为回归,b为分类。
(既然是总结,那概念就不过多赘述) 有需要了解的概念,可以上这个网站AI知识库
直接上算法
- K近邻 k-NN
理解:近朱者赤,近墨者黑
作用:回归和分类
引用方式:a:from sklearn.neighbors import KNeighborsRegressor
|b:from sklearn.neighbors import KNeighborsClassifier
重要参数:n_neighbors=N
N为近邻的邻居数量。数据点之间的距离默认使用欧式距离。
优缺点:模型很容易理解,通常不需要过多调节就可以得到不错的性能。使用 k-NN 算法时,对数据进行预处理是很重要的。预测速度慢且不能处理具有很多特征的数据集。
注意事项:多邻居的情况采用(voting)投票决定归属,k-NN在实践中往往不会用到。
- 线性回归 普通最小二乘法
理解:确定函数,给自变量,因变量为预测值。
作用:回归
引用方式:a:from sklearn.linear_model import LinearRegression
重要参数:w , b
优缺点:无法控制复杂度,欠拟合的概率较大。
注意事项:“斜率”参数(w,也叫作权重或系数)被保存在 coef_ 属性中,而偏移或截距(b)被保存在 intercept_ 属性中。
- 岭回归 使用了L2正则化的线性回归
(正则化的个人拙见:加大或缩小某些特征的权值,改变其对预测结果的影响)
L2正则化:w 的所有元素都应接近于 0
理解:确定函数,给自变量,因变量为预测值。
作用:回归
重要参数:w(希望w尽量小) , b , alpha(默认=1,增大alpha,w越趋近0)
引用方法:a :from sklearn.linear_model import Ridge
优缺点:提高泛化能力,对小数据集的测试分数较高。如果有足够多的训练数据,正则化变得不那么重要,并且岭回归和线性回归将具有相同的性能。
注意事项:增大或减小alpha均有可能提高泛化性能,alpha 的最佳设定值取决于用到的具体数据集
- lasso 使用了L1正则化的线性回归
L1正则化:某些特征被模型完全忽略,w = 0。
理解:确定函数,给自变量,因变量为预测值。
作用:回归
重要参数:w , b ,alpha , max_iter(运行迭代的最大次数,减小alpha时增大max_iter)
引用方法:a :from sklearn.linear_model import Lasso
优缺点:给出更容易理解的模型,因为它只选择了一部分输入特征。
注意事项:把 alpha 设得太小,那么就会消除正则化的效果,并出现过拟合。
- Logistic 回归 其本质是分类算法!!!
(默认使用L2正则化)
理解:确定函数,给自变量,y值与因变量比较大小。用于分类的线性模型
作用:分类
重要参数:C(默认=1)较小的 C 值可以让算法尽量适应“大多数”数据点,而较大的 C 值更强调每个数据点都分类正确的重要性。
引用方法:bfrom sklearn.linear_model import LogisticRegression
优缺点:
注意事项:理解成用于分类的线性模型。若想获得可解释性更强的模型可以更改为L1正则化LogisticRegression(C=1, penalty="l1")
- 线性支持向量机 线性SVM
(默认使用L2正则化)
理解:确定函数,给自变量,y值与因变量比较大小。用于分类的线性模型
作用:分类
重要参数:C(默认=1)较小的 C 值可以让算法尽量适应“大多数”数据点,而较大的 C 值更强调每个数据点都分类正确的重要性。
引用方法:bfrom sklearn.svm import LinearSVC
优缺点:适用于二分类问题(可以通过“一对其余”分类器进行多分类)。
注意事项:理解成用于分类的线性模型。与LogisticRegression作用极为相似。
- 朴素贝叶斯分类器
这篇文章写的很好零基础学习朴素贝叶斯
优缺点:训练速度往往更快,泛化能力要比线性分类器稍差。
- 决策树
理解:从一层层的 if/else 问题中进行学习,并得出结论。
作用:回归和分类
重要参数:max_depth(树深),max_leaf_nodes(叶结点数目),min_samples_
leaf(结点中数据点的最小数目)均用于预剪枝。
引用方法: a:from sklearn.tree import DecisionTreeRegressor
|b:from sklearn.tree import DecisionTreeClassifier
优缺点:模型很容易可视化,很容易理解,不受数据缩放的影响,即使做了预剪枝,它也经常会过拟合,泛化性能很差。
注意事项:决策树的回归不能进行外推,也就是说不能进行回归预测。可以利用 graphviz 模块读取文件,将树可视化。
- 随机森林
理解:本质上是许多决策树的集合。(决策树的数量和每棵树所取的特征)
作用:回归和分类
重要参数:n_estimators(构造的决策树的数量),max_features(每棵树所取的特征)
引用方法:a:from sklearn.ensemble import RandomForestRegressor
|b:from sklearn.ensemble import RandomForestClassifier
优缺点:通常不需要反复调节参数就可以给出很好的结果
注意事项:固定 random_state 是很重要的,经验法则就是“在你的时间 / 内存允许的情况下尽量多”,max_features好的经验就是使用默认值。
- 梯度提升回归树 梯度提升机
理解:合并多个决策树来构建一个更为强大的模型,采用连续的方式构造树,每棵树都试图纠正前一棵树的错误。
作用:回归和分类
重要参数:learning_rate(学习率),n_estimators(树的数量)
引用方法:a:from sklearn.ensemble import GradientBoostingRegressor
|b:from sklearn.ensemble import GradientBoostingClassifier
优缺点:需要仔细调参,通常不适用于高维稀疏数据
注意事项:梯度提升模型的 max_depth 通常都设置得很小,一般不超过 5,梯度提升回归树中没有随机化,而是用到了强预剪枝。
集成:是合并多个机器学习模型来构建更强大模型的方法。由于梯度提升和随机森林两种方法在类似的数据上表现得都很好,常用的方法就是先尝试随机森林,它的鲁棒性很好。如果随机森林效果很好,但预测时间太长,或者机器学习模型精度小数点后第二位的提高也很重要,那么切换成梯度提升通常会有用。
- 核支持向量机 SVM
详细内容和理解SVM
理解:将线性支持向量机推广到更复杂模型。(背后的数学过于复杂)
作用:分类
重要参数:gamma(控制高斯核的宽度),C(正则化参数) 。默认情况下,C=1,gamma=1/n_features
引用方法:b:from sklearn.svm import SVC
优缺点:预处理数据和调参都需要非常小心,很难检查
- 多层感知机 前反馈神经网路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 对于将深度学习方法应用到大型数据集上至关重要。
推荐阅读
- 三分钟学习一下JavaScript中map对象的用法
- Parallels Desktop 17 mac(pd虚拟机无限试用版)v17.1.1
- Windows原理深入学习系列-信任等级检查
- 开学季|开学季 | 飞桨AI Studio课程学习,小白也可以成为一名优秀的算法工程师
- Python学习之包与模块详解
- ESP32|基于arduino的ESP32 学习笔记(二) TFT_eSPI和LVGL库使用笔记
- mac专用pd17虚拟机Parallels Desktop 17无限试用版
- 数据分析|python机器学习之模型选择与优化
- JAVA|【Java学习】网络编程全总结——TCP、Udp、多线程、IO流、Socket、简易在线咨询聊天室、Java爬虫
- Java学习|基于TCP协议实现两人随意聊天——网络编程