数据挖掘 分类模型选择

选择的模型有:
决策树、朴素贝叶斯、K近邻、感知机
调用的头文件有:

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from sklearn.linear_model import Perceptron
from sklearn.naive_bayes import GaussianNB
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import cross_val_score
import warnings
from sklearn.metrics import roc_curve, auc

稍微解释一下调用的头文件,好歹别不能分不出来

numpy:提供了强大的数值计算功能,包括对多维数组对象的支持、广播功能、线性代数、傅里叶变换等,是进行科学计算的基础库。pandas:提供了数据结构DataFrame和Series,使得数据处理变得更加简单高效,能够进行数据清洗、重塑、切片、聚合等操作,常用于数据预处理和数据分析中。matplotlib:提供了丰富的绘图工具,可以创建各种类型的静态、交互式、嵌入式图表,用于数据可视化和结果展示。sklearn.linear_model:包含了许多线性模型,如线性回归、逻辑回归、感知机等,用于解决回归和分类问题。sklearn.naive_bayes:实现了朴素贝叶斯分类器,用于处理分类问题,尤其在文本分类等领域应用广泛。sklearn.neighbors:包含了近邻算法,如K近邻分类器和回归器,用于解决分类和回归问题。sklearn.tree:包含了决策树相关的算法,如决策树分类器和回归器,用于解决分类和回归问题。sklearn.model_selection:提供了交叉验证、参数调优等功能,用于评估模型性能和选择最佳参数。warnings:用于控制警告信息的输出和处理,可以帮助我们在开发过程中更好地管理警告信息。sklearn.metrics:提供了常见的模型评估指标,如准确率、精确率、召回率、ROC曲线等,用于评估模型性能。

具体代码:

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from sklearn.linear_model import Perceptron
from sklearn.naive_bayes import GaussianNB
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import cross_val_score
import warnings
from sklearn.metrics import roc_curve, aucwarnings.filterwarnings("ignore")#将警告信息的输出暂时忽略,从而在代码执行过程中不显示警告信息。这对于一些已知的、无关紧要的警告信息,或者在模型训练过程中产生的非致命性警告,可以减少干扰并简化输出结果。
df = pd.read_csv("balance.dat", sep=',')#read_csv支持读取.dat文件
df[" Class"] = df[" Class"].map({" L": 1, " R": -1, " B": np.nan})#将类别标签转换为数值标签
df = df.dropna()#去掉不想要的值
X = df[["Left-weight", " Left-distance", " Right-weight", " Right-distance"]]
Y = df[' Class']
scores, names_model = [], []
metrics = ["precision", "f1", "recall"]#精确率(Precision):表示模型在预测为正例的样本中,真正例的比例metrics = ["precision", "f1", "recall"]#精确率(Precision):表示模型在预测为正例的样本中,真正例的比例召回率(Recall):表示模型能够正确预测为正例的样本在总体正例中的比例。
for model in [DecisionTreeClassifier(), GaussianNB(), KNeighborsClassifier(n_neighbors=3), Perceptron()]:names_model.append(str(model).replace('()', ''))#str()函数将当前迭代中选取的模型转换为字符串。这里的模型是从一个列表中选取的,如前面提到的决策树分类器(DecisionTreeClassifier())。调用字符串的replace()方法,将其中的空括号()替换为空字符串''。这是因为在模型的字符串表示中,通常会包含这些括号,但它们对于后续处理并不重要。model.fit(X, Y)tempt = []for scoring in metrics:#三个指标轮流来score = cross_val_score(model, X, Y, cv=10, scoring=scoring)#10折交叉验证 scoring:性能度量的得分tempt.append(score.mean())#10个数的平均值scores.append(tempt)
scores = pd.DataFrame(scores, index=names_model, columns=metrics)#得分、每个模型的名字、每个性能指标的名称
print(f'''F度量下最优模型为{scores['f1'].idxmax()}''')#三引号是大引号,用二引号是不行的model_dt = DecisionTreeClassifier()#决策树
model_dt.fit(X, Y)
model_nb = GaussianNB()#朴素贝叶斯
model_nb.fit(X, Y)y_prob_dt = model_dt.predict_proba(X)[:, 1]#决策树模型会返回每个类别的概率,而[:, 1]表示我们只关心预测为正类别的概率值。
y_prob_nb = model_nb.predict_proba(X)[:, 1]
fpr_dt, tpr_dt, _ = roc_curve(Y, y_prob_dt)#fpr_dt:false positive rate,即假正率,也就是当真实标签为负类时,被模型错误地预测为正类的样本比例。tpr_dt:true positive rate,即真正率,也就是当真实标签为正类时,被模型正确地预测为正类的样本比例。_:阈值,该值在此处被忽略。在roc_curve()函数中,阈值的值会被计算出来,但在大多数情况下,我们不需要直接使用它。因为在绘制ROC曲线和计算AUC时,我们关注的是不同阈值下的假正率(FPR)和真正率(TPR)的变化趋势,而不是具体的阈值值。我们使用_来忽略阈值的返回值,因为我们只关心fpr_dt和tpr_dt
roc_auc_dt = auc(fpr_dt, tpr_dt)
fpr_nb, tpr_nb, _ = roc_curve(Y, y_prob_nb)#ROC曲线可以帮助我们理解模型在不同阈值下的性能表现,从而选择合适的阈值。AUC是ROC曲线下方的面积,它反映了分类器性能的综合指标。AUC越大,分类器的性能越好,因为它意味着分类器在不同阈值下都有较低的假正率和较高的真正率。通常,AUC值在0.5到1之间,越接近1说明分类器的性能越好。
roc_auc_nb = auc(fpr_nb, tpr_nb)
print(f'决策树模型和朴素贝叶斯模型的AUC值分别为{roc_auc_dt}{roc_auc_nb}')
plt.figure(figsize=(8, 8))
plt.plot(fpr_dt, tpr_dt, color='darkorange', lw=2, )#假正率 真正率 橙色 线宽为2
plt.plot(fpr_nb, tpr_nb, color='blue', lw=2, )
plt.plot([0, 1], [0, 1], color='gray', lw=1, linestyle='--')# 灰色
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic (ROC) Curve')
plt.show()

