硬核机器学习知识点教学--(代码讲解)

news2024/11/29 6:35:34

用代码和实战讲解机器学习,零基础一样看得懂👏🏻👏🏻👏🏻

复习、学习、备战考试皆可用👏🏻👏🏻👏🏻

本系列持续更新中,三连关注不迷路👌🏻  

干货满满不看后悔👍👍👍

📝个人主页→数据挖掘博主ZTLJQ的主页

b1691e6f246947eeb06ee06469621bc2.gif

个人推荐python学习系列:

☄️爬虫JS逆向系列专栏 - 爬虫逆向教学

☄️python系列专栏 - 从零开始学python


☀️1. 机器学习基础

 ⛅️ 1.1 监督学习

在机器学习中,监督学习是一种常见且重要的学习方式。它通过训练数据集中的输入特征和对应的标签,构建一个模型来预测未知数据的标签。

1.概述

监督学习是一种通过从已知数据中学习规律,从而对未知数据进行预测的学习方法。其基本思想是利用训练集中的输入特征和已知标签之间的关系来构建一个模型,然后使用该模型对新的数据进行标签预测。

2.常见算法

以下是监督学习中常见的算法:

2.1 线性回归

线性回归是一种用于建立连续值输出的模型的监督学习算法。它通过拟合一个线性函数来预测目标变量。下面是一个简单的线性回归的示例代码:

import numpy as np
from sklearn.linear_model import LinearRegression

# 构造训练集
X_train = np.array([[1], [2], [3], [4], [5]])
y_train = np.array([2, 4, 6, 8, 10])

# 创建线性回归模型并拟合数据
model = LinearRegression()
model.fit(X_train, y_train)

# 对新数据进行预测
X_new = np.array([[6]])
y_pred = model.predict(X_new)

print("预测结果:", y_pred)

2.2 决策树

决策树是一种基于树形结构进行决策的监督学习算法。它通过从根节点开始根据特征进行分割,逐步构建一个决策树模型。下面是一个简单的决策树的示例代码:

from sklearn.tree import DecisionTreeClassifier

# 构造训练集
X_train = [[5.1, 3.5, 1.4, 0.2], [4.9, 3.0, 1.4, 0.2], [6.2, 3.4, 5.4, 2.3], [5.9, 3.0, 5.1, 1.8]]
y_train = [0, 0, 1, 1]

# 创建决策树分类器并拟合数据
model = DecisionTreeClassifier()
model.fit(X_train, y_train)

# 对新数据进行预测
X_new = [[6.5, 3.0, 5.2, 2.0]]
y_pred = model.predict(X_new)

print("预测结果:", y_pred)

K最近邻算法是一种基于实例的学习方法,它根据最近邻的样本来进行预测。

from sklearn.neighbors import KNeighborsClassifier

# 构造训练集
X_train = [[3, 1.5], [2, 1], [4, 1.5], [3, 1], [3.5, 0.5], [2, 0.5], [5.5, 1], [1, 1], [4.5, 1]]
y_train = ['orange', 'orange', 'orange', 'orange', 'apple', 'apple', 'apple', 'apple', 'orange']

# 创建K最近邻分类器并拟合数据
model = KNeighborsClassifier(n_neighbors=3)
model.fit(X_train, y_train)

# 对新数据进行预测
X_new = [[2.9, 1.2]]
y_pred = model.predict(X_new)

print("预测结果:", y_pred)

⛅️ 1.2 无监督学习

概述:

无监督学习是机器学习中的一个重要分支,它关注的是从未标记的数据中发现有用的信息。相比有监督学习,无监督学习更具挑战性,因为在无监督学习中,我们没有预先标记的输出来指导模型的学习过程。无监督学习的主要任务包括聚类、降维和关联规则挖掘等。

聚类算法:

聚类是无监督学习中最常用的任务之一,它旨在将数据分成不同的组,每个组内的数据在某种意义上是相似的。常见的聚类算法包括K-Means、层次聚类和DBSCAN。我们以K-Means算法为例进行代码实战。

