首页 > 其他分享 >2024.12.2(周一)

2024.12.2(周一)

时间:2024-12-02 16:57:00浏览次数:8  
标签:2024.12 score print 4f train scores test 周一

import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix, make_scorer
from sklearn.tree import DecisionTreeClassifier

# 1. 加载 Iris 数据集
iris = datasets.load_iris()  # 使用sklearn.datasets加载Iris数据集
X = iris.data  # 特征数据
y = iris.target  # 标签数据

# 使用留出法(hold-out)将数据集分割为训练集和测试集,1/3作为测试集
# test_size=0.33 表示将33%的数据用作测试集,random_state=42 用于设置随机种子以确保可重复性,stratify=y 确保分割后类别比例一致
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42, stratify=y)

# 打印训练集和测试集的形状
print(f"训练集形状: {X_train.shape}, 测试集形状: {X_test.shape}")

# 2. 使用带预剪枝的决策树训练模型
# DecisionTreeClassifier 创建决策树分类器:
# max_depth=5 限制树的最大深度为5,防止过度拟合;
# min_samples_split=10 限制每个内部节点最少需要10个样本才能进行划分;
# min_samples_leaf=5 限制每个叶子节点最少需要5个样本;
# random_state=42 设置随机种子,保证结果可重复
clf_pre_prune = DecisionTreeClassifier(max_depth=5, min_samples_split=10, min_samples_leaf=5, random_state=42)

# 训练模型
clf_pre_prune.fit(X_train, y_train)

# 3. 使用五折交叉验证评估模型性能
# cross_val_score 进行交叉验证,返回不同折次的评分结果
# cv=5 指定五折交叉验证,scoring='accuracy' 使用准确度评分
accuracy_scores = cross_val_score(clf_pre_prune, X_train, y_train, cv=5, scoring='accuracy')

# 使用加权精度评分(weighted average),适用于类别不平衡的情况
# make_scorer 用于将精度、召回率、F1值等指标转化为可用的评分函数
precision_scores = cross_val_score(clf_pre_prune, X_train, y_train, cv=5, scoring=make_scorer(precision_score, average='weighted'))

# 使用加权召回率评分
recall_scores = cross_val_score(clf_pre_prune, X_train, y_train, cv=5, scoring=make_scorer(recall_score, average='weighted'))

# 使用加权F1值评分
f1_scores = cross_val_score(clf_pre_prune, X_train, y_train, cv=5, scoring=make_scorer(f1_score, average='weighted'))

# 输出五折交叉验证的平均值和标准差
print(f"准确度: {accuracy_scores.mean():.4f} ± {accuracy_scores.std():.4f}")
print(f"精度: {precision_scores.mean():.4f} ± {precision_scores.std():.4f}")
print(f"召回率: {recall_scores.mean():.4f} ± {recall_scores.std():.4f}")
print(f"F1 值: {f1_scores.mean():.4f} ± {f1_scores.std():.4f}")

# 4. 使用测试集对模型进行评估

# 使用训练好的模型对测试集进行预测
y_pred = clf_pre_prune.predict(X_test)  # 对测试集进行预测,返回预测的标签

# 计算各项性能指标
# accuracy_score 计算准确度
accuracy = accuracy_score(y_test, y_pred)

# precision_score 计算精度,average='weighted' 表示对每个类别的精度进行加权平均
precision = precision_score(y_test, y_pred, average='weighted')

# recall_score 计算召回率,average='weighted' 表示对每个类别的召回率进行加权平均
recall = recall_score(y_test, y_pred, average='weighted')

# f1_score 计算 F1 值,average='weighted' 表示对每个类别的 F1 值进行加权平均
f1 = f1_score(y_test, y_pred, average='weighted')

# 输出测试集的评估指标
print(f"测试集准确度: {accuracy:.4f}")
print(f"测试集精度: {precision:.4f}")
print(f"测试集召回率: {recall:.4f}")
print(f"测试集 F1 值: {f1:.4f}")

