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

Python机器学习:自然语言处理、计算机视觉与强化学习

📘 Python机器学习:自然语言处理、计算机视觉与强化学习

目录

  1. 自然语言处理(NLP)
    • 文本预处理:分词、去停用词
    • 词向量与文本分类:使用Word2Vec与BERT
  2. 🌆 计算机视觉基础
    • 图像预处理与增强
    • 目标检测与分割
  3. 🧠 强化学习入门
    • 主要概念与算法:Q-learning、Deep Q-Networks

1. 自然语言处理(NLP)

📄 1.1 文本预处理:分词、去停用词

文本预处理是自然语言处理的基础步骤。原始文本通常包含很多噪音,如标点符号、特殊字符、停用词等。为了让模型更好地理解和处理文本,需要对其进行规范化处理。

**分词(Tokenization)**是文本预处理的第一步,分词的目的是将连续的字符串切分成单词或短语。中文的分词比较复杂,因为中文句子没有明显的分隔符。而英文分词则相对简单,通过空格分隔即可。

import jieba  # 导入中文分词工具
text = "机器学习是人工智能的一个分支。"
tokens = jieba.lcut(text)  # 使用精确模式分词
print("分词结果:", tokens)

**去停用词(Stopword Removal)**是在分词的基础上,移除那些对语义影响不大的词汇,如“的”、“是”等。这些词在模型中通常不会提供有用的信息。

# 定义中文停用词列表
stopwords = ['的', '是', '在', '和']
filtered_tokens = [word for word in tokens if word not in stopwords]
print("去停用词后的结果:", filtered_tokens)

文本预处理可以显著减少模型训练的复杂度,并提高模型的准确性。合理的预处理能够提升模型的效率和表现。


📊 1.2 词向量与文本分类:使用Word2Vec与BERT

词向量将文本中的词语转化为向量,进而可以在数学空间中计算词语之间的相似度和语义关联。常见的词向量方法有Word2Vec和BERT。

Word2Vec模型通过预测上下文词语(Skip-gram)或根据上下文预测中心词(CBOW),将词转化为固定长度的向量。
from gensim.models import Word2Vecsentences = [['我', '喜欢', '机器学习'], ['人工智能', '正在', '改变', '世界']]
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, sg=0)  # 训练Word2Vec模型
vector = model.wv['机器学习']  # 获取词向量
print("词向量:", vector)
BERT(Bidirectional Encoder Representations from Transformers)是一种基于Transformer的预训练模型,通过上下文的双向信息获取词的深层语义。
from transformers import BertTokenizer, BertModel
import torchtokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')input_text = "Machine learning is a branch of AI."
inputs = tokenizer(input_text, return_tensors="pt")
outputs = model(**inputs)
print("BERT输出:", outputs.last_hidden_state)

词向量能在文本分类、情感分析等任务中大幅提升模型的表现。通过使用BERT等高级模型,可以更好地捕捉文本中的复杂语义关系,从而提升模型的理解能力。


🌆 2. 计算机视觉基础

🖼 2.1 图像预处理与增强

在计算机视觉任务中,图像预处理和增强是至关重要的步骤。图像预处理可以减少噪声,提高图像质量,而图像增强则可以丰富数据样本,提高模型的泛化能力。

图像预处理包括灰度化、归一化、去噪等操作。例如,图像灰度化可以将彩色图像转化为单通道的灰度图,减少计算量。
import cv2
import numpy as npimage = cv2.imread('image.jpg')  # 读取图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)  # 将彩色图像转为灰度图
cv2.imshow('Gray Image', gray_image)
cv2.waitKey(0)
图像增强则可以通过旋转、缩放、翻转等方式生成更多的样本,特别是在数据不足的情况下,图像增强是一种有效的提升模型泛化能力的方法。
from tensorflow.keras.preprocessing.image import ImageDataGeneratordatagen = ImageDataGenerator(rotation_range=40,  # 随机旋转width_shift_range=0.2,  # 随机水平位移height_shift_range=0.2,  # 随机垂直位移shear_range=0.2,  # 随机错切变换zoom_range=0.2,  # 随机缩放horizontal_flip=True,  # 水平翻转fill_mode='nearest'  # 填充方式
)image = np.expand_dims(image, 0)  # 扩展图像维度以适应批量生成器
datagen.fit(image)# 生成增强后的图像
for batch in datagen.flow(image, batch_size=1):plt.imshow(batch[0].astype('uint8'))plt.show()break  # 仅显示一张增强后的图像