K-Means算法原理

K-Means算法是一种迭代算法,其基本思想是将数据集分为K个簇,每个簇代表一个聚类中心,使得簇内的数据点到其所属聚类中心的距离最小。算法步骤如下:

  1. 随机选择K个数据点作为初始聚类中心。
  2. 将每个数据点分配到距离其最近的聚类中心所在的簇。
  3. 更新每个簇的聚类中心为簇内所有数据点的均值。
  4. 重复步骤2和步骤3,直到聚类中心不再变化或达到最大迭代次数。

K-Means算法代码实战

下面是使用Python实现的K-Means算法示例代码:

# 导入必要的库
import numpy as np
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

# 生成示例数据
np.random.seed(0)
X = np.random.rand(100, 2)

# 使用K-Means算法进行聚类
kmeans = KMeans(n_clusters=3, random_state=0)
kmeans.fit(X)

# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels_)
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], marker='x', color='red')
plt.title('K-Means Clustering')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()


#运行以上代码,我们可以得到一个可视化的聚类结果图。
#图中的数据点被分为了三个簇,并且每个簇的聚类中心用红色的叉标注。

降维技术

降维是无监督学习中的另一个重要任务,它的目标是减少数据的维度,同时保留尽可能多的信息。降维技术有助于可视化高维数据、减少计算复杂度和去除冗余特征等。常见的降维算法包括主成分分析(PCA)和t-SNE算法。

关联规则挖掘

关联规则挖掘是无监督学习的另一个领域,它旨在从大规模数据集中发现项集之间的关联关系。关联规则挖掘在市场分析、推荐系统等领域有着广泛的应用。其中,Apriori算法是最常用的关联规则挖掘算法之一。

⛅️1.3 半监督学习

概述:

半监督学习是介于有监督学习和无监督学习之间的一种学习范式。它通过同时利用有标记数据和未标记数据来训练模型。在实际应用中,往往有大量未标记的数据,而标记数据的获取成本较高,因此半监督学习可以充分利用未标记数据来提升模型性能。

半监督学习算法:

半监督学习算法包括基于图的方法、生成模型和半监督支持向量机等。下面我们将以标签传播算法为例进行详细讲解和代码实战。

标签传播算法原理

标签传播算法是一种基于图的半监督学习算法。它基于数据的相似性来传播标记信息,通过迭代的方式逐步更新未标记数据点的标记。算法的基本步骤如下:

  1. 构建图:根据数据的相似性构建一个图,其中数据点作为图的节点,相似性作为节点之间的边。
  2. 初始化标记:将有标记的数据点标记为其真实标签,未标记的数据点用虚拟标签表示。
  3. 标签传播:通过迭代地更新节点的标签来传播标记信息,每个节点的标签由其邻居节点的标签加权得到。
  4. 收敛判断:当标签传播过程收敛或达到最大迭代次数时停止。

标签传播算法代码实战

下面是使用Python实现的标签传播算法示例代码:

# 导入必要的库
import numpy as np
from sklearn.datasets import make_moons
from sklearn.semi_supervised import LabelPropagation
import matplotlib.pyplot as plt

# 生成示例数据
np.random.seed(0)
X, y = make_moons(n_samples=200, noise=0.05)

# 设置部分数据标记
n_labeled = 10
labels = np.array([-1] * len(X))
labels[:n_labeled] = y[:n_labeled]

# 使用标签传播算法进行半监督学习
label_prop = LabelPropagation(kernel='knn', n_neighbors=10)
label_prop.fit(X, labels)

# 可视化结果
plt.scatter(X[:, 0], X[:, 1], c=label_prop.labels_, cmap='viridis')
plt.title('Label Propagation')
plt.xlabel('X1')
plt.ylabel('X2')
plt.show()

#运行以上代码,我们可以得到一个可视化的结果图。
#图中的数据点被分为不同的颜色,表示其被标记的类别。
#标签传播算法通过利用未标记数据点的相似性来传播标记信息,从而实现了半监督学习。

⛅️1.4 强化学习

概述