# 打印混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)  # confusion_matrix 返回混淆矩阵
print("混淆矩阵:")
print(conf_matrix)

 

标签:2024.12,score,print,4f,train,scores,test,周一
From: https://www.cnblogs.com/Sunyiran/p/18582182

相关文章

  • 2024.12.6(周五)
    #导入相关库importnumpyasnpfromsklearn.datasetsimportload_irisfromsklearn.model_selectionimporttrain_test_split,cross_val_scorefromsklearn.clusterimportKMeansfromsklearn.metricsimportaccuracy_score,precision_score,recall_score,f1_scor......
  • 2024.12.5(周四)
    #导入必要的库importnumpyasnpfromsklearnimportdatasetsfromsklearn.model_selectionimporttrain_test_split,cross_val_score,StratifiedKFoldfromsklearn.naive_bayesimportGaussianNBfromsklearn.metricsimportaccuracy_score,precision_score,reca......
  • 2024.12.9(周一)
    importnumpyasnpimportpandasaspdfromsklearnimportdatasetsfromsklearn.model_selectionimporttrain_test_split,cross_val_score,StratifiedKFoldfromsklearn.ensembleimportRandomForestClassifierfromsklearn.metricsimportaccuracy_score,prec......
  • 11.25 周一日常
    11.25周一日常Q1.1200给定x,y,k,k次操作,每次操作:x++,若x可被y整除,x一直除以y。问最终x的值。(x,y,k≤1e9)Q2.1400给定一等差数列a,每次操作:令最大值=mex{a}。问是否可以将a变成0~n-1的排列和最小操作次数。(1e18)Q3.1600给定一数组和lim,设操作l,r:i:l->r,令s=0,s+=a[i];每一步如......
  • 2024.11.25(周一)
    用Java代码模拟实现课堂上的“银行账户”的实例,要求编写客户端测试代码模拟用户存款和取款,注意账户对象状态和行为的变化。实验要求:1.    画出对应的类图;2.    提交源代码;3.注意编程规范。  1、类图  2、源代码(1)GreenState.javapackagerjsj.no22;......
  • 2024.9.30(周一)
    <%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPEhtml><html><head><title>产品批次</title><style>/*整体页面布局和样式*/......
  • 第二周9.2周一学习总结
    双指针洛谷题目A+B#include<bits/stdc++.h>#defineintlonglongconstintmaxn=2e5+10;inta[maxn];usingnamespacestd;signedmain() { intn,c; cin>>n>>c; for(inti=0;i<n;i++) { cin>>a[i]; } sort(a,a+n); intsum=0; f......
  • [每周一更]-(第111期):从零开始:如何在 CentOS 上源码编译安装 PHP 7.4
    文章目录系统信息:0、安装版本:1、下载/解压2、安装依赖3、配置autoconf4、配置参数5、编译和安装6、验证安装的插件6.1、配置php.ini6.2、配置opcache7、错误7.1Failedtoconnectto2a03:2880:f10e:83:face:b00c:0:25de:Networkisunreachable7.1.1禁用yum使用I......
  • 欧阳坚持每周一篇高质量文章,半年后收入1380.27元
    前言大家好,我是欧阳,到目前为止欧阳已经坚持连续高质量周更文章7个多月了。在第6个月时就想写一篇半年总结,但是因为拖延症直到现在才写这篇半年复盘文章。我的成果先来说一下连续周更半年取得的成果,分别是收入1380.27元、电子书一本、微信技术群418人、微信好友459人、文章38篇......
  • 【待看】一周一深入之深入剖析PHP反序列化phar、session、soap反序列化
    引言接上个文章,一周一深入之深入剖析PHP反序列化上个文章把php反序列化的基础以及trick总结完了,这篇文章就总结一下PHP常见的三个组件反序列化,Phar、session、soap反序列化。一周一深入之深入剖析PHP反序列化phar、session、soap反序列化引言一、什么是Phar以及Phar反序列化Phar......