首页 > 其他分享 >机器学习 实验四

机器学习 实验四

时间:2024-12-31 12:19:30浏览次数:1  
标签:iris 机器 步骤 train 学习 test score 实验 print

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

# 步骤(1):加载数据集并划分训练集和测试集
print("步骤(1):加载 iris 数据集,并使用留出法留出 1/3 的样本作为测试集")
iris = load_iris()
X, y = iris.data, iris.target
# 使用 stratify 参数保证训练集和测试集的类别分布一致
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1/3, stratify=y, random_state=42)
print("数据集划分完成")

# 步骤(2):初始化带有预剪枝参数的决策树分类器
print("\n步骤(2):使用训练集训练 C4.5 算法,设置预剪枝参数")
clf = DecisionTreeClassifier(criterion='entropy', # 使用信息增益率进行特征选择
                             max_depth=None,      # 不限制最大深度,需通过交叉验证调整
                             min_samples_split=2, # 内部节点再划分所需最小样本数
                             min_samples_leaf=1,  # 叶子节点所需最小样本数
                             random_state=42)

# 步骤(3):使用五折交叉验证评估模型性能
print("\n步骤(3):使用五折交叉验证对模型性能进行评估")
kf = KFold(n_splits=5, shuffle=True, random_state=42)
cv_scores = cross_val_score(clf, X_train, y_train, cv=kf, scoring='accuracy')
print(f"交叉验证得分: {cv_scores}")
print(f"平均交叉验证得分: {np.mean(cv_scores)}")

# 训练模型
print("正在训练模型...")
clf.fit(X_train, y_train)
print("模型训练完成")

# 步骤(4):使用测试集测试模型性能
print("\n步骤(4):使用测试集测试模型性能,并分析结果")
y_pred = clf.predict(X_test)

# 性能评估
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred, average='weighted')
recall = recall_score(y_test, y_pred, average='weighted')
f1 = f1_score(y_test, y_pred, average='weighted')

print(f"准确度: {accuracy}")
print(f"精度: {precision}")
print(f"召回率: {recall}")
print(f"F1 值: {f1}")

# 注意事项:对于后剪枝,scikit-learn 的决策树并不直接支持。
# 我们可以通过网格搜索或随机搜索来寻找最优的 'max_depth' 或其他参数,
# 这样可以间接地实现后剪枝的效果。

  

标签:iris,机器,步骤,train,学习,test,score,实验,print
From: https://www.cnblogs.com/youxiandechilun/p/18643699

相关文章

  • 机器学习 实验七
    #导入必要的库fromsklearnimportdatasetsfromsklearn.model_selectionimporttrain_test_splitfromsklearn.clusterimportKMeansfromsklearn.metricsimportsilhouette_score,accuracy_score,adjusted_rand_scoreimportnumpyasnp#(1)加载数据集并划分数据......
  • 机器学习 实验六
    #导入必要的库fromsklearnimportdatasetsfromsklearn.model_selectionimporttrain_test_split,cross_validatefromsklearn.naive_bayesimportGaussianNBfromsklearn.metricsimportaccuracy_score,precision_score,recall_score,f1_scoreimportnumpyasnp......
  • 机器学习 实验八
    #导入必要的库fromsklearnimportdatasetsfromsklearn.model_selectionimporttrain_test_split,cross_validatefromsklearn.ensembleimportRandomForestClassifierfromsklearn.metricsimportaccuracy_score,precision_score,recall_score,f1_scoreimportnu......
  • 飞书lark机器人 自动化发版
    飞书lark机器人自动化发版#1介绍开发飞书机器人接收消息并调用构建接口,实现自动化发版发送指令->机器人接收指令->调用jenkins-job远程构建与部署jenkins配置,勾选job配置的触发远程构建并设置身份验证令牌#测试触发远程构建curl-ks-uuser:user_token-......
  • 学习 lambda
    JavaLambda表达式|菜鸟教程(runoob.com)根据菜鸟教程学习Lambda表达式概述定义:Lambda表达式是Java8引入的一个特性,它允许开发者以更加简洁和紧凑的方式编写匿名类的替代品。它们通常用于实现函数式接口(即只有一个抽象方法的接口)。语法:(parameters)->expressio......
  • 学习 stream 流
    Java8引入了StreamAPI,这是一个处理集合数据的强大工具,它允许你以声明式的方式对数据进行各种操作,如过滤、映射、排序、归约等。Stream不存储数据,而是像管道一样传输和转换数据元素。你可以将Stream看作是高级迭代器,它提供了一种更抽象的方式来遍历和操作数据集。Stream的......
  • GO 学习笔记之零 (四)字符串处理集锦
    1、遍历字符串中的每个字符 2、去掉字符串前后空格strings.TrimSpace(str)3、字符串长度len(str)4、缓存方式拼接字符串var_bufferbytes.Buffer//定义缓存字符串变量_buffer.WriteString(str1)//拼接字符串_buffer.WriteString(str2[0:1])//拼接字符_buffer......
  • 计算机专业大学四年的学习路线(非常详细),零基础入门到精通,看这一篇就够了
    前言许多学子选择踏上计算机这条充满挑战与机遇的道路。但在大学四年中,如何规划自己的学习路线,才能在毕业时脱颖而出,成为行业的佼佼者呢?第一学年:基础知识的奠基1.1课程安排在大学的第一年,重点是打好基础,掌握计算机科学的核心概念。通常你会接触到以下课程:计算机科学导......
  • 宠物照料模块项目实验报告
    宠物照料模块项目总结一、组员分工夏鑫哲:硬件各模块驱动控制代码编写硬件各模块电路配置项目大框架指定消息发送协议格式制定姚雨森:硬件主控制函数编写硬件各模块C++对象调用和函数使用设备连接华为云服务器控制和消息发送周涵昕:基于JavaScript的React安卓和网......
  • 防火墙相关 学习记录
     防火墙是由一些软、硬件组合而成的网络访问控制器,它根据一定的安全规则来控制流过防火墙的网络包,如禁止或转发,能够屏蔽被保护网络内部的信息、拓扑结构和运行状况,从而起到网络安全屏障的作用。一般用来将内部网络与因特网或者其他外部网络互相隔离,限制网络互访,保护内部网络的安......