强化学习是一种通过智能决策者与环境的交互学习最优策略的学习方法。智能决策者通过观察环境的状态,执行动作,并接收奖励或惩罚来调整策略。强化学习的目标是使智能决策者在与环境的交互中获得最大的累积奖励。

强化学习的要素

强化学习包含以下主要要素:

  • 状态(State):描述环境的特征或观测。
  • 动作(Action):智能决策者在给定状态下可执行的操作。
  • 奖励(Reward):智能决策者在执行动作后,根据环境的反馈获得的奖励或惩罚。
  • 策略(Policy):智能决策者选择动作的方式或规则。
  • 值函数(Value Function):评估在给定策略下,智能决策者在不同状态下获得的长期回报。
  • Q值函数(Q-Value Function):评估在给定策略下,智能决策者在给定状态和动作下获得的长期回报。

强化学习算法

强化学习算法包括基于值函数的方法和基于策略的方法。其中,著名的算法包括Q-Learning、SARSA和深度强化学习(Deep Reinforcement Learning)等。我们将以Q-Learning算法为例进行详细讲解和代码实战。

Q-Learning算法原理

Q-Learning算法是一种基于值函数的强化学习算法。它通过学习一个Q值函数来估计在给定状态和动作下的长期回报。算法的基本步骤如下:

  1. 初始化Q值函数为一个随机值。
  2. 在每个时间步骤中,智能决策者观察当前状态,并基于某个策略选择一个动作。
  3. 执行选定的动作,观察环境的反馈,包括奖励和下一个状态。
  4. 更新Q值函数,以便更好地估计长期回报。
  5. 重复步骤2至4,直到达到指定的停止条件。

Q-Learning算法代码实战

下面是使用Python实现的Q-Learning算法示例代码:

# 导入必要的库
import numpy as np

# 定义环境和参数
num_states = 6
num_actions = 2
epsilon = 0.2
alpha = 0.5
gamma = 0.9

# 初始化Q值函数
Q = np.zeros((num_states, num_actions))

# Q-Learning算法
for episode in range(100):
    state = 0  # 初始状态
    while state != num_states - 1:
        # 选择动作
        if np.random.uniform() < epsilon:
            action = np.random.randint(num_actions)
        else:
            action = np.argmax(Q[state])

        # 执行动作并观察环境反馈
        if action == 0:
            reward = -1
            next_state = state - 1
        else:
            reward = 1
            next_state = state + 1

        # 更新Q值函数
        Q[state, action] += alpha * (reward + gamma * np.max(Q[next_state]) - Q[state, action])

        state = next_state

# 打印学习后的Q值函数
print("Learned Q-Values:")
print(Q)


#运行以上代码,我们可以得到学习后的Q值函数。
#Q值函数将状态和动作对应的长期回报进行了估计,智能决策者可以通过查询Q值函数来选择最优的动作。

⛅️1.5 迁移学习

概述

迁移学习是一种通过将先前学习任务中获得的知识迁移到新任务中的学习方法。它基于这样的观点:在不同任务之间存在一定的相关性,先前学习任务中获得的知识可以帮助新任务的学习过程。迁移学习的目标是提高新任务的学习性能、加速学习过程或改善模型的泛化能力。

迁移学习的关键要素

迁移学习包含以下主要要素:

  • 源领域(Source Domain):先前学习任务中的数据和特征。
  • 源任务(Source Task):先前学习任务的目标。
  • 目标领域(Target Domain):新任务中的数据和特征。
  • 目标任务(Target Task):新任务的目标。
  • 迁移方法(Transfer Method):将源领域中的知识应用于目标领域的方法。

迁移学习算法

迁移学习算法可以分为基于实例的方法、基于特征的方法和基于模型的方法等。其中,著名的算法包括领域自适应(Domain Adaptation)、预训练模型(Pretrained Models)和多任务学习(Multi-Task Learning)等。我们将以预训练模型为例进行详细讲解和代码实战。

预训练模型原理