格式化后的代码:(跟上面一样,看你喜欢看哪个)

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from sklearn.linear_model import Perceptron
from sklearn.naive_bayes import GaussianNB
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import cross_val_score
import warnings
from sklearn.metrics import roc_curve, aucwarnings.filterwarnings("ignore")  # 将警告信息的输出暂时忽略,从而在代码执行过程中不显示警告信息。这对于一些已知的、无关紧要的警告信息,或者在模型训练过程中产生的非致命性警告,可以减少干扰并简化输出结果。
df = pd.read_csv("balance.dat", sep=',')  # read_csv支持读取.dat文件
df[" Class"] = df[" Class"].map({" L": 1, " R": -1, " B": np.nan})  # 将类别标签转换为数值标签(预处理)
df = df.dropna()  # 去掉不想要的值
X = df[["Left-weight", " Left-distance", " Right-weight", " Right-distance"]]
Y = df[' Class']
scores, names_model = [], []
metrics = ["precision", "f1","recall"]  # 精确率(Precision):表示模型在预测为正例的样本中,真正例的比例metrics = ["precision", "f1", "recall"]#精确率(Precision):表示模型在预测为正例的样本中,真正例的比例召回率(Recall):表示模型能够正确预测为正例的样本在总体正例中的比例。
for model in [DecisionTreeClassifier(), GaussianNB(), KNeighborsClassifier(n_neighbors=3), Perceptron()]:names_model.append(str(model).replace('()',''))  # str()函数将当前迭代中选取的模型转换为字符串。这里的模型是从一个列表中选取的,如前面提到的决策树分类器(DecisionTreeClassifier())。调用字符串的replace()方法,将其中的空括号()替换为空字符串''。这是因为在模型的字符串表示中,通常会包含这些括号,但它们对于后续处理并不重要。model.fit(X, Y)tempt = []for scoring in metrics:  # 三个指标轮流来score = cross_val_score(model, X, Y, cv=10, scoring=scoring)  # 10折交叉验证 scoring:性能度量的得分tempt.append(score.mean())  # 10个数的平均值scores.append(tempt)
scores = pd.DataFrame(scores, index=names_model, columns=metrics)  # 得分、每个模型的名字、每个性能指标的名称
print(f'''F度量下最优模型为{scores['f1'].idxmax()}''')  # 三引号是大引号,用二引号是不行的model_dt = DecisionTreeClassifier()  # 决策树
model_dt.fit(X, Y)
model_nb = GaussianNB()  # 朴素贝叶斯
model_nb.fit(X, Y)y_prob_dt = model_dt.predict_proba(X)[:, 1]  # 决策树模型会返回每个类别的概率,而[:, 1]表示我们只关心预测为正类别的概率值。
y_prob_nb = model_nb.predict_proba(X)[:, 1]
fpr_dt, tpr_dt, _ = roc_curve(Y,y_prob_dt)  # fpr_dt:false positive rate,即假正率,也就是当真实标签为负类时,被模型错误地预测为正类的样本比例。tpr_dt:true positive rate,即真正率,也就是当真实标签为正类时,被模型正确地预测为正类的样本比例。_:阈值,该值在此处被忽略。在roc_curve()函数中,阈值的值会被计算出来,但在大多数情况下,我们不需要直接使用它。因为在绘制ROC曲线和计算AUC时,我们关注的是不同阈值下的假正率(FPR)和真正率(TPR)的变化趋势,而不是具体的阈值值。我们使用_来忽略阈值的返回值,因为我们只关心fpr_dt和tpr_dt
roc_auc_dt = auc(fpr_dt, tpr_dt)
fpr_nb, tpr_nb, _ = roc_curve(Y,y_prob_nb)  # ROC曲线可以帮助我们理解模型在不同阈值下的性能表现,从而选择合适的阈值。AUC是ROC曲线下方的面积,它反映了分类器性能的综合指标。AUC越大,分类器的性能越好,因为它意味着分类器在不同阈值下都有较低的假正率和较高的真正率。通常,AUC值在0.5到1之间,越接近1说明分类器的性能越好。
roc_auc_nb = auc(fpr_nb, tpr_nb)
print(f'决策树模型和朴素贝叶斯模型的AUC值分别为{roc_auc_dt}{roc_auc_nb}')
plt.figure(figsize=(8, 8))
plt.plot(fpr_dt, tpr_dt, color='darkorange', lw=2, )  # 假正率 真正率 橙色 线宽为2
plt.plot(fpr_nb, tpr_nb, color='blue', lw=2, )
plt.plot([0, 1], [0, 1], color='gray', lw=1, linestyle='--')  # 灰色
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic (ROC) Curve')
plt.show()

