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

机器学习day2-特征工程

四.特征工程

1.概念

一般使用pandas来进行数据清洗和数据处理、使用sklearn来进行特征工程

将任意数据(文本或图像等)转换为数字特征,对特征进行相关的处理

步骤:1.特征提取;2.无量纲化(预处理):归一化、标准化;3.降维:底方差过滤特征选择,主成分分析-PCA降维

2.特征工程API

①.实例化转换器对象

DictVectorizer      字典特征提取
CountVectorizer     文本特征提取
TfidfVectorizer     TF-IDF文本特征词的重要程度特征提取 
MinMaxScaler        归一化
StandardScaler      标准化
VarianceThreshold   底方差过滤降维
PCA                 主成分分析降维

②.fit,transform和fit_transform

fit:用于计算数据的统计信息,比如均值和标准差(在StandardScaler的情况下),这些统计信息随后会被用于预测出来的数据

transform:使用已经通过fit方法计算出的统计信息来转换数据。

fit_transform:两者结合,更高效

一旦scaler对象在X_train上被fit,它就已经知道了如何将数据标准化。

先fit_transform(x_train)然后再transform(x_text)

fit只用一次

# fit 和 transform 和fittransform 区别
from sklearn.preprocessing import StandardScaler,MinMaxScaler
import numpy as np
transfer=StandardScaler()
x=np.random.randint(100,size=(3,4))
print(x)
transfer.fit(x)#计算出均值和标准差
x=transfer.transform(x)
# x=transfer.fit_transform(x)
print(x)
x2=np.array([[10,20,30,40]])
x2=transfer.transform(x2)
​
print(x2)

3.DictVectorizer 字典列表特征提取

1.稀疏矩阵

一个矩阵中大部分元素为0,常见于大规模数据分析、图形学、自然语言处理、机器学习等领域

常用存储方式:①.三元组表 (Coordinate List, COO):三元组表就是一种稀疏矩阵类型数据,存储非零元素的行索引、列索引和值:

(行,列) 数据

(0,0) 10

(0,1) 20

(2,0) 90

(2,20) 8

(8,0) 70

表示除了列出的有值, 其余全是0

②.压缩稀疏行 (CSR - Compressed Sparse Row):

  • CSR 格式将稀疏矩阵中的非零元素按行优先的方式存储。它使用了三个数组:

    • data:存储非零元素的值。

    • indices:存储data中每个元素的列索引。

    • indptr:存储每一行在dataindices数组中的起始位置。

  • CSR 格式非常适合快速地进行行访问和矩阵向量乘法。

③.压缩稀疏列 (CSC - Compressed Sparse Column):

  • CSC 格式类似于 CSR,但它是按列优先的方式来存储稀疏矩阵。同样也使用了三个数组:

    • data:存储非零元素的值。

    • indices:存储data中每个元素的行索引。

    • indptr:存储每一列在dataindices数组中的起始位置。

  • CSC 格式对于快速地进行列访问和某些类型的矩阵运算很有帮助。

④.字典 (Dictionary of Keys - DOK):

DOK 格式使用一个字典来存储非零元素,其中键是元素的位置(通常是元组 (row, column)),值是非零元素本身。

  • 这种格式适合于动态地增加或修改矩阵中的非零元素。

⑤.链表 (List of Lists - LIL):

  • LIL 格式使用两个列表来表示稀疏矩阵。其中一个列表包含每一行的非零元素,另一个列表包含了这些非零元素的列索引。

  • LIL 格式适合于构建稀疏矩阵,特别是当矩阵的结构在构建过程中发生变化时。

⑥.块稀疏行 (BSR - Block Sparse Row):

  • BSR 格式类似于 CSR,但它不是处理单个非零元素,而是处理固定大小的非零元素块。

  • 这种格式适用于那些非零元素倾向于形成小的密集子矩阵的情况。

2.非稀疏矩阵(稠密矩阵)

矩阵中的大部分元素都是非0的,矩阵的存储通常采用标准的二维数组形式。在数学计算、线性代数等通用计算领域更为常见。

3.API

创建转换器对象:

sklearn.feature_extraction.DictVectorizer(sparse=True)

DictVectorizer:字典向量化工具

参数:

sparse=True返回类型为csr_matrix的稀疏矩阵

sparse=False表示返回的是数组,数组可以调用.toarray()方法将稀疏矩阵转换为数组

转换器对象:

