我的数据科学之路-监督学习
上一篇介绍了线性回归模型,这就是典型的一种监督学习,一种常用的套路就是假设一个模型,然后选择一个损失函数,再利用打好标签的训练数据去训练模型使得损失函数最小化=。本篇再粗浅地介绍集中常用的模型。
1.朴素贝叶斯
朴素贝叶斯公式正如其名,非常的简单,,其意义就是根据A条件下B的概率计算B条件下A的概率。举个例子,某疾病检测正确率为99%,即患者检测时99%概率为阳性,1%概率为阴性,非患者检测99%概率为阴性,1%概率为阳性,此病的发病率为1/10000,那么一个人检测结果为阳性时他的发病概率为多少?此例中所求是检测为阳性条件下患病的概率,用A代表患病事件,B代表检测为阳性事件。那么代入公式,P(B|A)=0.99,P(A)=0.0001,P(B)=0.0001*0.99+0.9999*0.01=0.010098,
P(A|B)=0.99*0.0001/0.010098=0.0098.(此例子只做概率计算,不具有医学意义).
2.SVM
SVM方法是通过一个非线性映射p,把样本空间映射到一个高维乃至无穷维的特征空间中(Hilbert空间),使得在原来的样本空间中非线性可分的问题转化为在特征空间中的线性可分的问题.简单地说,就是升维和线性化.升维,就是把样本向高维空间做映射,一般情况下这会增加计算的复杂性,甚至会引起“维数灾难”,因而人们很少问津.但是作为分类、回归等问题来说,很可能在低维样本空间无法线性处理的样本集,在高维特征空间中却可以通过一个线性超平面实现线性划分(或回归).一般的升维都会带来计算的复杂化,SVM方法巧妙地解决了这个难题:应用核函数的展开定理,就不需要知道非线性映射的显式表达式;由于是在高维特征空间中建立线性学习机,所以与线性模型相比,不但几乎不增加计算的复杂性,而且在某种程度上避免了“维数灾难”.这一切要归功于核函数的展开和计算理论.
选择不同的核函数,可以生成不同的SVM,常用的核函数有以下4种:
⑴线性核函数K(x,y)=x·y;
⑵多项式核函数K(x,y)=[(x·y)+1]^d;
⑶径向基函数K(x,y)=exp(-|x-y|^2/d^2)
⑷二层神经网络核函数K(x,y)=tanh(a(x·y)+b).
3.决策树
决策树简单的理解就是根据特征增加if-else条件,就不多介绍了。
4.Boosting,Bagging
这两种都是集成方法,即将多个弱学习器联合集成一个强学习器,boosting是依次迭代,上一个分类器的错误结果会用于下一个分类器,最终迭代出一个强分类器。bagging是将数据随机采样成多份训练数据,分别得到一个弱分类器之后再合成一个强分类器,随机森林也是一种bagging算法,通过选取不同的特征生成多个决策树,最后在统一进行联合分类。
python中利用sklearn实现上述模型的过程:
from sklearn.naive_bayes import MultinomialNB
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import AdaBoostClassifier
from sklearn.linear_model import LinearRegression
from sklearn.tree import DecisionTreeRegressor
from sklearn.svm import SVC
clf = MultinomialNB(alpha=2.0)
#clf = RandomForestClassifier
#clf = AdaBoostClassifier
#clf = LinearRegression
#clf = DecisionTreeRegressor
#cls = SVC()
clf.fit(X_train,y_train)
y_pred=clf.predict(X_test)