图像预处理和增强不仅能改善图像质量,还能增加训练数据的多样性,从而提升模型的鲁棒性和表现。


🎯 2.2 目标检测与分割

目标检测与分割是计算机视觉中的两个核心任务。目标检测是识别图像中目标物体的位置和类别,而分割是将图像中的目标从背景中分离出来。

目标检测使用边界框(Bounding Box)来标注物体的位置,常见的检测算法有YOLO、SSD等。以下是基于YOLOv3的目标检测代码示例。
import cv2
import numpy as np# 加载YOLO模型和权重
net = cv2.dnn.readNet('yolov3.weights', 'yolov3.cfg')
layer_names = net.getLayerNames()
output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()]image = cv2.imread('image.jpg')  # 加载图像
height, width = image.shape[:2]# 预处理图像
blob = cv2.dnn.blobFromImage(image, 0.00392, (416, 416), (0, 0, 0), True, crop=False)
net.setInput(blob)
outs = net.forward(output_layers)# 处理输出结果
for out in outs:for detection in out:scores = detection[5:]class_id = np.argmax(scores)confidence = scores[class_id]if confidence > 0.5:center_x = int(detection[0] * width)center_y = int(detection[1] * height)w = int(detection[2] * width)h = int(detection[3] * height)# 绘制边界框cv2.rectangle(image, (center_x - w // 2, center_y - h // 2), (center_x + w // 2, center_y + h // 2), (0, 255, 0), 2)cv2.imshow('Object Detection', image)
cv2.waitKey(0)
图像分割则通过像素级别的分类来分离物体,常见的分割算法有U-Net、Mask R-CNN等。以下是基于U-Net模型的简要代码示例。
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Conv2D, MaxPooling2D, UpSampling2D, concatenatedef unet_model(input_size=(256, 256, 1)):inputs = Input(input_size)conv1 = Conv2D(64, 3, activation='relu', padding='same')(inputs)pool1 = MaxPooling2D(pool_size=(2, 2))(conv1)conv2 = Conv2D(128, 3, activation='relu', padding='same')(pool1)pool2 = MaxPooling2D(pool_size=(2, 2))(conv2)up1 = UpSampling2D(size=(2, 2))(pool2)merge1 = concatenate([conv1, up1], axis=3)conv3 = Conv2D(64, 3, activation='relu', padding='same')(merge1)model = Model(inputs, conv3)return modelmodel = unet_model()
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

目标检测与分割是计算机视觉中的核心任务,广泛应用于自动驾驶、医疗影像等领域。


🧠 3. 强化学习入门

🤖 3.1 主要概念与算法:Q-learning、Deep Q-Networks

强化学习(Reinforcement Learning, RL)是一种通过试错来学习最优策略的机器学习方法。与监督学习和无监督学习不同,强化学习的目标是通过与环境的交互来最大化累积奖励。

Q-learning是一种经典的强化学习算法,旨在通过更新Q值函数来找到最佳策略。Q值函数表示在某一状态下采取某一动作的预期累积奖励。
import numpy as np# 定义Q表
Q = np.zeros((5, 2))  # 假设有5个状态和2个动作# 参数设置
alpha = 0.1  # 学习率
gamma = 0.9  # 折扣因子
epsilon = 0.1  # 探索率# 模拟环境反馈
def get_reward(state, action):if state == 4 and action == 1:return 1  # 终止状态return 0# Q-learning算法
def q_learning():for episode in range(100):  # 迭代100次state = np.random.randint(0, 5)  # 随机初始化状态while state != 4:  # 直到达到终止状态if np.random.rand() < epsilon:  # 探索action = np.random.randint(0, 2)else:  # 利用action = np.argmax(Q[state])next_state = state + 1  # 假设每次状态递增reward = get_reward(state, action)# Q值更新Q[state, action] = Q[state, action] + alpha * (reward + gamma * np.max(Q[next_state]) - Q[state, action])state = next_stateq_learning()
print("更新后的Q表:", Q)
Deep Q-Networks (DQN)**是一种结合了深度学习的强化学习算法。通过神经网络近似Q值函数,DQN在复杂环境中具有更强的表达能力。
import torch
import torch.nn as nn
import torch.optim as optim
import randomclass DQN(nn.Module):def __init__(self):super(DQN, self).__init__()self.fc1 = nn.Linear(4, 24)self.fc2 = nn.Linear(24, 24)self.fc3 = nn.Linear(24, 2)def forward(self, x):x = torch.relu(self.fc1(x))x = torch.relu(self.fc2(x))return self.fc3(x)model = DQN()
optimizer = optim.Adam(model.parameters(), lr=0.001)
criterion = nn.MSELoss()# 模拟训练过程
state = torch.FloatTensor([1, 0, 0, 0])
target = torch.FloatTensor([0, 1])
output = model(state)
loss = criterion(output, target)
optimizer.zero_grad()
loss.backward()
optimizer.step()

