当前位置: 首页 > news >正文

图像分类和文本分类(传统机器学习和深度学习)

1. 传统机器学习—决策树

1.1 图像分类代码

from sklearn import tree
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 创建决策树模型
clf = tree.DecisionTreeClassifier()# 训练模型
clf = clf.fit(X_train, y_train)# 预测新数据
predicted_class = clf.predict(X_test)# 打印预测结果
print(f"预测类别:{predicted_class}")# 可视化决策树
from sklearn.tree import export_graphviz
export_graphviz(clf, out_file="iris_tree.dot", feature_names=iris.feature_names, class_names=iris.target_names)
  • 该代码首先加载了鸢尾花数据集,并将其划分为特征矩阵 X 和目标向量 y。
  • 然后,使用 train_test_split 函数将数据集划分为训练集和测试集。
  • 接着,创建了一个决策树分类器模型,并使用训练数据对其进行训练。
  • 最后,使用训练好的模型对测试数据进行预测,并打印预测结果。
  • 此外,该代码还使用 export_graphviz 函数将决策树可视化,并将其保存为 iris_tree.dot 文件。您可以使用 Graphviz 软件打开该文件,查看决策树的结构。

1.2 文本分类代码

from sklearn import tree
from sklearn.datasets import fetch_20newsgroups
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer# 加载数据集
categories = ['alt.atheism', 'soc.religion.christian']
twenty_newsgroups = fetch_20newsgroups(subset='train', categories=categories)
X, y = twenty_newsgroups.data, twenty_newsgroups.target# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 特征提取
vectorizer = TfidfVectorizer()
X_train_vectorized = vectorizer.fit_transform(X_train)
X_test_vectorized = vectorizer.transform(X_test)# 创建决策树模型
clf = tree.DecisionTreeClassifier()# 训练模型
clf = clf.fit(X_train_vectorized, y_train)# 预测新数据
predicted_class = clf.predict(X_test_vectorized)# 打印预测结果
print(f"预测类别:{predicted_class}")# 可视化决策树
from sklearn.tree import export_graphviz
export_graphviz(clf, out_file="newsgroup_tree.dot", feature_names=vectorizer.get_feature_names(), class_names=categories)
  • 该代码首先加载了 20 Newsgroups 数据集,并将其划分为训练集和测试集。
  • 然后,使用 TfidfVectorizer 对文本数据进行特征提取,将文本转换为词频-逆文档频率向量。
  • 接着,创建了一个决策树分类器模型,并使用训练数据对其进行训练。
  • 最后,使用训练好的模型对测试数据进行预测,并打印预测结果。
  • 此外,该代码还使用 export_graphviz 函数将决策树可视化,并将其保存为 newsgroup_tree.dot 文件。您可以使用 Graphviz 软件打开该文件,查看决策树的结构。

2. 深度学习

2.1 图像分类代码

import torch
from torchvision import datasets, transforms
from torch import nn, optim# 定义模型
class ImageClassifier(nn.Module):def __init__(self):super(ImageClassifier, self).__init__()self.conv1 = nn.Conv2d(3, 6, 5)self.pool = nn.MaxPool2d(2, 2)self.conv2 = nn.Conv2d(6, 16, 5)self.fc1 = nn.Linear(16 * 5 * 5, 120)self.fc2 = nn.Linear(120, 84)self.fc3 = nn.Linear(84, 10)def forward(self, x):x = self.pool(nn.functional.relu(self.conv1(x)))x = self.pool(nn.functional.relu(self.conv2(x)))x = x.view(-1, 16 * 5 * 5)x = nn.functional.relu(self.fc1(x))x = nn.functional.relu(self.fc2(x))x = self.fc3(x)return x# 加载数据集
train_dataset = datasets.CIFAR10(root='./data', train=True, download=True, transform=transforms.ToTensor())
test_dataset = datasets.CIFAR10(root='./data', train=False, download=True, transform=transforms.ToTensor())# 创建数据加载器
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=64, shuffle=False)# 定义模型、损失函数和优化器
model = ImageClassifier()
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)# 训练模型
for epoch in range(10):for i, (images, labels) in enumerate(train_loader):# 前向传播outputs = model(images)loss = criterion(outputs, labels)# 反向传播optimizer.zero_grad()loss.backward()optimizer.step()# 打印训练信息if i % 100 == 0:print(f'Epoch: {epoch + 1}/{10}, Step: {i}/{len(train_loader)}, Loss: {loss.item():.4f}')# 测试模型
correct = 0
total = 0
with torch.no_grad():for images, labels in test_loader:outputs = model(images)_, predicted = torch.max(outputs.data, 1)total += labels.size(0)correct += (predicted == labels).sum().item()print(f'Accuracy: {correct / total:.4f}')
  • 首先,定义了一个图像分类模型 ImageClassifier,该模型包含三个卷积层、两个最大池化层、三个全连接层和一个 ReLU 激活函数。
  • 然后,加载了 CIFAR10 数据集,并将其划分为训练集和测试集。
  • 接着,创建了数据加载器,用于将数据分批加载到模型中。
  • 然后,定义了模型、损失函数和优化器。
  • 接下来,训练模型,并每隔 100 步打印训练信息。
  • 最后,测试模型,并打印模型的准确率。