图像:(把标题放下面太麻烦了,我也没整明白,将就着看吧)
在这里插入图片描述
相比之下:在这个数据集中,决策树比朴素贝叶斯要好

补充一下

处理数据的时候别忘记数据预处理和数据归一化
上面这段代码并未执行归一化,当然也不太需要

对于分类模型的话:比较推荐logic回归和朴素贝叶斯

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/203260.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

echerts 循环图 显示获取不到id

报错:Uncaught TypeError: Cannot read properties of null (reading getAttribute), 我所出现的问题是 1,我在循环方法的时候 id没有从0开始,把id变成从0开始循环 2,设置myChart 全局属性 呈现效果 代码 html 动态绑…

0X05

打开题目 点击完登录和注册都没有什么反应,所以先扫一下看看 在出现admin.php后就截止了,访问看看,进入后台。。 尝试一下弱口令 admin/12345 或者是demo/demo 设计中-自定义->右上角导出主题 找到一个导出的点,下载了一个1.zip压缩包…

C#图像处理OpenCV开发指南(CVStar,07)——通用滤波(Filter2D)的实例代码

1 函数定义 void Filter2D (Mat src, Mat dst, int ddepth, InputArray kernel, Point anchor Point(-1,-1), double delta 0, int borderType BORDER_DEFAULT ) 1.1 原型 #include <opencv2/imgproc.hpp> Convolves an image wit…

Cocos Creator加入图片没有被识别

原因&#xff0c;需要更换类型&#xff0c;选择下图中的类型

VR远程带看,助力线下门店线上化转型“自救”

VR远程带看&#xff0c;因自身高效的沉浸式在线沟通功能&#xff0c;逐渐走进了大众的视野。身临其境的线上漫游体验以及实时同屏互联的新型交互模式&#xff0c;提升了商家同用户之间的沟通效率&#xff0c;进一步实现了远程线上一对一、一对多的同屏带看&#xff0c;用户足不…

卡码网 46携带研究材料 LeetCode 416分割等和数组 1049最后一块石头的重量-ii | 代码随想录25期训练营day42、43

动态规划算法4 卡码网 46 携带研究材料 2023.12.6 题目链接常规二维dp数组方法代码随想录讲解[链接]一维滚动数组方法代码随想录讲解[链接] //二维dp数组做法 #include<bits/stdc.h> using namespace std;int main() {//m为材料种类数&#xff0c;n为行李箱最大空间数…

如何使用 Zotero 导出所选条目的 PDF 文件

如何使用 Zotero 导出所选条目的 PDF 文件 Zotero 是一款强大的参考文献管理工具&#xff0c;但它并不直接提供将整个文件夹导出为 PDF 的选项。不过&#xff0c;您可以使用以下步骤来导出您所选的 Zotero 条目中的 PDF 文件&#xff0c;无需额外的插件。 选择所需的 Zotero 条…

智能优化算法应用:基于鹰栖息算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于鹰栖息算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于鹰栖息算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.鹰栖息算法4.实验参数设定5.算法结果6.参考文献7.…