预训练模型是一种基于模型的迁移学习方法。它通过在大规模数据上进行预训练,学习通用的特征表示,并将这些特征迁移到新任务中。常用的预训练模型包括BERT、GPT和ResNet等。算法的基本步骤如下:

  1. 在大规模数据上进行预训练,学习通用的特征表示。
  2. 冻结预训练模型的参数。
  3. 在新任务的数据上进行微调,只更新新任务的特定层或添加新的分类层。
  4. 使用微调后的模型进行预测和评估。

预训练模型代码实战

下面是使用Python和PyTorch实现预训练模型的示例代码:

# 导入必要的库
import torch
import torch.nn as nn
import torch.optim as optim
import torchvision.models as models
import torchvision.transforms as transforms
import torchvision.datasets as datasets

# 加载预训练模型
model = models.resnet18(pretrained=True)

# 冻结预训练模型的参数
for param in model.parameters():
    param.requires_grad = False

# 替换最后一层分类器
num_classes = 10
model.fc = nn.Linear(model.fc.in_features, num_classes)

# 加载新任务的数据
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())

# 定义优化器和损失函数
optimizer = optim.SGD(model.fc.parameters(), lr=0.001, momentum=0.9)
criterion = nn.CrossEntropyLoss()

# 定义训练和测试函数
def train(model, train_loader, criterion, optimizer):
    model.train()
    for images, labels in train_loader:
        optimizer.zero_grad()
        outputs = model(images)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

def test(model, test_loader):
    model.eval()
    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()
    accuracy = 100.0 * correct / total
    return accuracy

# 加载数据并进行训练和测试
batch_size = 64
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=batch_size, shuffle=False)

# 进行训练和测试
num_epochs = 10
for epoch in range(num_epochs):
    train(model, train_loader, criterion, optimizer)
    accuracy = test(model, test_loader)
    print('Epoch: {}, Accuracy: {:.2f}%'.format(epoch+1, accuracy))

#运行以上代码,我们可以使用预训练的ResNet模型在CIFAR-10数据集上进行微调和测试。
#预训练模型学习到的通用特征表示可以帮助模型更快地收敛,并在新任务上获得更好的性能。

⛅️1.6 集成学习

概述

集成学习是一种组合多个机器学习模型的技术,旨在提高整体性能。它通过整合多个模型的预测结果,利用模型之间的差异性来减少误差、增强泛化能力,并提高对未知数据的预测准确性。常见的集成学习方法包括投票法(Voting)、平均法(Averaging)、堆叠法(Stacking)和Boosting等。

集成学习的关键要素

集成学习包含以下主要要素:

  • 基础学习器(Base Learners):组成集成模型的个体学习器。
  • 集成策略(Ensemble Strategy):定义如何整合基础学习器的预测结果。
  • 学习器的多样性(Diversity of Learners):保证基础学习器之间的差异性。

集成学习算法

集成学习算法可以分为平均法、投票法、堆叠法和Boosting等。我们将以随机森林为例进行详细讲解和代码实战。

随机森林原理

随机森林是一种基于决策树的集成学习方法。它通过构建多个决策树并整合它们的预测结果来进行分类或回归。随机森林的基本步骤如下:

  1. 从原始数据集中随机选择一部分样本,构建决策树。
  2. 重复步骤1多次,得到一组决策树。
  3. 对于分类任务,通过投票法确定最终的类别;对于回归任务,通过平均法确定最终的预测值。

随机森林代码实战

下面是使用Python和Scikit-learn实现随机森林的示例代码:

# 导入必要的库
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加载数据集
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.2, random_state=42)

# 构建随机森林模型
rf = RandomForestClassifier(n_estimators=100, random_state=42)

# 拟合模型
rf.fit(X_train, y_train)

# 预测
y_pred = rf.predict(X_test)

# 评估准确率
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy: {:.2f}%'.format(accuracy * 100))

#运行以上代码,我们可以使用随机森林模型对鸢尾花数据集进行分类。
#随机森林通过构建多个决策树并整合它们的预测结果来提高分类准确率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/572556.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

举个栗子~Tableau 技巧(254):学做圆形维诺图(Voronoi diagram)

