针对Kaggle-Titanic的小资料

        本文是另一篇博文“机器学习入门:Kaggle -titanic(泰坦尼克)生存预测”的附属小资料,大致搜集了当时用到的预测模型的相关内容,内容乱扒的,但是萌新可以大概看一下好有个概念,详细内容请查阅其他的高质量博文。

from sklearn.ensemble import RandomForestClassifier,GradientBoostingClassifier,ExtraTreesClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC


#汇总不同模型算法
classifiers=[]
classifiers.append(SVC())
classifiers.append(DecisionTreeClassifier())
classifiers.append(RandomForestClassifier())
classifiers.append(ExtraTreesClassifier())
classifiers.append(GradientBoostingClassifier())
classifiers.append(KNeighborsClassifier())
classifiers.append(LogisticRegression())
classifiers.append(LinearDiscriminantAnalysis())

        书接上回,这是在之前用到的各种模型,我们一个一个了解一下。

 

一、SVC支持向量机

SVC()支持向量机:

SVM=Support Vector Machine        支持向量

SVC=Support Vector Classification 支持向量机用于分类

SVR=Support Vector Regression.   支持向量机用于回归分析


        SVM学习的基本想法是求解能够正确划分训练数据集并且几何间隔最大的分离超平面。如上图所示。

        在公式1中,其中Xi为第i个特征向量,Yi为类标记,当它等于+1时为正例;为-1时为负例。再假设训练数据集是线性可分的。

        在公式2中,描绘了几何间隔:对于给定的数据集T和超平面w*x+b=0中,定义超平面关于样本点(Xi,Yi)的几何间隔γi。对于线性可分的数据集来说,这样的超平面有无穷多个(即感知机),但是几何间隔最大的分离超平面却是唯一的。

 

二、DescisionTree()决策树

        决策树是指在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法,一个决策树主要由决策点、状态节点、结果节点三部分组成:

        决策点,是对几种可能方案的选择,即最后选择的最佳方案。如果决策属于多级决策,则决策树的中间可以有多个决策点,以决策树根部的决策点为最终决策方案。

        状态节点,代表备选方案的期望值,通过各状态节点的经济效果的对比,按照一定的决策标准就可以选出最佳方案。由状态节点引出的分支称为概率枝,概率枝的数目表示可能出现的自然状态数目每个分枝上要注明该状态出现的概率。

         结果节点,将每个方案在各种自然状态下取得的损益值标注于结果节点的右端。

 

        

        在决策树的构建中,决策树的剪枝是十分重要的一个环节,剪枝有分预先剪枝和后剪枝两种:

        预先剪枝是在树的生长过程中设定一个指标,当达到该指标时就停止生长,这样做容易产生“视界局限”,就是一旦停止分支,使得节点N成为叶节点,就断绝了其后继节点进行“好”的分支操作的任何可能性。不严格的说这些已停止的分支会误导学习算法,导致产生的树不纯度降差最大的地方过分靠近根节点。

        后剪枝中树首先要充分生长,直到叶节点都有最小的不纯度值为止,因而可以克服“视界局限”。然后对所有相邻的成对叶节点考虑是否消去它们。经过剪枝后叶节点常常会分布在很宽的层次上,树也变得非平衡,克服了“视界局限”效应,而且无需保留部分样本用于交叉验证,所以可以充分利用全部训练集的信息。

        但后剪枝的计算量代价比预剪枝方法大得多,特别是在大样本集中,不过对于小样本的情况,例如本次案例中,后剪枝方法会优于预剪枝方法。

 

 三、RandomForest()随机森林

        随机森林指建立多个决策树并将他们融合起来得到一个更加准确和稳定的模型,是bagging 思想和随机选择特征的结合。

        随机森林构造了多个决策树,当需要对某个样本进行预测时,统计森林中的每棵树对该样本的预测结果,然后通过投票法从这些预测结果中选出最后的结果。随机体现在两个方面,一个是随机取特征,另一个是随机取样本,让森林中的每棵树既有相似性又有差异性。

 

 

 四、ExtraTree()极限树

        该算法与随机森林算法十分相似,都是由许多决策树构成。但该算法与随机森林有两点主要的区别:

        1、随机森林应用的是Bagging模型,而ET是使用所有的训练样本得到每棵决策树,也就是每棵决策树应用的是相同的全部训练样本;

        2、随机森林是在一个随机子集内得到最佳分叉属性,而ET是完全随机的得到分叉值,从而实现对决策树进行分叉的。

        在选定了划分特征后,RF的决策树会基于信息增益,基尼系数,均方差之类的原则,选择一个最优的特征值划分点,这和传统的决策树相同。但是Extra tree比较的激进,会随机的选择一个特征值来划分决策树。从第二点可以看出,由于随机选择了特征值的划分点位,而不是最优点位,这样会导致生成的决策树的规模一般会大于RF所生成的决策树。也就是说,模型的方差相对于RF进一步减少,但是bias相对于RF进一步增大。在某些时候,Extra tree的泛化能力比RF更好.

        可以使用sklearn的ExtraTreesClassifier()来创建一个Extra-Tree分类器。他的 API 跟RandomForestClassifier()是相同的,相似的。ExtraTreesRegressor跟RandomForestRegressor也是相同的 API。

 

