百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

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

off999 2024-10-10 07:51 24 浏览 0 评论

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

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

考虑到文章篇幅过长,计划使用四个章节完成介绍,本文为第三章节,主要介绍通过基于不同方式所构建的训练集/测试集,在K近邻、支持向量机、决策树等分类算法下的识别率差异;


数据集背景

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

数据描述

  • 数据来源:Index of /ml/machine-learning-databases/iris
  • 实例数量: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-setosa
4.9,3.0,1.4,0.2,Iris-setosa
4.7,3.2,1.3,0.2,Iris-setosa
4.6,3.1,1.5,0.2,Iris-setosa
5.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各分类算法及调参调优(四)

相关推荐

Python中的两个内置函数id()和type()

id()>>>id(3)2531362761072>>>id(3.222222)2531397393680>>>id(3.0)25313...

python 函数中,如何将另一个函数作为参数传递

python函数中,如何将另一个函数作为参数传递,类似C#委托defadd(a,b):"""这是一个简单的加法函数,接受两个参数并返回它们的和。""...

Python性能暴涨10倍的终极指南:7个核心技巧+代码压缩秘籍

提升Python程序运行性能,使代码运行更流畅更快,以及压缩代码,减小代码大小,下面的方法仅供大家参考,有什么更好的方法在评论区说说。1.使用NumPy/SciPy替代纯Python循环...

Python 匿名函数(Lambda 函数)详解

匿名函数(AnonymousFunction),在Python中称为lambda函数,是一种不需要使用def关键字定义的小型函数。它主要用于简化代码,特别适合需要函数对象的地方。1.基...

Python学习笔记 | 匿名函数lambda、映射函数map和过滤函数filter

什么是匿名函数?定义:没有函数名的自定义函数场景:函数体非常简单,使用次数很少,没有必要声明函数,通常搭配高阶函数使用。高阶函数是能够把函数当成参数进行传递的函数,如:映射函数map和过滤函数fil...

python练习:自定义函数调用:商品购物实例

1、商品录入dict_myshanpin_iof={101:{"商品名称":"毛毛熊","单价":25},102:{"商品名称":...

Python中如何使用Lambda函数(lambda在python中的用法)

Python和其他编程语言一样,都在其语法中添加了lambda函数,Pythonlambda是匿名函数,比常规Python自定义函数有更简洁的语法。虽然Lambda语法在开始时可能会觉得有点混乱,...

8-Python内置函数(python内置函数代码)

Python提供了丰富的内置函数,这些函数可以直接使用而无需导入任何模块。以下是一些常用的内置函数及其示例:1-print()1-1-说明输出指定的信息到控制台。1-2-例子2-len()2-1-说...

用Python进行函数式编程(python函数程序)

什么是函数式编程?函数式程序设计是一种编程范例,它把计算当作数学函数的评价,避免状态和可变数据。换句话说,函数编程(FunctionalProgramming,FP)促进没有副作用和不变变量的代码。它...

python 函数进阶(python如何进阶)

1.有名函数和匿名函数#该函数有名称,名称是adddefadd(x,y):returnx+y#改函数没有名称属于匿名函数,也叫lambda表达式lambda_add...

python自学者的分享:自定义函数、参数作用域、匿名函数、装饰器

#自定义新函数函数名newhsdefnewhs(a,b=1):#b的默认值为1,在没有传入b值时,采用默认值,,默认值参数不能放前边returna-bprint(newh...

Python 函数式编程的 8 大核心技巧,不允许你还不会

函数式编程是一种强调使用纯函数、避免共享状态和可变数据的编程范式。Python虽然不是纯函数式语言,但提供了丰富的函数式编程特性。以下是Python函数式编程的8个核心技巧:1.纯函数(...

零基础到发布:手把手教你创建并分发 Python 自定义库

作为程序员,我们经常依赖各种外部库来解决不同的问题。这些库由技术娴熟的开发者创建,为我们提供了节省时间和精力的解决方案。但你是否曾想过:“我也能创建属于自己的自定义库吗?”答案是肯定的!本文将为你详细...

打工人学Python:(七)自定义函数,打造自己的武器库

从一个简单的函数开始#!/usr/bin/envpython#-*-encoding:utf-8-*-'''@Purpose:Wordcount@...

肖sir_python自定义函数format、zip函数

python自定义函数一、常见的自定义函数已经学过的函数:list、print、set、str、type、tuple、dict、range、input等今天学的函数:format二、实战讲解(一)f...

取消回复欢迎 发表评论: