Python sklearn各分类算法及调参调优(三)

最近在学习分类算法及Python的相关实现,感觉灰常有趣,在此将所了解的内容归纳,分享一下,整体内容主要包含以下几点:

  • 通过seaborn实现数据集不同特征之间的关系以及分布的可视化;
  • 通过train_test_split、StratifiedKFold实现不同的训练集/测试集的构建;
  • 基于不同方式所构建的训练集/测试集,在K近邻、支持向量机、决策树等分类算法下的识别率差异;
  • 通过GridSearchCV实现分类算法参数的最优化组合;

  • 数据集背景

    首先先简单介绍下数据集,如下:

    数据描述

  • 实例数量:150(三个类各50个)
  • 属性数量:4个特征数值属性、一个预测属性,属性信息如下:1. 萼片长度(厘米);2. 萼片宽度(厘米);3.花瓣长度(厘米);4. 花瓣宽度(厘米);5. 类(Iris Setosa——山鸢尾,Iris Versicolour——杂色鸢尾,Iris Virginica——维吉尼亚鸢尾)
  • 缺少属性值:None
  • 类别分布:3个类别各占33.3%。
  • 数据样例

    iris.data文件数据样例,如下:

    5.1,3.5,1.4,0.2,Iris-setosa4.9,3.0,1.4,0.2,Iris-setosa4.7,3.2,1.3,0.2,Iris-setosa4.6,3.1,1.5,0.2,Iris-setosa5.0,3.6,1.4,0.2,Iris-setosa

    分类算法

    K近邻法

    K最近邻(k-Nearest Neighbor,KNN)分类算法的核心思想是如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。KNN算法可用于多分类,KNN算法不仅可以用于分类,还可以用于回归。通过找出一个样本的k个最近邻居,将这些邻居的属性的平均值赋给该样本,作为预测值。

    线性鉴别分析

    线性鉴别分析(Linear Discriminant Analysis, LDA)是模式识别的经典算法,线性鉴别分析的基本思想是将高维的模式样本投影到最佳鉴别矢量空间,以达到抽取分类信息和压缩特征空间维数的效果,投影后保证模式样本在新的子空间有最大的类间距离和最小的类内距离,即模式在该空间中有最佳的可分离性。因此,它是一种有效的特征抽取方法。使用这种方法能够使投影后模式样本的类间散布矩阵最大,并且同时类内散布矩阵最小。就是说,它能够保证投影后模式样本在新的空间中有最小的类内距离和最大的类间距离,即模式在该空间中有最佳的可分离性。

    支持向量机

    SVM(Support Vector Machine),即支持向量机,主要用于解决模式识别领域中的数据分类问题,属于有监督学习算法的一种。支持向量机(support vector machines) 是找到一个超平面(hyperplane)将数据划分为一类与其他类的一种二类分类模型,分离间隔最大而区别于感知机。适用于:数据可直接分为两类(采用error-correcting output codes 方法区分多类)、高维不能线性可分的数据、简单分类。

    逻辑回归算法

    逻辑回归算法(LogisticRegression)虽然是线性回归算法,但是其它线性回归有所不同,逻辑回归的预测结果只有两种,即true(1)和false(0)。因此,Logistic regression ( 逻辑回归 ) ,尽管它的名字是回归,是一个用于分类的线性模型而不是用于回归。所以,逻辑回归算法往往适用于数据的分类。

    随机森林

    随机森林(Random Forest)是一种一决策树为基学习器的Bagging算法,但是不同之处在于RF决策树的训练过程中还加入了随机属性选择(特征上的子采样)。随机森林就是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树,而它的本质属于机器学习的一大分支——集成学习(Ensemble Learning)方法。

    朴素贝叶斯

    朴素贝叶斯模型被广泛应用于互联 新闻的分类、垃圾邮件的筛选等分类任务,它单独考量每一维度特征被分类的条件概率,然后综合这些概率对其所在的特征向量做出分类预测,即“假设各个维度上的特征被分类的条件概率之间是相互独立的”,该假设使得模型预测需要估计的参数规模从指数数量级减少到线性数量级,极大地节约了计算时间和空间。该模型在训练时没考虑各个特征之间的联系,对于数据特征关联性较强的分类任务表现不好。

    决策树

    决策树(Decision Trees ,DTs)是一种无监督的学习方法,用于分类和回归。它对数据中蕴含的决策规则建模,以预测目标变量的值。决策树算法主要是指决策树进行创建中进行树分裂(划分数据集)的时候选取最优特征的算法,他的主要目的就是要选取一个特征能够将分开的数据集尽量的规整,也就是尽可能的纯. 最大的原则就是: 将无序的数据变得更加有序。

    基于train_test_split构建的训练/测试集分类效果

    我们在Python sklearn各分类算法及调参调优(二)中介绍了使用
    sklearn.model_selection.train_test_split按比例随机划分训练集和测试集,接下来基于划分好的训练集和测试集,使用上述各分类算法,计算分类识别率,代码实现如下:

    计算结果如下:

    基于StratifiedKFold构建的训练/测试集分类效果

    我们在Python sklearn各分类算法及调参调优(二)中介绍了使用
    sklearn.model_selection.StratifiedKFold将全部训练集分成5个不相交的子集,相应的子集为{s1,s2,…,sk}每次从分好的子集里面,拿出一个作为测试集,其他k-1个作为训练集。在k-1个训练集上训练出各分类算法模型,把这个模型放到测试集上,得到分类率的平均值,作为该模型或者假设函数的真实分类识别率,代码实现如下:

    不难发现,使用StratifiedKFold构建训练/测试集的方式,能够得到分类识别更高的分类模型。

    若对你有所帮助,欢迎大家评论、留言、关注,感谢支持!

    关联阅读

    Python sklearn各分类算法及调参调优(一)

    Python sklearn各分类算法及调参调优(二)

    Python sklearn各分类算法及调参调优(三)

    Python sklearn各分类算法及调参调优(四)

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2019年3月21日
    下一篇 2019年3月21日

    相关推荐