转换器对象调用fit_transform(data)函数,参数data为一维字典数组或一维字典列表,返回转化后的矩阵或数组

转换器对象get_feature_names_out()方法获取特征名

eg1.提取为稀疏矩阵对应的数组
# 字典列表特征提取
from sklearn.feature_extraction import DictVectorizer
import pandas   as pd
data=[{'city':'北京','money':38,"age":20},{'city':'上海','money':60,"age":29},{'city':'深圳','money':30,"age":32},{'city':'深圳','money':40,"age":49}]
# 初始化工具(字典变成向量的工具器)
model=DictVectorizer(sparse=False)#sparse是否转换成三元组形式
data=model.fit_transform(data)
# print(data,type(data))
# print(model.get_feature_names_out())#获取所有的特征名称
ddata=pd.DataFrame(data=data,columns=model.get_feature_names_out())
# print(ddata)
ddata
eg2.提取为稀疏矩阵
# 字典列表特征提取
from sklearn.feature_extraction import DictVectorizer
import pandas   as pd
data=[{'city':'北京','money':38,"age":20},{'city':'上海','money':60,"age":29},{'city':'深圳','money':30,"age":32},{'city':'深圳','money':40,"age":49}]
# 初始化工具(字典变成向量的工具器)
model=DictVectorizer(sparse=True)#sparse是否转换成三元组形式
data=model.fit_transform(data)
print(data,type(data))
arr=data.toarray()#把三元组(稀疏矩阵)转化为数组
print(arr)

4.CountVectorizer 文本特征提取

1.API

sklearn.feature_extraction.text.CountVectorizer

构造函数关键字参数stop_words,值为list,表示词的黑名单(不提取的词)

fit_transform函数的返回值为稀疏矩阵

eg3.英文文本提取
# CountVectorizer 文本特征提取
from sklearn.feature_extraction.text import CountVectorizer
corpus = ['I love machine learning. Its awesome.', 'Its a book amazon book', 'Amazon is book a great company']
# 创建一个词频提取对象
vectorizer = CountVectorizer(stop_words=[])
# 提取词频
x=vectorizer.fit_transform(corpus)
print(x)
print(x.toarray())
print(vectorizer.get_feature_names_out())
eg4.中文文本提取
! pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jieba
# CountVectorizer 中文本特征提取
from sklearn.feature_extraction.text import CountVectorizer
import jieba
import pandas as pd
# arr=list(jieba.cut("我爱北京天安门"))
# print(arr)
# str1=" ".join(arr)
# print(str1)
#传入的文本(没有断词的字符串) 用jieba分词工具转化为数据容器,然后再把数据容器中元素用空格连接成字符串
def my_cut(text):return " ".join(jieba.cut(text))
​
​
corpus = ["教育学会会长期间,坚定支持民办教育事业!",  "扶持民办,学校发展事业","事业做出重大贡献!"]
# # 创建一个词频提取对象
vectorizer = CountVectorizer(stop_words=[])
# 提取词频
data=[my_cut(el) for el in corpus]
print(data)
x=vectorizer.fit_transform(data)
print(x)
print(x.toarray())
print(vectorizer.get_feature_names_out())
​
ddata=pd.DataFrame(x.toarray(),columns=vectorizer.get_feature_names_out())
ddata

5.TfidfVectorizer TF-IDF文本特征词的重要程度特征提取

1.算法

词频(Term Frequency, TF), 表示一个词在当前篇文章中的重要性,是对词数的归一化

TF=某个词在文章中的出现次数/文章的总词数

逆文档频率(Inverse Document Frequency, IDF), 反映了词在整个文档集合中的稀有程度

IDF=lg((语料库的文档总数+1)/(包含该词的文档数+1))

TF-IDF=词频(TF)×逆文档频率(IDF)

2.API

sklearn.feature_extraction.text.TfidfVectorizer()

构造函数关键字参数stop_words,表示词特征黑名单

fit_transform函数的返回值为稀疏矩阵

eg5
from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer
import jieba
import pandas as pd
def my_cut(text):return " ".join(jieba.cut(text))
data=["教育学会会长期间,坚定支持民办教育事业!",  "扶持民办,学校发展事业","事业做出重大贡献!"]
data=[my_cut(i) for i in data]
print(data)
transfer=TfidfVectorizer(stop_words=[])
res=transfer.fit_transform(data)
print(transfer.get_feature_names_out())
print(res.toarray())
ddata=pd.DataFrame(res.toarray(),columns=transfer.get_feature_names_out())
ddata