强化学习中的Q-learning和DQN是两个关键算法,前者用于简单离散环境,后者则在复杂的连续环境中表现优异。通过学习最优策略,强化学习能够解决动态环境中的决策问题。

相关文章:

Python机器学习:自然语言处理、计算机视觉与强化学习

&#x1f4d8; Python机器学习&#xff1a;自然语言处理、计算机视觉与强化学习 目录 ✨ 自然语言处理&#xff08;NLP&#xff09; 文本预处理&#xff1a;分词、去停用词词向量与文本分类&#xff1a;使用Word2Vec与BERT &#x1f306; 计算机视觉基础 图像预处理与增强目标…...

Vue2 + ElementUI + axios + VueRouter入门

之前没有pc端开发基础&#xff0c;工作需要使用若依框架进行了一年的前端开发.最近看到一个视频框架一步步集成&#xff0c;感觉颇受启发&#xff0c;在此记录一下学习心得。视频链接:vue2element ui 快速入门 环境搭建和依赖安装 安装nodejs安装Vue Cli使用vue create proje…...

GO网络编程(四):海量用户通信系统2:登录功能核心【重难点】

目录 一、C/S详细通信流程图二、消息类型定义与json标签1. 消息类型定义2. JSON标签3.结构体示例及其 JSON 表示&#xff1a;4.完整代码与使用说明 三、客户端发送消息1. 连接到服务器2. 准备发送消息3. 创建 LoginMes 并序列化4. 将序列化后的数据嵌入消息结构5. 序列化整个 M…...

某项目实战分析代码二

某项目实战分析代码二 此次分析的是protobuf的使用操作流程具体实现 3. 业务数据分析3.1 客户端3.2 服务器端简单案例 此次分析的是protobuf的使用 Protocol Buffer( 简称 Protobuf) 是Google公司内部的混合语言数据标准&#xff0c;它是一种轻便高效的结构化数据存储格式&…...

全面指南:探索并实施解决Windows系统中“mfc140u.dll丢失”的解决方法

当你的电脑出现mfc140u.dll丢失的问题是什么情况呢&#xff1f;mfc140u.dll文件依赖了什么&#xff1f;mfc140u.dll丢失会导致电脑出现什么情况&#xff1f;今天这篇文章就和大家聊聊mfc140u.dll丢失的解决办法。希望能够有效的帮助你解决这问题。 哪些程序依赖mfc140u.dll文件…...

QT学习笔记1(QT和QT creator介绍)

QT学习笔记1&#xff08;QT和QT creator介绍&#xff09; Qt 是一个跨平台的应用开发框架&#xff0c;主要用于图形用户界面&#xff08;GUI&#xff09;应用的开发&#xff0c;但也支持非GUI程序的开发。Qt 支持多种平台&#xff0c;如Windows、macOS、Linux、iOS和Android&a…...

存储电话号码的数据类型,用 int 还是用 string?

在 Java 编程中&#xff0c;存储电话号码的选择可以通过两种常见方式进行&#xff1a;使用 int 类型或 String 类型。这种选择看似简单&#xff0c;但实际上涉及到 JVM 内部的字节码实现、内存优化、数据表示、以及潜在的可扩展性问题。 Java 基本数据类型与引用数据类型的差异…...

【目标检测】工程机械车辆数据集2690张4类VOC+YOLO格式

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2694 标注数量(xml文件个数)&#xff1a;2694 标注数量(txt文件个数)&#xff1a;2694 标注…...

target_link_libraries()

