<机器学习>基于Julia和随机森林的多分类实战

2024-03-31 22:48

本文主要是介绍<机器学习>基于Julia和随机森林的多分类实战,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数据集

  • 数据集地址:UCI Steel Plates Faults Data Set
  • 文件说明:
该数据集包含了7种带钢缺陷类型。这个数据集不是图像数据,而是带钢缺陷的28种特征数据。
Faults.NNA				数据集(特征+分类标签)
Faults27x7_var			特征和分类类别名称

随机森林实现多分类

  • 使用的包
using DataFrames
using DecisionTree
using CSV
using Base
using Lathe.preprocess:TrainTestSplit

注:如果没有安装包,使用脚本进行安装

import Pkg
Pkg.add([PKG NAME]) 	#example:Pkg.add("CSV")
  • 加载数据集
#数据读取 data--数据集  var--参数说明
data=CSV.read("F:\\数据集\\钢板缺陷数据集\\data.txt",DataFrame)
var=CSV.read("F:\\数据集\\钢板缺陷数据集\\var.txt",DataFrame)
var=Matrix(var)[27:33]#分割数据集为训练样本及测试样本
train,test=TrainTestSplit(data,0.9)train=Matrix(train)
#数据集[1:27]为特征 [28:34]为类别标签
features=convert(Array,train[:,1:27])
labels=convert(Array,train[:,28:34])#将多维类别标签转换为一维
train_labels=Array{String}(undef,size(labels,1))
for i= 1:size(labels,1)for j=1:size(labels[i,:],1)if labels[i,j]==1global train_labels[i]=var[j]endend
end

在这里插入图片描述
在这里插入图片描述

  • 建立随机森林模型
#建立随机森林模型
#=
function build_forest(labels              :: AbstractVector{T},features            :: AbstractMatrix{S},n_subfeatures       = -1,                   特征的数量n_trees             = 10,                   树的棵数partial_sampling    = 0.7,                  每棵树使用的样本比例max_depth           = -1,                   树的最大深度min_samples_leaf    = 5,                    叶子节点含有的最少样本,若叶子节点样本数小于则对该叶子节点和兄弟叶子节点进行剪枝,只留下该叶子节点的父节点min_samples_split   = 2,                    节点可分的最小样本数,默认值是2min_purity_increase = 0.0;                  节点划分的最小不纯度。假设不纯度用信息增益表示,若某节点划分时的信息增益大于等于min_impurity_decrease,那么该节点还可以再划分;反之,则不能划分。rng                 = Random.GLOBAL_RNG)
=#
model=DecisionTree.build_forest(train_labels,features,-1,19,1,-1,1,2)
  • 测试集预测
#测试集处理
test=Matrix(test)
testfeatures=convert(Array,test[:,1:27])
testlabels=convert(Array,test[:,28:34])
test_labels=Array{String}(undef,size(testlabels,1))
for i= 1:size(testlabels,1)for j=1:size(testlabels[i,:],1)if testlabels[i,j]==1global test_labels[i]=var[j]endend
end#预测测试集
predtest=DecisionTree.apply_forest(model,testfeatures)#计算准确率
numacc=0
for i = 1:size(test_labels,1)if predtest[i]==test_labels[i]#全局变量 需加globalglobal  numaccnumacc+=1end
end
acc=numacc/size(test_labels,1)
println("准确率=",acc)

输出:

准确率=0.7891891891891892

完整代码