2.2 文本分类代码

import torch
from torchtext import data
from torchtext.vocab import GloVe
from torch import nn, optim# 定义模型
class TextClassifier(nn.Module):def __init__(self, vocab_size, embedding_dim, output_dim):super(TextClassifier, self).__init__()self.embedding = nn.Embedding(vocab_size, embedding_dim)self.lstm = nn.LSTM(embedding_dim, 128, batch_first=True)self.fc = nn.Linear(128, output_dim)def forward(self, text):embedded = self.embedding(text)output, (hidden, cell) = self.lstm(embedded)hidden = hidden[-1, :, :]output = self.fc(hidden)return output# 加载数据集
TEXT = data.Field(tokenize='spacy', include_lengths=True)
LABEL = data.LabelField(dtype=torch.long)
fields = [('text', TEXT), ('label', LABEL)]
train_data, test_data = data.TabularDataset.splits(path='./data', train='train.csv', test='test.csv', format='csv', fields=fields
)# 创建词向量
TEXT.build_vocab(train_data, vectors=GloVe(name='6B', dim=100))
LABEL.build_vocab(train_data)# 创建数据加载器
train_iterator, test_iterator = data.BucketIterator.splits((train_data, test_data), batch_size=64, device=torch.device('cuda' if torch.cuda.is_available() else 'cpu')
)# 定义模型、损失函数和优化器
model = TextClassifier(len(TEXT.vocab), 100, 2)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)# 训练模型
for epoch in range(10):for i, batch in enumerate(train_iterator):# 前向传播text, text_lengths = batch.textoutputs = model(text)loss = criterion(outputs, batch.label)# 反向传播optimizer.zero_grad()loss.backward()optimizer.step()# 打印训练信息if i % 100 == 0:print(f'Epoch: {epoch + 1}/{10}, Step: {i}/{len(train_iterator)}, Loss: {loss.item():.4f}')# 测试模型
correct = 0
total = 0
with torch.no_grad():for batch in test_iterator:text, text_lengths = batch.textoutputs = model(text)_, predicted = torch.max(outputs.data, 1)total += batch.label.size(0)correct += (predicted == batch.label).sum().item()print(f'Accuracy: {correct / total:.4f}')
  • 首先,定义了一个文本分类模型 TextClassifier,该模型包含一个嵌入层、一个 LSTM 层和一个全连接层。
  • 然后,加载了文本数据集,并将其划分为训练集和测试集。
  • 接着,创建了词向量,用于将单词转换为向量。
  • 然后,创建了数据加载器,用于将数据分批加载到模型中。
  • 然后,定义了模型、损失函数和优化器。
  • 接下来,训练模型,并每隔 100 步打印训练信息。
  • 最后,测试模型,并打印模型的准确率。

3. 决策树介绍

3.1 决策树介绍

什么是决策树?

决策树是一种用于分类和回归任务的机器学习算法。它通过一系列规则将数据点分类到不同的类别中,就像树枝分叉一样。每个规则都基于一个特征,例如“颜色”或“尺寸”,每个分支都代表一个可能的特征值,例如“红色”或“大”。

决策树的结构类似于一棵倒置的树,其中:

  • 根节点: 代表整个数据集。
  • 内部节点: 代表一个特征,并根据特征值进行分支。
  • 叶节点: 代表一个类别或预测结果。

决策树的学习过程

决策树的学习过程可以分为以下几个步骤:

  1. 特征选择: 选择最能区分不同类别的特征。
  2. 决策树构建: 根据选择的特征构建决策树,并递归地将数据点分配到不同的分支。
  3. 剪枝: 为了避免过拟合,可以剪枝去除一些不重要的分支。

决策树的优缺点

优点:

  • 易于理解: 决策树的结构清晰,易于理解和解释。
  • 无需数据预处理: 决策树可以处理各种类型的数据,无需进行数据预处理。
  • 鲁棒性强: 决策树对缺失值和噪声数据具有较强的鲁棒性。

缺点:

  • 容易过拟合: 决策树容易过拟合,尤其是在训练数据量较少的情况下。
  • 对特征的顺序敏感: 决策树对特征的顺序敏感,不同的特征顺序可能导致不同的决策树结构。