关于维诺图 维诺图用于分析不同集合之间的交集和差集关系。在数据科学和统计学中&#xff0c;它常用于可视化不同数据集之间的重叠和交集&#xff0c;以便更好地理解它们之间的关系和差异。 例如&#xff0c;我们可以使用维诺图来展示不同客户群之间的交集&#xff0c;以便更…

编辑与校对的艺术:如何提高公文写作质量

在写作过程中&#xff0c;编辑与校对是提高作品质量的关键环节。它们不仅涉及语法、拼写和标点等基本问题&#xff0c;还包括文本的组织、表达和内容。通过掌握编辑与校对的艺术&#xff0c;你可以使你的文字更具说服力、更清晰易懂&#xff0c;从而更有效地传达你的观点。 1.认…

分布式系统监控zabbix安装部署及自定义监控

目录 一、zabbix的基本概述1.1 zabbix 监控原理1.2 Zabbix 6.0 新特性1.3 Zabbix 6.0 功能组件1.4 zabbix的监控对象1.5 zabbix的常用术语 二、zabbix进程详解三、zabbix的监控框架四、zabbix源码安装及部署4.1 部署 zabbix 服务端4.2 安装 zabbix 客户端&#xff0c;实现 zabb…

00后学什么技术有前途?2023年Java和前端发展前景分析!

00后的你还在想着进厂吗&#xff1f;每天在流水线上打螺丝&#xff0c;过着一成不变的日子&#xff0c;而且每个月就休息那么几天。如果你不想进厂&#xff0c;特别是对那些20岁刚出头或者学历不是那么有优势的年轻人&#xff0c;好程序员建议还是应该去学习一门技术&#xff0…

从 OceanBase 迁移数据到 DolphinDB

OceanBase 是一款金融级分布式关系数据库&#xff0c;具有数据强一致、高可用、高性能、在线扩展、高度兼容 SQL标准和主流关系数据库、低成本等特点&#xff0c;但是其学习成本较高&#xff0c;且缺乏金融计算函数以及流式增量计算的功能。 DolphinDB 是一款国产的高性能分布…

Micro-python Socket 支持 ROS2 topic 框架 (一)

消息Topic ROS2官方文档 Topic官方介绍 是各节点之间的信息交流媒介&#xff0c;可以实现一对一&#xff0c;一对多&#xff0c;多对一&#xff0c;多对多的信息交流&#xff0c;如图所示 &#xff08;一&#xff09;使用工具打开消息流图 打开rqt_graph&#xff08;注意其…

如何利用IDEA将Git分支代码回退到指定历史版本

一、背景 作为一名后端开发&#xff0c;相信大家一定遇到过这样的情景&#xff0c;代码开发人员过多&#xff0c;并且开发分支过多&#xff0c;导致代码版本管理困难&#xff0c;这样就难免遇到一些代码合并出错&#xff0c;比如&#xff0c;当我提交了本次修改到本地和远程分…

Spring Boot注解@Async与线程池的配置

目录 使用异步注解创建异步任务 Async注解 使用Demo 线程池配置 Spring Boot默认用于异步任务线程池配置 线程池配置 线程池隔离 为什么需要线程池隔离&#xff1f; 线程池隔离实现Demo 线程池配置&#xff1a; 异步任务&#xff1a; 测试demo 参考内容&#xff1a; 使…

动态优化会议地点

前言 在现在快节奏的工作节奏下&#xff0c;大家的活动范围越来越广&#xff0c;但是出行成本也相应提高。在集体会面的时候&#xff0c;如何选择合适的地点成为了一个棘手的问题。本文将介绍如何通过动态优化选择会议地点&#xff0c;以达到平均交通成本最低的目标。 动态优化…

【操作系统真象还原】第4章:保护模式入门(4.4~4.5节)

目录 4.4 处理器微架构简介 4.4.1 流水线 4.4.2 乱序执行 4.4.3 缓存 4.4.4 分支预测 4.5 使用远跳转指令清空流水线&#xff0c;更新段描述符缓冲寄存器 4.6 保护模式之内存段的保护 4.6.1 向段寄存器加载选择子时的保护 4.6.2 代码段和数据段的保护 4.6.3 栈段的保…