target_link_libraries() 是 CMake 中的一个命令&#xff0c;用于指定目标&#xff08;如可执行文件或库&#xff09;所依赖的其他库。其主要作用包括&#xff1a; 链接库&#xff1a;将指定的库链接到目标上&#xff0c;使目标能够调用这些库中的函数和使用其功能。 管理依赖…...

Javascript数组研究09_Array.prototype[Symbol.unscopables]

Symbol.unscopables 是 JavaScript 中一个相对较新的符号&#xff08;Symbol&#xff09;&#xff0c;用于控制对象属性在 with 语句中的可见性。它主要用于内置对象&#xff0c;如 Array.prototype&#xff0c;以防止某些方法被引入到 with 语句的作用域中&#xff0c;避免潜在…...

SkyWalking 自定义链路追踪

对项目中的业务方法&#xff0c;实现链路追踪&#xff0c;方便我们排查问题 引入依赖 <!‐‐ SkyWalking 工具类 ‐‐> <dependency> <groupId>org.apache.skywalking</groupId> <artifactId>apm‐toolkit‐trace</artifactId> <vers…...

Linux驱动开发(速记版)--设备模型

第八十章 设备模型基本框架-kobject 和 kset 80.1 什么是设备模型 设备模型使Linux内核处理复杂设备更高效。 字符设备驱动适用于简单设备&#xff0c;但对于电源管理和热插拔&#xff0c;不够灵活。 设备模型允许开发人员以高级方式描述硬件及关系&#xff0c;提供API处理设备…...

动手学深度学习(李沐)PyTorch 第 6 章 卷积神经网络

李宏毅-卷积神经网络CNN 如果使用全连接层&#xff1a;第一层的weight就有3*10^7个 观察 1&#xff1a;检测模式不需要整张图像 很多重要的pattern只要看小范围即可 简化1&#xff1a;感受野 根据观察1 可以做第1个简化&#xff0c;卷积神经网络会设定一个区域&#xff0c…...

新编英语语法教程

新编英语语法教程 1. 新编英语语法教程 (第 6 版) 学生用书1.1. 目录1.2. 电子课件 References A New English Grammar Coursebook 新编英语语法教程 (第 6 版) 学生用书新编英语语法教程 (第 6 版) 教师用书 1. 新编英语语法教程 (第 6 版) 学生用书 https://erp.sflep.cn/…...

Golang 服务器虚拟化应用案例

推荐学习文档 golang应用级os框架&#xff0c;欢迎stargolang应用级os框架使用案例&#xff0c;欢迎star案例&#xff1a;基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识&#xff0c;这里有免费的golang学习笔…...

Elasticsearch基础_4.ES搜索功能

文章目录 一、搜索辅助功能1.1、指定返回的字段1.2、结果计数1.3、结果分页 二、搜索匹配功能2.1、查询所有文档2.2、term级别查询2.2.1、term查询2.2.2、terms查询2.2.3、range查询2.2.4、exists查询 2.3、布尔查询2.3.1、must&#xff0c;should&#xff0c;must_not2.3.2、f…...

Elasticsearch要点简记

Elasticsearch要点简记 1、ES概述2、基础概念&#xff08;1&#xff09;索引、文档、字段&#xff08;2&#xff09;映射&#xff08;3&#xff09;DSL 3、架构原理4、索引字段的数据类型5、ES的三种分页方式&#xff08;1&#xff09;深度分页&#xff08;fromsize&#xff09…...

【通信协议】IIC通信协议详解

IIC&#xff08;Inter-Integrated Circuit&#xff09;通信协议&#xff0c;又称为I2C&#xff08;Inter-Integrated Circuit 2&#xff09;协议&#xff0c;是一种广泛使用的串行通信协议。它由Philips Semiconductor&#xff08;现NXP Semiconductors&#xff09;开发&#x…...

2024年中国科技核心期刊目录(社会科学卷)

2024年中国科技核心期刊目录 &#xff08;社会科学卷&#xff09; 序号 期刊代码 期刊名称 1 SC02 JOURNAL OF S…...

用Python集成免费IP归属地查询API

IP查询的优势是什么&#xff1f; IP查询是一种强大的工具&#xff0c;能够快速提供关于IP地址的信息&#xff0c;如地理位置、互联网服务提供商&#xff08;ISP&#xff09;、连接类型等。这些数据在多种场景下都非常有用&#xff0c;帮助用户理解网络环境和用户行为。 首先&…...

