1.常用的分类模型简介
sklearn作为机器学习的集成包,囊括了很多常用的机器学习算法,贝叶斯,KNN,逻辑回归,随机深林,决策树,GBDT,SVM都被收录其中。其中KNN属于无监督学习模型,贝叶斯,逻辑回归,随机深林,决策树,GBDT,SVM均属于有监督学习模型。
2.分类模型详解
2.1.朴树贝叶斯
朴素贝叶斯和其他绝大多数的分类算法都不同。对于大多数的分类算法,比如决策树,KNN,逻辑回归,支持向量机等,他们都是判别方法,也就是直接学习出特征输出Y和特征X之间的关系,要么是决策函数Y=f(X),要么是条件分布P(Y|X)。但是朴素贝叶斯却是生成方法,也就是直接找出特征输出Y和特征X的联合分布P(X,Y),然后用P(Y|X)=P(X,Y)/P(X)得出。
贝叶斯公式:
P(A|B) = P(A,B) / P(B) ---------条件概率:在事件B发生的前提下,A发生的概率
P(B|A) = P(A,B) / P(A)
所以:P(A,B) = P(A|B)P(B) = P(B|A)P(A)
所以贝叶斯公式:P(A|B) = (P(B|A)P(A)) / P(B) = P(A) * (P(B|A) / P(B))
这里:P(A) 为先验概率,即在B事件之前,对A事件概率的一个判断;P(A|B) 为后验概率,即B事件发生后,对事件A概率的重新评估;(P(B|A) / P(B)) 为可能性函数,这是一个调整因子,使得预估概率跟接近真实概率
最后可以将贝叶斯公式总结为:后验概率 = 先验概率 * 调整因子
公式可以理解为:P(A|B) = (P(B|A)P(A)) / P(B) ==> P(A|b1,b2,b3…) = (P(b1,b2,b3…|A)P(A)) / P(b1,b2,b3…)
即:在出现特征b1,b2,b3…的条件下,A事件发生的概率
当b1,b2,b3…事件相互独立的前提下:P(b1,b2,b3…|A) = P(b1|A)P(b2|A)P(b3|A)…
sklearn代码如下
Multinomial Naive Bayes Classifier
from sklearn.naive_bayes import MultinomialNB
clf = MultinomialNB(alpha=0.01)
clf.fit(train_x, train_y)
2.2KNN
简单地说,k近邻算法采用测量不同特征值之间的距离方法进行分类。
k-近邻算法
优点:精度高、对异常值不敏感、无数据输入假定。
缺点:计算复杂度高、空间复杂度高。 适用数据范围:数值型和标称型。
k-近邻算法(kNN),它的工作原理是:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们只选择样本数据集中前k个最相似的数据,这就是k-近邻算法中k的出处,通常k是不大于20的整数。最后,选择k个最相似数据中出现次数最多的分类,作为新数据的分类。
KNN Classifier
from sklearn.neighbors import KNeighborsClassifier
clf = KNeighborsClassifier()
clf.fit(train_x, train_y)
2.3逻辑回归
-
因变量为二分类的分类变量或某事件的发生率,并且是数值型变量。但是需要注意,重复计数现象指标不适用于Logistic回归。
-
残差和因变量都要服从二项分布。二项分布对应的是分类变量,所以不是正态分布,进而不是用最小二乘法,而是最大似然法来解决方程估计和检验问题。
-
自变量和Logistic概率是线性关系
-
各观测对象间相互独立。
原理:如果直接将线性回归的模型扣到Logistic回归中,会造成方程二边取值区间不同和普遍的非直线关系。因为Logistic中因变量为二分类变量,某个概
率作为方程的因变量估计值取值范围为0-1,但是,方程右边取值范围是无穷大或者无穷小。所以,才引入Logistic回归。
Logistic回归实质:发生概率除以没有发生概率再取对数。就是这个不太繁琐的变换改变了取值区间的矛盾和因变量自变量间的曲线关系。究其原因,是发生和未发生的概率成为了比值,这个比值就是一个缓冲,将取值范围扩大,再进行对数变换,整个因变量改变。不仅如此,这种变换往往使得因变量和自变量之间呈线性关系,这是根据大量实践而总结。所以,Logistic回归从根本上解决因变量要不是连续变量怎么办的问题。还有,Logistic应用广泛的原因是许多现实问题跟它的模型吻合。例如一件事情是否发生跟其他数值型自变量的关系。
Logistic Regression Classifier
from sklearn.linear_model import LogisticRegression
clf = LogisticRegression(penalty=‘l2’)
clf.fit(train_x, train_y)
2.4随机深林
随机森林由Leo Breiman(2001)提出的一种分类算法,它通过自助法(bootstrap)重采样技术,从原始训练样本集N中有放回地重复随机抽取n个样本生成新的训练样本集合训练决策树,然后按以上步骤生成m棵决策树组成随机森林,新数据的分类结果按分类树投票多少形成的分数而定。其实质是对决策树算法的一种改进,将多个决策树合并在一起,每棵树的建立依赖于独立抽取的样本。
单棵树的分类能力可能很小,但在随机产生大量的决策树后,一个测试样本可以通过每一棵树的分类结果经统计后选择最可能的分类。
随机森林大致过程如下:
1)从样本集中有放回随机采样选出n个样本;
2)从所有特征中随机选择k个特征,对选出的样本利用这些特征建立决策树(一般是CART,也可是别的或混合);
3)重复以上两步m次,即生成m棵决策树,形成随机森林;
4)对于新数据,经过每棵树决策,最后投票确认分到哪一类。
2.随机森林特点:
随机森林有很多优点:
1) 每棵树都选择部分样本及部分特征,一定程度避免过拟合;
2) 每棵树随机选择样本并随机选择特征,使得具有很好的抗噪能力,性能稳定;
3) 能处理很高维度的数据,并且不用做特征选择;
4) 适合并行计算;
5) 实现比较简单;
缺点:
1) 参数较复杂;
2) 模型训练和预测都比较慢。
Random Forest Classifier
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(n_estimators=8)
clf.fit(train_x, train_y)
2.5决策树
决策树是经典的机器学习算法,很多复杂的机器学习算法都是由决策时演变而来.它是一种使用if-then-else的决策规则的监督学习方法.很容易理解,掌握。
决策树的优点:
- 便于理解和解释。树的结构可以可视化出来。
- 训练需要的数据少。其他机器学习模型通常需要数据规范化,比如构建虚拟变量和移除缺失值,不过请注意,这种模型不支持缺失值。
- 由于训练决策树的数据点的数量导致了决策树的使用开销呈指数分布(训练树模型的时间复杂度是参与训练数据点的对数值)。
- 能够处理数值型数据和分类数据。其他的技术通常只能用来专门分析某一种变量类型的数据集。详情请参阅算法。
- 能够处理多路输出的问题。
- 使用白盒模型。如果某种给定的情况在该模型中是可以观察的,那么就可以轻易的通过布尔逻辑来解释这种情况。相比之下,在黑盒模型中的结果就是很难说明清 楚地。
- 可以通过数值统计测试来验证该模型。这对事解释验证该模型的可靠性成为可能。
- 即使该模型假设的结果与真实模型所提供的数据有些违反,其表现依旧良好。
决策树的缺点:
- 决策树模型容易产生一个过于复杂的模型,这样的模型对数据的泛化性能会很差。这就是所谓的过拟合.一些策略像剪枝、设置叶节点所需的最小样本数或设置数的最大深度是避免出现 该问题最为有效地方法
- 决策树可能是不稳定的,因为数据中的微小变化可能会导致完全不同的树生成。这个问题可以通过决策树的集成来得到缓解
- 在多方面性能最优和简单化概念的要求下,学习一棵最优决策树通常是一个NP难问题。因此,实际的决策树学习算法是基于启发式算法,例如在每个节点进 行局部最优决策的贪心算法。这样的算法不能保证返回全局最优决策树。这个问题可以通过集成学习来训练多棵决策树来缓解,这多棵决策树一般通过对特征和样本有放回的随机采样来生成
- 有些概念很难被决策树学习到,因为决策树很难清楚的表述这些概念。例如XOR,奇偶或者复用器的问题
- 如果某些类在问题中占主导地位会使得创建的决策树有偏差。因此,我们建议在拟合前先对数据集进行平衡
Decision Tree Classifier
from sklearn import tree
clf = tree.DecisionTreeClassifier()
clf.fit(train_x, train_y)
2.6GBDT
Boosting是一种可将弱学习器提升为强学习器的算法,不同于Bagging、Stacking方法,Boosting训练过程为串联方式,弱学习器的训练是有顺序的,每个弱学习器都会在前一个学习器的基础上进行学习,最终综合所有学习器的预测值产生最终的预测结果。而GBDT则是Boosting算法中的一种,以CART决策树为基学习器,主要是使用后一个模型来拟合当前模型的残差的负梯度,来达到的贪婪最优的效果。
GBDT(Gradient Boosting Decision Tree) Classifier
from sklearn.ensemble import GradientBoostingClassifier
clf = GradientBoostingClassifier(n_estimators=200)
clf.fit(train_x, train_y)
2.7SVM
支持向量机(Support Vector Machine,SVM),主要用于小样本下的二分类、多分类以及回归分析,是一种有监督学习的算法。基本思想是寻找一个超平面来对样本进行分割,把样本中的正例和反例用超平面分开,其原则是使正例和反例之间的间隔最大。
SVM Classifier
from sklearn.svm import SVC
clf = SVC(kernel=‘rbf’, probability=True)
clf.fit(train_x, train_y)
参考链接:
https://blog.csdn.net/weixin_41599977/article/details/89475295
https://blog.csdn.net/weixin_39881922/article/details/80419270
https://www.jianshu.com/p/e51e92a01a9c
https://blog.csdn.net/qq_27802435/article/details/81030394
http://www.siyuanblog.com/?p=821
https://zhuanlan.zhihu.com/p/50176849
https://zhuanlan.zhihu.com/p/145542994