6.无量纲化-预处理

1.MinMaxScaler 归一化

2.归一化API

sklearn.preprocessing.MinMaxScaler(feature_range)

参数:feature_range=(0,1) 归一化后的值域,可以自己设定

fit_transform函数归一化的原始数据类型可以是list、DataFrame和ndarray, 不可以是稀疏矩阵

fit_transform函数的返回值为ndarray

eg6.归一化
from sklearn.preprocessing import MinMaxScaler
import pandas as   pd
scaler=MinMaxScaler(feature_range=(0,1))
data=pd.read_excel("./src/test2.xlsx")
print(data.values)
# arr=scaler.fit_transform(data.values)
arr=scaler.fit_transform(data)
print(arr)

鲁棒性较差

# 字典列表特征提取后的结果归一化
from sklearn.feature_extraction import DictVectorizer
from sklearn.preprocessing  import MinMaxScaler
import pandas   as pd
data=[{'city':'北京','money':38,"age":20},{'city':'上海','money':60,"age":29},{'city':'深圳','money':30,"age":32},{'city':'深圳','money':40,"age":49}]
# 初始化工具(字典变成向量的工具器)
model=DictVectorizer(sparse=True)#sparse是否转换成三元组形式
data=model.fit_transform(data)
# print(data,type(data))
arr=data.toarray()#把三元组(稀疏矩阵)转化为数组
print(arr)
arr_1=MinMaxScaler().fit_transform(arr)
arr_1

3.StandardScaler 标准化

4.标准化API

sklearn.preprocessing.StandardScale

与MinMaxScaler一样,原始数据类型可以是list、DataFrame和ndarray

fit_transform函数的返回值为ndarray, 归一化后得到的数据类型都是ndarray

eg7.标准化
from sklearn.preprocessing import StandardScaler
import numpy as np
# 初始化标准化工具
scaler = StandardScaler()
np.random.seed(7)
data=np.array([[1,2,3,4],[2,2,3,4],[3,2,3,4],[4,2,3,4]])
#np.random.randint(0,100,(30,4))
# print(data)
# 把data进行标准化
x=scaler.fit_transform(data)
print(x)

7.特征降维

降维:去掉一些特征或者将多个特征转化为少量个特征

在尽可能保留数据的重要信息上减少数据集维度,可以减少计算成本、去除噪声

方式:特征选择、主成份分析(PCA)

1.特征选择
①.VarianceThreshold 低方差过滤特征选择

计算方差-设定阈值-过滤特征

eg8
# 低方差过滤
from sklearn.feature_selection import VarianceThreshold
transfer=VarianceThreshold(threshold=0.01)
x=[[0,2,0,3],[0,1,4,3],[0,1,1,3]]
x=transfer.fit_transform(x)
print(x)

②.根据相关系数的特征选择

正相关性:一个变量增加通常伴随着另一个变量的增加。ρ=1,完全正相关

负相关性:一个变量减少通常伴随着另一个变量的减少。ρ=-1,完全负相关

不相关:两者的相关性很小,一个变量变化不会引起另外的变量变化。ρ=0,不存在线性关系

! pip install -i https://pypi.tuna.tsinghua.edu.cn/simple scipy

皮尔逊相关系数(Pearson correlation coefficient)是一种度量两个变量之间线性相关性的统计量。它提供了两个变量间关系的方向(正相关或负相关)和强度的信息,取值范围是 [−1,1]。绝对值越大,表示越相关,当两特征完全相关时,两特征的值表示的向量是在同一条直线上,当两特征的相关系数绝对值很小时,两特征值表示的向量接近在同一条直线上。当相关系值为负数时,表示负相关

|ρ|<0.4为低度相关; 0.4<=|ρ|<0.7为显著相关; 0.7<=|ρ|<1为高度相关

API:

scipy.stats.personr(x, y) 计算两特征之间的相关性

返回对象有两个属性:

statistic皮尔逊相关系数[-1,1]

pvalue零假设(了解),统计上评估两个变量之间的相关性,越小越相关

from scipy.stats import pearsonr
import numpy as np
x1=[1,2,3,4,5]
y=[2,4,6,8,10]
r=pearsonr(x1,y)
print(r.statistic,r.pvalue)

2.主成份分析(PCA)

