图像分类和文本分类(传统机器学习和深度学习)
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 决策树介绍
什么是决策树?
决策树是一种用于分类和回归任务的机器学习算法。它通过一系列规则将数据点分类到不同的类别中
,就像树枝分叉一样。每个规则都基于一个特征,例如“颜色”或“尺寸”,每个分支都代表一个可能的特征值,例如“红色”或“大”。
决策树的结构类似于一棵倒置的树,其中:
- 根节点: 代表整个数据集。
- 内部节点: 代表一个特征,并根据特征值进行分支。
- 叶节点: 代表一个类别或预测结果。
决策树的学习过程
决策树的学习过程可以分为以下几个步骤:
- 特征选择: 选择最能区分不同类别的特征。
- 决策树构建: 根据选择的特征构建决策树,并递归地将数据点分配到不同的分支。
- 剪枝: 为了避免过拟合,可以剪枝去除一些不重要的分支。
决策树的优缺点
优点:
- 易于理解: 决策树的结构清晰,易于理解和解释。
- 无需数据预处理: 决策树可以处理各种类型的数据,无需进行数据预处理。
- 鲁棒性强: 决策树对缺失值和噪声数据具有较强的鲁棒性。
缺点:
- 容易过拟合: 决策树容易过拟合,尤其是在训练数据量较少的情况下。
- 对特征的顺序敏感: 决策树对特征的顺序敏感,不同的特征顺序可能导致不同的决策树结构。
决策树的应用
决策树在许多领域都有应用,例如:
- 分类: 识别客户的意图、预测客户的流失率、识别欺诈性交易。
- 回归: 预测房价、预测股票价格、预测天气变化。
- 规则提取: 提取可解释的规则,用于决策支持系统。
3.2 决策树使用例子
例子: 预测房价
假设我们有一组数据,包含以下特征:
- 房屋面积
- 房屋年代
- 房屋位置
- 房屋状况
我们的目标是预测每栋房子的价格。
步骤:
- 特征选择: 我们可以选择以下特征进行预测:
- 房屋面积
- 房屋年代
- 房屋位置
- 决策树构建: 我们可以使用决策树算法构建决策树,并根据特征值将数据点分配到不同的分支。
- 预测: 我们可以使用决策树预测每栋房子的价格。
示例代码:
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表单校验时,错误提示位置异常解决方法
问题 最近在做项目时遇到一个问题,使用elementUI的Descriptions 描述列表与form表单校验时,遇到校验信息显示的位置不对,效果如图: 期望显示在表格中。 效果 代码 html <el-form :model"form":rules"rules…...

Android面试题之Kotlin常见集合操作技巧
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 list 创建和修改 不可变list,listOf var list listOf("a","d","f") println(list.getOrElse(3){"Unkn…...

网络拓扑—DNS服务搭建
文章目录 DNS服务搭建网络拓扑配置网络DNSPC 安装DNS服务配置DNS服务创建正向查找区域创建反向查找区域创建子域名 PC机DNS域名解析 DNS服务搭建 网络拓扑 为了节省我的U盘空间,没有用路由器,所以搭建的环境只要在同网段即可。 //交换机不用考虑 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年再次参加高考,这个选择确实很特别也很有趣。十几年连续参加高考,他已经积累了大量的备考经验和应试技巧。这样的经验对于高考辅导机构来说无疑是非常宝贵的资源,他如果选择去辅导机构当老师,应该…...

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

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

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

Vue3实现简单的瀑布流效果,可抽离成组件直接使用
先来看下效果图: 瀑布流中的内容可进行自定义,这里的示例图是通过不同背景颜色的展示进行区分,每个瀑布流中添加了自定义图片和文字描述。 实现方式: 1.建立子组件(可单独抽离)写出瀑布流的样式 文件名为…...
【已解决】C#如何消除Halcon上一次显示窗口的涂层
前言 在通过C#进行封装Halcon的时候发现一个问题,就是如果我重新去标定一个图像的时候不能把上一次的清掉,然后之前的会覆盖掉原来的,这个确实是这样,但是如果说现在的图像面积比之前的小的那么就没有任何效果显示,因…...

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

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

Mysql故障排插与环境优化
前置知识点 最上层是一些客户端和连接服务,包含本 sock 通信和大多数jiyukehuduan/服务端工具实现的TCP/IP通信。主要完成一些简介处理、授权认证、及相关的安全方案等。在该层上引入了线程池的概念,为通过安全认证接入的客户端提供线程。同样在该层上可…...

SQL注入篇-sqlmap的配置和使用
在之前的皮卡丘靶场第五期SQL注入的内容中我们谈到了sqlmap,但是由于很多朋友看不了解命令行格式,所以是纯手动获取数据库信息的 接下来我们就用sqlmap来进行皮卡丘靶场的sql注入学习,链接:https://wwhc.lanzoue.com/ifJY32ybh6vc…...
HTML中各种标签的作用
一、HTML文件主要标签结构及说明 1. <!DOCTYPE html> 作用:声明文档类型,告知浏览器这是 HTML5 文档。 必须:是。 2. <html lang“zh”>. </html> 作用:包裹整个网页内容,lang"z…...

Centos 7 服务器部署多网站
一、准备工作 安装 Apache bash sudo yum install httpd -y sudo systemctl start httpd sudo systemctl enable httpd创建网站目录 假设部署 2 个网站,目录结构如下: bash sudo mkdir -p /var/www/site1/html sudo mkdir -p /var/www/site2/html添加测试…...