using DataFrames
using DecisionTree
using CSV
using Base
using Lathe.preprocess:TrainTestSplit#数据读取 data--数据集  var--参数说明
data=CSV.read("F:\\数据集\\钢板缺陷数据集\\data.txt",DataFrame)
var=CSV.read("F:\\数据集\\钢板缺陷数据集\\var.txt",DataFrame)
var=Matrix(var)[27:33]#分割数据集为训练样本及测试样本
train,test=TrainTestSplit(data,0.9)train=Matrix(train)
#数据集[1:27]为特征 [28:34]为类别标签
features=convert(Array,train[:,1:27])
labels=convert(Array,train[:,28:34])#将多维类别标签转换为一维
train_labels=Array{String}(undef,size(labels,1))
for i= 1:size(labels,1)for j=1:size(labels[i,:],1)if labels[i,j]==1global train_labels[i]=var[j]endend
end#建立随机森林模型
#=
function build_forest(labels              :: AbstractVector{T},features            :: AbstractMatrix{S},n_subfeatures       = -1,                   特征的数量n_trees             = 10,                   树的棵数partial_sampling    = 0.7,                  每棵树使用的样本比例max_depth           = -1,                   树的最大深度min_samples_leaf    = 5,                    叶子节点含有的最少样本,若叶子节点样本数小于则对该叶子节点和兄弟叶子节点进行剪枝,只留下该叶子节点的父节点min_samples_split   = 2,                    节点可分的最小样本数,默认值是2min_purity_increase = 0.0;                  节点划分的最小不纯度。假设不纯度用信息增益表示,若某节点划分时的信息增益大于等于min_impurity_decrease,那么该节点还可以再划分;反之,则不能划分。rng                 = Random.GLOBAL_RNG)
=#
model=DecisionTree.build_forest(train_labels,features,-1,19,1,-1,1,2)#测试集处理
test=Matrix(test)
testfeatures=convert(Array,test[:,1:27])
testlabels=convert(Array,test[:,28:34])
test_labels=Array{String}(undef,size(testlabels,1))
for i= 1:size(testlabels,1)for j=1:size(testlabels[i,:],1)if testlabels[i,j]==1global test_labels[i]=var[j]endend
end#预测测试集
predtest=DecisionTree.apply_forest(model,testfeatures)#计算准确率
numacc=0
for i = 1:size(test_labels,1)if predtest[i]==test_labels[i]#全局变量 需加globalglobal  numaccnumacc+=1end
end
acc=numacc/size(test_labels,1)
println("准确率=",acc)

这篇关于<机器学习>基于Julia和随机森林的多分类实战的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/865554

相关文章

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程

《在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程》本文介绍了在Java中使用ModelMapper库简化Shapefile属性转JavaBean的过程,对比... 目录前言一、原始的处理办法1、使用Set方法来转换2、使用构造方法转换二、基于ModelMapper

Java实战之自助进行多张图片合成拼接

《Java实战之自助进行多张图片合成拼接》在当今数字化时代,图像处理技术在各个领域都发挥着至关重要的作用,本文为大家详细介绍了如何使用Java实现多张图片合成拼接,需要的可以了解下... 目录前言一、图片合成需求描述二、图片合成设计与实现1、编程语言2、基础数据准备3、图片合成流程4、图片合成实现三、总结前

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

nginx-rtmp-module构建流媒体直播服务器实战指南

《nginx-rtmp-module构建流媒体直播服务器实战指南》本文主要介绍了nginx-rtmp-module构建流媒体直播服务器实战指南,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. RTMP协议介绍与应用RTMP协议的原理RTMP协议的应用RTMP与现代流媒体技术的关系2

C语言小项目实战之通讯录功能

《C语言小项目实战之通讯录功能》:本文主要介绍如何设计和实现一个简单的通讯录管理系统,包括联系人信息的存储、增加、删除、查找、修改和排序等功能,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录功能介绍:添加联系人模块显示联系人模块删除联系人模块查找联系人模块修改联系人模块排序联系人模块源代码如下

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

Golang使用minio替代文件系统的实战教程

《Golang使用minio替代文件系统的实战教程》本文讨论项目开发中直接文件系统的限制或不足,接着介绍Minio对象存储的优势,同时给出Golang的实际示例代码,包括初始化客户端、读取minio对... 目录文件系统 vs Minio文件系统不足:对象存储:miniogolang连接Minio配置Min