五、Gradient Boosting Classifier梯度提升决策树()

        在上篇博文kaggle泰坦尼克案例中最后提交的版本便是用小G预测的。 

        该函数为scikit-learn提供的梯度提升决策树GBDT的分类类,提升树利用加法模型和前向分步算法实现学习的优化过程。当损失函数时平方损失和指数损失函数时,每一步的优化很简单,如平方损失函数学习残差回归树。

 

算法步骤解释:

        1、初始化,估计使损失函数极小化的常数值,它是只有一个根节点的树,即ganma是一个常数值。

        2、反复迭代:

        (a)计算损失函数的负梯度在当前模型的值,将它作为残差的估计

        (b)估计回归树叶节点区域,以拟合残差的近似值

        (c)利用线性搜索估计叶节点区域的值,使损失函数极小化

        (d)更新回归树

        3、得到输出的最终模型 f(x)

        当模型越复杂时,拟合的程度就越高,模型的训练偏差就越小。但此时如果换一组数据可能模型的变化就会很大,即模型的方差很大。所以模型过于复杂的时候会导致过拟合。当模型越简单时,即使我们再换一组数据,最后得出的学习器和之前的学习器的差别就不那么大,模型的方差很小。但可能还会因为模型简单,导致偏差会很大。

        也就是说,当我们训练一个模型时,偏差和方差都得照顾到,漏掉一个都不行。对于Boosting来说,每一步我们都会在上一轮的基础上更加拟合原数据,所以可以保证偏差,因此Boosting可以在较浅深度时完成较高的预测精度。

 

六、 K-neighbors Classifier K最邻近算法

        如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则判断该样本也属于这个类别。

        以本次案例打个比方,如果来自同一地区,家庭规模及成员年龄相似,客舱及身份地位也近乎相同的两组家庭,已知其中一组家庭在本次海难中生还率较高,那么通过该模型可以做出预测:另一组家庭的生还率也会较高。

        很自然的就会想到,如何确定出相似的家庭呢?数据之间的相似度排名是比较容易,最常用的就是欧式距离比较。有了度量方法,kNN算法也就初步成形了。

         上方插图来自scikit-learn的鸢尾花数据集进行KNN处理后的截图。

 

 七、logisicRegression()逻辑回归

        Logistic Regression 虽然被称为回归,但其实际上是分类模型,并常用于二分类。Logistic Regression 因其简单、可并行化、可解释强深受工业界喜爱。
        Logistic 回归的本质是:假设数据服从这个分布,然后使用极大似然估计做参数的估计。

 

        在使用逻辑回归的时候很少会把数据直接丢给 LR 来训练,一般会对特征进行离散化处理,这样做的优势大致有以下几点:

        1.离散后稀疏向量内积乘法运算速度更快,计算结果也方便存储,容易扩展;

        2.离散后的特征对异常值更具鲁棒性,如 age>30 为 1 否则为 0,对于年龄为 200 的也不会对模型造成很大的干扰;

        3.LR 属于广义线性模型,表达能力有限,经过离散化后,每个变量有单独的权重,这相当于引入了非线性,能够提升模型的表达能力,加大拟合;

        4.离散后特征可以进行特征交叉,提升表达能力,由 M+N 个变量编程 M*N 个变量,进一步引入非线形,提升了表达能力;

        5.特征离散后模型更稳定,如用户年龄区间,不会因为用户年龄长了一岁就变化。

 

 八、Linear Discriminant Analysis()线性判别分析

        是一种经典的有监督数据降维方法。LDA的主要思想是将一个高维空间中的数据投影到一个较低维的空间中,且投影后要保证各个类别的类内方差小而类间均值差别大,这意味着同一类的高维数据投影到低维空间后相同类别的聚在一起,而不同类别之间相距较远。

        如下图将二维数据投影到一维直线上:

 

 

        LDA算法流程主要如下:

        输入:数据集 D = {(x1, y1), (x1, y1), ... ,(xm, ym)},任意样本xi为n维向量,yi∈{C1, C2, ... , Ck},共k个类别,现在要将其降维到d维;

        输出:降维后的数据集D'。

        (1)计算类间散度矩阵 SB;

        (2)计算类内散度矩阵 SW;

        (3)将 SB 和 SW 代入上面公式计算得到特征值 λ 和特征向量 w,取前面几个最大的特征值向量λ'与特征向量相乘得到降维转换矩阵 λ'w;

        (4)将原来的数据与转换矩阵相乘得到降维后的数据 (λ'w)Tx ;

        除此之外,常见的模型还有支持向量机(Support Vector Machines)Gaussian Naive Bayes 高斯朴素贝叶斯等。

        scikit-learn中均提供了以上提到的模型初始化API,以线性回归LinearRegression为例:

使用sklearn提供过的算法模型,在数据处理完毕后,若不考虑调参,只需要进行如下步骤

        创建模型:model=LinearRegression()

        训练模型:model.fit(train_X , train_y )

        最后再把需要预测的数据传入这个model即可,返回值便是预测结果。具体代码可以查看这个案例

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值