Python sklearn各分类算法及调参调优(三)
off999 2024-10-10 07:51 29 浏览 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-简易计算器的元素介绍
-
[烟花]了解模板代码的组成importPySimpleGUIassg#1)导入库layout=[[],[],[]]#2)定义布局,确定行数window=sg.Window(...
- 如何使用Python编写一个简单的计算器程序
-
Python是一种简单易学的编程语言,非常适合初学者入门。本文将教您如何使用Python编写一个简单易用的计算器程序,帮助您快速进行基本的数学运算。无需任何高深的数学知识,只需跟随本文的步骤,即可轻松...
- 用Python打造一个简洁美观的桌面计算器
-
最近在学习PythonGUI编程,顺手用Tkinter实现了一个简易桌面计算器,功能虽然不复杂,但非常适合新手练手。如果你正在学习Python,不妨一起来看看这个项目吧!项目背景Tkint...
- 用Python制作一个带图形界面的计算器
-
大家好,今天我要带大家使用Python制作一个具有图形界面的计算器应用程序。这个项目不仅可以帮助你巩固Python编程基础,还可以让你初步体验图形化编程的乐趣。我们将使用Python的tkinter库...
- 用python怎么做最简单的桌面计算器
-
有网友问,用python怎么做一个最简单的桌面计算器。如果只强调简单,在本机运行,不考虑安全性和容错等的话,你能想到的最简单的方案是什么呢?我觉得用tkinter加eval就够简单的。现在开整。首先创...
- 说好的《Think Python 2e》更新呢!
-
编程派微信号:codingpy本周三脱更了,不过发现好多朋友在那天去访问《ThinkPython2e》的在线版,感觉有点对不住呢(实在是没抽出时间来更新)。不过还好本周六的更新可以实现,要不就放一...
- 构建AI系统(三):使用Python设置您的第一个MCP服务器
-
是时候动手实践了!在这一部分中,我们将设置开发环境并创建我们的第一个MCP服务器。如果您从未编写过代码,也不用担心-我们将一步一步来。我们要构建什么还记得第1部分中Maria的咖啡馆吗?我们正在创...
- 函数还是类?90%程序员都踩过的Python认知误区
-
那个深夜,你在调试代码,一行行检查变量类型。突然,一个TypeError错误蹦出来,你盯着那句"strobjectisnotcallable",咖啡杯在桌上留下了一圈深色...
- 《Think Python 2e》中译版更新啦!
-
【回复“python”,送你十本电子书】又到了周三,一周快过去一半了。小编按计划更新《ThinkPython2e》最新版中译。今天更新的是第五章:条件和递归。具体内容请点击阅读原文查看。其他章节的...
- Python mysql批量更新数据(兼容动态数据库字段、表名)
-
一、应用场景上篇文章我们学会了在pymysql事务中批量插入数据的复用代码,既然有了批量插入,那批量更新和批量删除的操作也少不了。二、解决思路为了解决批量删除和批量更新的问题,提出如下思路:所有更新语...
- Python Pandas 库:解锁 combine、update 和compare函数的强大功能
-
在Python的数据处理领域,Pandas库提供了丰富且实用的函数,帮助我们高效地处理和分析数据。今天,咱们就来深入探索Pandas库中四个功能独特的函数:combine、combine_fi...
- 记录Python3.7.4更新到Python.3.7.8
-
Python官网Python安装包下载下载文件名称运行后选择升级选项等待安装安装完毕打开IDLE使用Python...
- Python千叶网原图爬虫:界面化升级实践
-
该工具以Python爬虫技术为核心,实现千叶网原图的精准抓取,突破缩略图限制,直达高清资源。新增图形化界面(GUI)后,操作门槛大幅降低:-界面集成URL输入、存储路径选择、线程设置等核心功能,...
- __future__模块:Python语言版本演进的桥梁
-
摘要Python作为一门持续演进的编程语言,在版本迭代过程中不可避免地引入了破坏性变更。__future__模块作为Python兼容性管理的核心机制,为开发者提供了在旧版本中体验新特性的能力。本文深入...
- Python 集合隐藏技能:add 与 update 的致命区别,90% 开发者都踩过坑
-
add函数的使用场景及错误注意添加单一元素:正确示例:pythons={1,2}s.add(3)print(s)#{1,2,3}错误场景:试图添加可变对象(如列表)会报错(Pytho...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)