HDMI接口没声音?手把手教你用InfoFrame调试音频流(附Audio InfoFrame解析)

HDMI音频调试实战&#xff1a;用Audio InfoFrame精准定位无声问题 当4K显示器亮起而音响沉默时&#xff0c;工程师的调试噩梦就开始了。上周在调试一块定制开发板时&#xff0c;HDMI视频输出完美&#xff0c;但音频系统始终沉默——这不是简单的"线材接触不良"能解释…...

告别GitHub下载卡顿:手把手教你配置Electron国内镜像(npmrc文件详解)

告别Electron下载困境&#xff1a;深度解析.npmrc配置与国内镜像实战指南 每次执行npm install electron时&#xff0c;看着进度条卡在node install.js阶段一动不动&#xff0c;或是突然蹦出RequestError: connect ETIMEDOUT的红色报错——这种体验对于国内开发者来说再熟悉不过…...

2026免费降AI神器测评:20款国内外工具亲测,哪个真能过检测?

现在写论文&#xff0c;AIGC检测几乎是躲不过的坎。学校用的知网、Turnitin这些系统一直在迭代升级&#xff0c;现在不仅要看重复率&#xff0c;AIGC率也成了硬性考核指标。 熬了好几天改出来的稿子&#xff0c;一查AIGC率居然有90%&#xff0c;换谁心态都得崩&#xff0c;现在…...

2026届学术党必备的十大AI写作助手推荐榜单

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 知网AIGC检测服务的目的是辅助识别学术文本里由人工智能生成的内容&#xff0c;该技术凭借对…...

GreenLuma 2025 Manager:Steam游戏库管理工具的一站式解决方案

GreenLuma 2025 Manager&#xff1a;Steam游戏库管理工具的一站式解决方案 【免费下载链接】GreenLuma-2025-Manager An app made in python to manage GreenLuma 2025 AppList 项目地址: https://gitcode.com/gh_mirrors/gr/GreenLuma-2025-Manager GreenLuma 2025 Man…...

千问3.5-27B知识库应用:OpenClaw变身技术问答助手

千问3.5-27B知识库应用&#xff1a;OpenClaw变身技术问答助手 1. 为什么需要本地化技术问答助手&#xff1f; 去年我在开发一个开源项目时&#xff0c;遇到了一个奇怪的Docker网络问题。当时在Stack Overflow上搜索了半天&#xff0c;找到的答案要么过时&#xff0c;要么不适…...

【Java外部函数性能优化黄金法则】:20年JVM专家亲授JNI/FFM调优的7大致命误区与3步极速修复方案

第一章&#xff1a;Java外部函数优化的演进脉络与性能本质Java平台对外部函数调用&#xff08;Foreign Function & Memory API&#xff0c;即JEP 454/464/471/472&#xff09;的演进&#xff0c;标志着JVM从“纯Java世界”迈向系统级互操作的新纪元。其性能本质并非单纯降低…...

Geoserver空间查询全解析:从基础bbox到高级CQL_FILTER的完整指南

Geoserver空间查询全解析&#xff1a;从基础bbox到高级CQL_FILTER的完整指南 当你面对海量地理空间数据时&#xff0c;如何快速准确地提取所需信息&#xff1f;Geoserver作为开源地理信息系统&#xff08;GIS&#xff09;的中枢神经&#xff0c;其强大的空间查询能力往往被开发…...

AI辅助架构设计:让快马平台智能规划trae状态管理方案

用AI辅助设计trae状态管理方案&#xff1a;以博客后台系统为例 最近在开发一个博客后台管理系统时&#xff0c;遇到了状态管理的难题。系统需要处理文章列表、编辑草稿、用户评论和系统设置等多种数据&#xff0c;如何合理组织这些状态让我头疼不已。幸运的是&#xff0c;在In…...

别再傻傻分不清HIL和SIL了!用NI PXI和Simulink手把手教你搭建第一个测试环境

从零开始搭建HIL/SIL测试环境&#xff1a;NI PXI与Simulink实战指南 刚接触在环测试的工程师常常被各种术语搞得晕头转向——HIL、SIL、MIL&#xff0c;它们到底有什么区别&#xff1f;更重要的是&#xff0c;接到一个控制器测试任务时&#xff0c;该如何从零开始搭建测试环境&…...