【华为数据之道学习笔记】3-1 基于数据特性的分类管理框架

华为根据数据特性及治理方法的不同对数据进行了分类定义&#xff1a;内部数据和外部数据、结构化数据和非结构化数据、元数据。其中&#xff0c;结构化数据又进一步划分为基础数据、主数据、事务数据、报告数据、观测数据和规则数据。 对上述数据分类的定义及特征描述。 分类维…

Spring Boot 项目的创建、配置文件、日志

文章目录 Spring Boot 优点创建 Spring Boot 项目创建项目认识目录网页创建&#xff08;了解&#xff09; 约定大于配置Spring Boot 配置文件配置文件格式读取配置项properties 配置文件yml 配置文件基本语法进阶语法配置对象配置集合yml 设置不同环境的配置文件 Spring Boot 日…

C语言之联合和枚举

C语言之联合和枚举 文章目录 C语言之联合和枚举1. 联合体1.1 联合体的声明1.2 联合体的特点1.3 结构体和联合体对比1.4 联合体大小的计算1.5 联合体小练习 2. 枚举2.1 枚举类型的声明2.2 枚举类型的优点2.3 枚举类型的使用 1. 联合体 1.1 联合体的声明 像结构体⼀样&#xff…

10-tornado项目部署

1. python3的安装和配置 1.1 安装系统依赖包 sudo dnf install wget yum-utils make gcc openssl-devel bzip2-devel libffi-devel zlib-devel -y1.2 下载Python wget https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tgz1.3 解压 tar xzf Python-3.9.5.tgz 1.4 安装…

HarmonyOS4.0从零开始的开发教程04 初识ArkTS开发语言(下)

HarmonyOS&#xff08;二&#xff09; 初识ArkTS开发语言&#xff08;下&#xff09;之TypeScript入门 声明式UI基本概念 应用界面是由一个个页面组成&#xff0c;ArkTS是由ArkUI框架提供&#xff0c;用于以声明式开发范式开发界面的语言。 声明式UI构建页面的过程&#xff…

C练习题13

单项选择题(本大题共20小题,每小题2分,共40分。在每小题给出的四个备选项中,选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。) 1.结构化程序由三种基本结构组成、三种基本结构组成的算法是() A.可以完成任何复杂的任务 B. 只能完成部分复杂的任务 C. 只能完…

绘图 Seaborn 10个示例

绘图 Seaborn 是什么安装使用显示中文及负号散点图箱线图小提琴图堆叠柱状图分面绘图分类散点图热力图成对关系图线图直方图 是什么 Seaborn 是一个Python数据可视化库&#xff0c;它基于Matplotlib。Seaborn提供了高级的绘图接口&#xff0c;可以用来绘制各种统计图形&#xf…

Baumer工业相机堡盟工业相机如何通过BGAPISDK将相机图像高速保存到电脑内存(C#)

Baumer工业相机堡盟工业相机如何通过BGAPISDK将相机图像高速保存到电脑内存&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机图像保存到电脑内存的技术背景代码分析注册SDK回调函数BufferEvent声明可以存储相机图像的内存序列和名称在图像回调函数中将图像保存在内存序…

华为配置流量抑制示例

如拓扑图所示&#xff0c;SwitchA作为二层网络到三层路由器的衔接点&#xff0c;需要限制二层网络转发的广播、未知组播和未知单播报文&#xff0c;防止产生广播风暴&#xff0c;同时限制二三层网络转发的已知组播和已知单播报文&#xff0c;防止大流量冲击。 配置思路 用如下…

利用STM32内置Bootloader实现USB DFU固件升级

本文将介绍如何利用STM32内置的Bootloader来实现USB DFU&#xff08;Device Firmware Upgrade&#xff09;固件升级功能。首先&#xff0c;我们会介绍USB DFU的原理和工作流程。然后&#xff0c;我们将详细讲解如何配置STM32芯片以支持USB DFU&#xff0c;并提供相应的代码示例…

MySQL授权密码

mysql> crate databases school charcter set utf8; Query OK, 1 row affected, 1 warning (0.00 sec) 2.在school数据库中创建Student和Score表 mysql> use school Database changed mysql> create table student-> -> (id int(10) primary key auto_incremen…

介绍几个有意思的 GitHub 仓库

大家好&#xff0c;我是风筝。 今天介绍几个很有意思的 github 开源项目&#xff0c;看过之后就会发现&#xff0c;github 果然深意暗藏。 GitHub对于程序员来说&#xff0c;再熟悉不过了&#xff0c;绝大多数时候&#xff0c;我们到上面都是为了学习高质量的源代码&#xff…