决策树的应用

决策树在许多领域都有应用,例如:

  • 分类: 识别客户的意图、预测客户的流失率、识别欺诈性交易。
  • 回归: 预测房价、预测股票价格、预测天气变化。
  • 规则提取: 提取可解释的规则,用于决策支持系统。

3.2 决策树使用例子

例子: 预测房价

假设我们有一组数据,包含以下特征:

  • 房屋面积
  • 房屋年代
  • 房屋位置
  • 房屋状况

我们的目标是预测每栋房子的价格。

步骤:

  1. 特征选择: 我们可以选择以下特征进行预测:
    • 房屋面积
    • 房屋年代
    • 房屋位置
  2. 决策树构建: 我们可以使用决策树算法构建决策树,并根据特征值将数据点分配到不同的分支。
  3. 预测: 我们可以使用决策树预测每栋房子的价格。

示例代码:

from sklearn import tree
from sklearn.datasets import load_boston# 加载波士顿房价数据集
boston = load_boston()
X = boston.data
y = boston.target# 训练决策树模型
clf = tree.DecisionTreeRegressor()
clf = clf.fit(X, y)# 预测新数据
X_new = [[2500, 20, 1, 5]]  # 房屋面积为 2500 平方英尺,房屋年代为 20 年,房屋位置为 1,房屋状况为 5
y_pred = clf.predict(X_new)# 打印预测结果
print("预测价格:", y_pred)

结果:

预测价格: [438436.11111111]

解释:

决策树模型预测该房屋的价格为 438,436.11 美元。

相关文章:

图像分类和文本分类(传统机器学习和深度学习)

1. 传统机器学习—决策树 1.1 图像分类代码 from sklearn import tree from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split# 加载数据集 iris load_iris() X, y iris.data, iris.target# 划分数据集 X_train, X_test, y_train,…...

基于SpringBoot和Hutool工具包实现的验证码案例

目录 验证码案例 1. 需求 2. 准备工作 3. 约定前后端交互接口 需求分析 接口定义 4. Hutool 工具介绍 5. 实现验证码 后端代码 前端代码 6. 运行测试 验证码案例 随着安全性的要求越来越高,目前项目中很多都会使用验证码,只要涉及到登录&…...

python-找出四位数中的玫瑰花数

【问题描述】玫瑰花数指一个n位数(n>4),其每位上的数字的n次幂之和等于本身。 请求出所有四位数中的玫瑰花数 【输入形式】 【输出形式】 【样例输入】 【样例输出】1634 8208 9474 【样例说明】 【评分标准】 完整代码如下: for n in ra…...

Linux-命令上

at是一次性的任务,crond是循环的定时任务 如果 cron.allow 文件存在,只有在文件中出现其登录名称的用户可以使用 crontab 命令。root 用户的登录名必须出现在 cron.allow 文件中,如果这个文件存在的话。系统管理员可以明确的停止一个用户&am…...

青鸟云报修系统:实现高效、便捷的维修申请处理

在日常生活和工作中,故障报修难免会遇到,售后报修服务则成为了解决问题的关键。纸质化售后报修维修申请单,作为报修流程中的重要一环,在一定程度上能够记录和追踪售后报修维修流程,但在实际操作过程中却存在着诸多弊端…...

Python解析网页

目录 1、Beautiful Soup 2、解析数据 3、遍历文档树 4、搜索文档树 一、Beautiful Soup 1、什么是Beautiful Soup 定义:Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库. 功能:它能够通过你喜欢的转换器实现惯用的文档导航,查找,修…...

IDEA连接MySQL后如何管理数据库