CentOS7 网络配置

在Linux系统下 查询CentOS7的ip地址 输入ip查询命名 ip addr 也可以输入 ifconfig查看ip&#xff0c;但此命令会出现3个条目&#xff0c; centos的ip地址是ens33条目中的inet值。 输入命令: ip addr 结果如下: 使用: ifconfig 命令查询结果如下: 发现 ens33 没有 inet 这个属性…

国内半导体分立器件逐步向高端应用市场推进,未来可期

分立器件行业概况 半导体分立器件是半导体产业的基础及核心领域之一&#xff0c;其具有应用领域广阔、高成品率、特殊器件不可替代等特性。 从市场需求看&#xff0c;分立器件受益于物联网、可穿戴设备、智能家居、健康护理、安防电子、新能源汽车、智能电网、5G通信射频等市…

如何在华为OD机试中获得满分?Java实现【云短信平台优惠活动】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述4. Java算法源码5. 测试6.解题思路1. 题目描述 某云短信厂商,为庆祝国…

如何建立自己的微信小程序,做一个微信小程序大概多少钱?

如今&#xff0c;小程序的功能越来越强大&#xff0c;也越来越受欢迎&#xff0c;它不仅能帮助企业和商家做推广&#xff0c;还能给他们带来很多好处。所以&#xff0c;很多企业都开始建立自己的小程序。但是对于如何建立自己的微信小程序&#xff0c;以及做一个微信小程序大概…

Zemax Lumerical | 二维光栅出瞳扩展系统优化

简介 本文提出并演示了一种以二维光栅耦出的光瞳扩展&#xff08;EPE&#xff09;系统优化和公差分析的仿真方法。 在这个工作流程中&#xff0c;我们将使用3个软件进行不同的工作 &#xff0c;以实现优化系统的大目标。首先&#xff0c;我们使用 Lumerical 构建光栅模型并使用…

基于C++的网盘系统项目开发教程

项目资源下载 基于C的网盘系统项目源码CSDN下载地址基于C的网盘系统项目源码GitHub下载地址 项目简介 本项目基于C开发&#xff0c;整个项目采用C/S架构&#xff0c;使用Sqlite3数据库存储用户信息&#xff0c;本地磁盘存储用户文件&#xff0c;使用Socket进行客户端和服务器之…

智能指针: share_ptr(共享智能指针)

智能指针 c中不像java自带垃圾回收机制&#xff0c;必须释放掉分配的内存&#xff0c;否则机会造成内存泄漏。因此c11加入了智能指针。智能指针是存储指向动态分配&#xff08;堆&#xff09;对象指针的类&#xff0c;用于生存期的控制&#xff0c;能够确保在离开指针所在作用…

Selenium4自动化框架(超级详细)

目录 Selenium4 安装Selenium 安装浏览器驱动 实战案例 导入模块及浏览器驱动 导入模块 启动驱动 定位元素 id、name、class定位 tag_name定位 xpath定位 css选择器定位 link_text、partial_link_text定位 其他定位 定位一组元素 执行操作 浏览器操作 获取信息…

1. 自然语言处理NLP-数据预处理

NLP任务预处理的流程包括&#xff1a; 收集语料库、文本清洗、分词、去掉停用词、标准化和特征提取等。 &#xff08;1&#xff09;收集语料库 &#xff08;2&#xff09;清洗数据 eg&#xff1a;删除所有不相关的字符&#xff0c;例如非字母数字字母 &#xff08;3&#xff09…

Java Servlet相关面试题

一、什么是servlet&#xff1f; Servlet是运行在java服务器中的小型Java程序。 作用&#xff1a;接收用户请求&#xff0c;并对请求作出处理&#xff0c;将处理结果相应给客户端。 Servlet是JavaWeb三大组件&#xff08;Servlet、过滤器&#xff0c;监听器 &#xff09;之一…