从原始特征空间中找到一个新的坐标系统,使得数据在新坐标轴的投影能够最大程度地保留数据的方差,同时减少维度。

保留信息/丢失信息=信息保留的比例

步骤:得到矩阵-用矩阵P对原始数据进行线性变换,得到新的数据矩阵Z-根据主成分的方差等,确定最终保留的主成分个数,留下方差大的

API

from sklearn.decomposition import PCA

PCA(n_components=None)

n_components:

  • 实参为小数时:表示降维后保留百分之多少的信息

  • 实参为整数时:表示减少到多少特征

    eg9
#特征降维 减少到多少特征
from sklearn.decomposition import PCA
data=[[2,8,4,5],[6,3,0,8],[5,4,9,1]]
pca=PCA(n_components=2)
data=pca.fit_transform(data)
print(data)

#特征降维
from sklearn.decomposition import PCA
import numpy as np
data=np.random.rand(5,100)#5条数据,100个特征量
#print(data)
pca=PCA(n_components=0.8)
data=pca.fit_transform(data)
print(data.shape,data)

相关文章:

机器学习day2-特征工程

四.特征工程 1.概念 一般使用pandas来进行数据清洗和数据处理、使用sklearn来进行特征工程 将任意数据&#xff08;文本或图像等&#xff09;转换为数字特征&#xff0c;对特征进行相关的处理 步骤&#xff1a;1.特征提取&#xff1b;2.无量纲化&#xff08;预处理&#xf…...

Python数据分析NumPy和pandas(三十五、时间序列数据基础)

时间序列数据是许多不同领域的结构化数据的重要形式&#xff0c;例如金融、经济、生态学、神经科学和物理学。在许多时间点重复记录的任何内容都会形成一个时间序列。许多时间序列是固定频率的&#xff0c;也就是说&#xff0c;数据点根据某些规则定期出现&#xff0c;例如每 1…...

Python 小高考篇(6)常见错误及排查

目录 TypeError拼接字符串和数字错误示范正确示范 数字、字符串当成函数错误示范 给函数传入未被定义过的参数错误示范 传入的参数个数不正确错误示范 字符串相乘错误示范正确示范 量取整数的长度错误示范正确示范 格式化字符串时占位符个数不正确错误示范 给复数比较大小错误示…...

k8s上部署redis高可用集群

介绍&#xff1a; Redis Cluster通过分片&#xff08;sharding&#xff09;来实现数据的分布式存储&#xff0c;每个master节点都负责一部分数据槽&#xff08;slot&#xff09;。 当一个master节点出现故障时&#xff0c;Redis Cluster能够自动将故障节点的数据槽转移到其他健…...

C++的类和对象

在C中&#xff0c;类&#xff08;class&#xff09;和对象&#xff08;object&#xff09;是面向对象编程&#xff08;OOP&#xff09;的核心概念。以下是它们的详细介绍&#xff1a; 1. 类&#xff08;Class&#xff09; 定义&#xff1a; 类是用来定义一个新的数据类型&…...

自动驾驶系列—深入解析自动驾驶车联网技术及其应用场景

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…...

机器学习(1)

一、机器学习 机器学习&#xff08;Machine Learning, ML&#xff09;是人工智能&#xff08;Artificial Intelligence, AI&#xff09;的一个分支&#xff0c;它致力于开发能够从数据中学习并改进性能的算法和模型。机器学习的核心思想是通过数据和经验自动优化算法&#xff…...

深入理解 Redis跳跃表 Skip List 原理|图解查询、插入

1. 简介 跳跃表 ( skip list ) 是一种有序数据结构&#xff0c;通过在每个节点中维持多个指向其他节点的指针&#xff0c;从而达到快速访问节点的目的。 在 Redis 中&#xff0c;跳跃表是有序集合键的底层实现之一&#xff0c;那么这篇文章我们就来讲讲跳跃表的实现原理。 2. …...

Halcon HImage 与 Qt QImage 的相互转换(修订版)

很久以前&#xff0c;我写过一遍文章来介绍 HImage 和 QImage 之间的转换方法。&#xff08;https://blog.csdn.net/liyuanbhu/article/details/91356988&#xff09; 这个代码其实是有些问题的。因为我们知道 QImage 中的图像数据不一定是连续的&#xff0c;尤其是图像的宽度…...

【Golang】——Gin 框架中的模板渲染详解