上一节讲解了IDEA如何连接MySQL数据库管理系统,接下来我们就可以在IDEA里使用MySQL来管理数据库了。那么如果我们现在还没有创建需要的数据库怎么办?本节就来教大家如何在IDEA连接MySQL后管理数据库(创建/修改/删除数据库、创建/修改/删除表、插入/更新/…...

linux新机快速配置ssh

配置SSH以实现证书登录 要配置新的Linux机器以实现证书登录,您需要执行以下步骤: 安装SSH服务器: sudo apt-get install openssh-server修改SSH端口(可选): SSH配置文件(通常位于/etc/ssh/sshd…...

使用elementUI的form表单校验时,错误提示位置异常解决方法

问题 最近在做项目时遇到一个问题&#xff0c;使用elementUI的Descriptions 描述列表与form表单校验时&#xff0c;遇到校验信息显示的位置不对&#xff0c;效果如图&#xff1a; 期望显示在表格中。 效果 代码 html <el-form :model"form":rules"rules…...

Android面试题之Kotlin常见集合操作技巧

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 list 创建和修改 不可变list,listOf var list listOf("a","d","f") println(list.getOrElse(3){"Unkn…...

网络拓扑—DNS服务搭建

文章目录 DNS服务搭建网络拓扑配置网络DNSPC 安装DNS服务配置DNS服务创建正向查找区域创建反向查找区域创建子域名 PC机DNS域名解析 DNS服务搭建 网络拓扑 为了节省我的U盘空间&#xff0c;没有用路由器&#xff0c;所以搭建的环境只要在同网段即可。 //交换机不用考虑 DNS&a…...

Mybatis-Plus笔记

1.MP基础 1.1 MP常见注解 TableName(“指定表明”) TableName("tb_user") // 指定表名 Data NoArgsConstructor AllArgsConstructor Builder public class User {private Long id;private String userName;private String password;private String name;private I…...

“高考钉子户”唐尚珺决定再战2024年高考

“高考钉子户”唐尚珺决定在2024年再次参加高考&#xff0c;这个选择确实很特别也很有趣。十几年连续参加高考&#xff0c;他已经积累了大量的备考经验和应试技巧。这样的经验对于高考辅导机构来说无疑是非常宝贵的资源&#xff0c;他如果选择去辅导机构当老师&#xff0c;应该…...

Hive安装教程

前置条件:hadoop&mysql docker容器安装mysql-CSDN博客 以下的/opt/bigdata目录根据自己实际情况更改 1.上传hive包并解压 tar -zxvf apache-hive-3.1.3-bin.tar.gz -C /opt/bigdata/ 2.修改路径 mv /opt/bigdata/apache-hive-3.1.3-bin/ hive cd /opt/bigdata/hive/…...

使用Python Tkinter创建GUI应用程序

大家好&#xff0c;当我们谈及使用Python Tkinter创建GUI应用程序时&#xff0c;我们涉及的不仅是技术和代码&#xff0c;更是关于创造力和用户体验的故事。Tkinter作为Python标准库中最常用的GUI工具包&#xff0c;提供了丰富的功能和灵活的接口&#xff0c;让开发者能够轻松地…...

使用 RT 矩阵进行 3D 点云变换详解(基于 PCL 和 Eigen 库)

在 3D 点云处理中&#xff0c;RT 矩阵是一个常用的工具&#xff0c;用于对点云进行旋转和平移操作。本文将详细介绍 RT 矩阵的概念&#xff0c;并通过一个示例程序演示如何基于 PCL 和 Eigen 库将一帧点云进行矩阵变换再输出。 本教程的示例代码和点云数据可在 GitHub 下载。 什…...

CTFHUB技能树——SSRF(二)

目录 上传文件 ​FastCGI协议 Redis协议 上传文件 题目描述&#xff1a;这次需要上传一个文件到flag.php了.祝你好运 index.php与上题一样&#xff0c;使用POST请求的方法向flag.php传递参数 //flag.php页面源码 <?phperror_reporting(0);if($_SERVER["REMOTE_ADDR&…...

Vue3实现简单的瀑布流效果,可抽离成组件直接使用

先来看下效果图&#xff1a; 瀑布流中的内容可进行自定义&#xff0c;这里的示例图是通过不同背景颜色的展示进行区分&#xff0c;每个瀑布流中添加了自定义图片和文字描述。 实现方式&#xff1a; 1.建立子组件&#xff08;可单独抽离&#xff09;写出瀑布流的样式 文件名为…...

【已解决】C#如何消除Halcon上一次显示窗口的涂层

前言 在通过C#进行封装Halcon的时候发现一个问题&#xff0c;就是如果我重新去标定一个图像的时候不能把上一次的清掉&#xff0c;然后之前的会覆盖掉原来的&#xff0c;这个确实是这样&#xff0c;但是如果说现在的图像面积比之前的小的那么就没有任何效果显示&#xff0c;因…...

XShell-连接-Centos 7

XShell 连接Centos 7 一.准备 安装XShell XShell下载地址&#xff1a; 在虚拟机上安装Centos 7&#xff0c;具体操作自行学习 二.Centos 7的准备 1.网络适配器修改为NAT 2.获取IP 输入命令&#xff1a; ip addr我的Centos 7对外IP为192.168.174.129 三.XShell连接Cento…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

9-Oracle 23 ai Vector Search 特性 知识准备

很多小伙伴是不是参加了 免费认证课程&#xff08;限时至2025/5/15&#xff09; Oracle AI Vector Search 1Z0-184-25考试&#xff0c;都顺利拿到certified了没。 各行各业的AI 大模型的到来&#xff0c;传统的数据库中的SQL还能不能打&#xff0c;结构化和非结构的话数据如何和…...