Gin 框架支持动态网页开发&#xff0c;能够通过模板渲染结合数据生成动态页面。在这篇文章中&#xff0c;我们将一步步学习如何在 Gin 框架中配置模板、渲染动态数据&#xff0c;并结合静态资源文件创建一个功能完整的动态网站。 文章目录 1. 什么是模板渲染&#xff1f;1.1 概…...

CSS:导航栏三角箭头

用CSS实现导航流程图的样式。可根据自己的需求进行修改&#xff0c;代码精略的写了一下。 注&#xff1a;场景一和场景二在分辨率比较低的情况下会有一个1px的缝隙不太优雅&#xff0c;自行处理。有个方法是直接在每个外面包一个DIV&#xff0c;用动态样式设置底色。 场景一、…...

onlyoffice Command service(命令服务)使用示例

一、说明 文档在这里&#xff1a;https://api.onlyoffice.com/docs/docs-api/additional-api/command-service/ 命令服务提供有几个简单的接口封装。也提供了前端和后端同时操作文档的可能。 二、正文 命令服务地址&#xff1a;https://documentserver/coauthoring/Com…...

QSS 设置bug

问题描述&#xff1a; 在QWidget上add 一个QLabel&#xff0c;但是死活不生效 原因&#xff1a; c 主程序如下&#xff1a; QWidget* LOGO new QWidget(logo_wnd);LOGO->setFixedSize(logo_width, 41);LOGO->setObjectName("TittltLogo");QVBoxLayout* tit…...

交换排序——快速排序

交换排序——快速排序 7.7 交换排序——快速排序快速排序概念c语言的库函数qsort快速排序框架quickSort 7.7 交换排序——快速排序 快速排序概念 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法&#xff08;下文简称快排&#xff09;&#xff0c;其基本思想为&a…...

nodejs入门(1):nodejs的前后端分离

一、引言 我关注nodejs还是从前几年做了的一个电力大数据展示系统开始的&#xff0c;当然&#xff0c;我肯定是很多年的计算机基础的&#xff0c;万变不离其宗。 现在web网站都流行所谓的前后端结构&#xff0c;不知不觉我也开始受到这个影响&#xff0c;以前都是前端直接操作…...

笔记|M芯片MAC (arm64) docker上使用 export / import / commit 构建amd64镜像

很简单的起因&#xff0c;我的东西最终需要跑在amd64上&#xff0c;但是因为mac的架构师arm64&#xff0c;所以直接构建好的代码是没办法跨平台运行的。直接在arm64上pull下来的docker镜像也都是arm64架构。 检查镜像架构&#xff1a; docker inspect 8135f475e221 | grep Arc…...

gorm框架

连接 需要下载mysql的驱动 go get gorm.io/driver/mysql go get gorm.io/gorm 约定 主键&#xff1a;GORM 使用一个名为ID 的字段作为每个模型的默认主键。表名&#xff1a;默认情况下&#xff0c;GORM 将结构体名称转换为 snake_case 并为表名加上复数形式。 例如&#xf…...

免费送源码:Java+Springboot+MySQL Springboot多租户博客网站的设计 计算机毕业设计原创定制

Springboot多租户博客网站的设计 摘 要 博客网站是当今网络的热点&#xff0c;博客技术的出现使得每个人可以零成本、零维护地创建自己的网络媒体&#xff0c;Blog站点所形成的网状结构促成了不同于以往社区的Blog文化&#xff0c;Blog技术缔造了“博客”文化。本文课题研究的“…...

【ASR技术】WhisperX安装使用

介绍 WhisperX 是一个开源的自动语音识别&#xff08;ASR&#xff09;项目&#xff0c;由 m-bain 开发。该项目基于 OpenAI 的 Whisper 模型&#xff0c;通过引入批量推理、强制音素对齐和语音活动检测等技术。提供快速自动语音识别&#xff08;large-v2 为 70 倍实时&#xf…...

【计算机网络】协议定制

一、结构化数据传输流程 这里涉及协议定制、序列化/反序列化的知识 对于序列化和反序列化&#xff0c;有现成的解决方案&#xff1a;①json ②probuff ③xml 二、理解发送接收函数 我们调用的所有发送/接收函数&#xff0c;根本就不是把数据发送到网络中&#xff01;本质都是…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

sshd代码修改banner

sshd服务连接之后会收到字符串&#xff1a; SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢&#xff1f; 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头&#xff0c…...