11.12机器学习_特征工程
四 特征工程
1 特征工程概念
特征工程:就是对特征进行相关的处理
一般使用pandas来进行数据清洗和数据处理、使用sklearn来进行特征工程
特征工程是将任意数据(如文本或图像)转换为可用于机器学习的数字特征,比如:字典特征提取(特征离散化)、文本特征提取、图像特征提取。
特征工程步骤为:
-
特征提取, 如果不是像dataframe那样的数据,要进行特征提取,比如字典特征提取,文本特征提取
-
无量纲化(预处理)
- 归一化
- 标准化
-
降维
-
底方差过滤特征选择
-
主成分分析-PCA降维
-
2 特征工程API
-
实例化转换器对象,转换器类有很多,都是Transformer的子类, 常用的子类有:
DictVectorizer 字典特征提取 CountVectorizer 文本特征提取 TfidfVectorizer TF-IDF文本特征词的重要程度特征提取 MinMaxScaler 归一化 StandardScaler 标准化 VarianceThreshold 底方差过滤降维 PCA 主成分分析降维
-
转换器对象调用fit_transform()进行转换, 其中fit用于计算数据,transform进行最终转换
fit_transform()可以使用fit()和transform()代替
data_new = transfer.fit_transform(data) 可写成 transfer.fit(data) data_new = transfer.transform(data)
3 DictVectorizer 字典列表特征提取
稀疏矩阵
稀疏矩阵是指一个矩阵中大部分元素为零,只有少数元素是非零的矩阵。在数学和计算机科学中,当一个矩阵的非零元素数量远小于总的元素数量,且非零元素分布没有明显的规律时,这样的矩阵就被认为是稀疏矩阵。例如,在一个1000 x 1000的矩阵中,如果只有1000个非零元素,那么这个矩阵就是稀疏的。
由于稀疏矩阵中零元素非常多,存储和处理稀疏矩阵时,通常会采用特殊的存储格式,以节省内存空间并提高计算效率。
三元组表 (Coordinate List, COO):三元组表就是一种稀疏矩阵类型数据,存储非零元素的行索引、列索引和值:
(行,列) 数据
(0,0) 10
(0,1) 20
(2,0) 90
(2,20) 8
(8,0) 70
表示除了列出的有值, 其余全是0
非稀疏矩阵(稠密矩阵)
非稀疏矩阵,或称稠密矩阵,是指矩阵中非零元素的数量与总元素数量相比接近或相等,也就是说矩阵中的大部分元素都是非零的。在这种情况下,矩阵的存储通常采用标准的二维数组形式,因为非零元素密集分布,不需要特殊的压缩或优化存储策略。
- 存储:稀疏矩阵使用特定的存储格式来节省空间,而稠密矩阵使用常规的数组存储所有元素,无论其是否为零。
- 计算:稀疏矩阵在进行计算时可以利用零元素的特性跳过不必要的计算,从而提高效率。而稠密矩阵在计算时需要处理所有元素,包括零元素。
- 应用领域:稀疏矩阵常见于大规模数据分析、图形学、自然语言处理、机器学习等领域,而稠密矩阵在数学计算、线性代数等通用计算领域更为常见。
在实际应用中,选择使用稀疏矩阵还是稠密矩阵取决于具体的问题场景和数据特性。
(1) api
-
创建转换器对象:
sklearn.feature_extraction.DictVectorizer(sparse=True)
参数:
sparse=True返回类型为csr_matrix的稀疏矩阵
sparse=False表示返回的是数组,数组可以调用.toarray()方法将稀疏矩阵转换为数组
-
转换器对象:
转换器对象调用fit_transform(data)函数,参数data为一维字典数组或一维字典列表,返回转化后的矩阵或数组
转换器对象get_feature_names_out()方法获取特征名
(2)示例1 提取为稀疏矩阵对应的数组
from sklearn.feature_extraction import DictVectorizer
data = [{'city':'成都', 'age':30, 'temperature':200}, {'city':'重庆','age':33, 'temperature':60}, {'city':'北京', 'age':42, 'temperature':80}]
#创建DictVectorizer对象
transfer = DictVectorizer(sparse=False)
data_new = transfer.fit_transform(data)
# data_new的类型为ndarray
#特征数据
print("data_new:\n", data_new)
#特征名字
print("特征名字:\n", transfer.get_feature_names_out())
data_new:[[ 30. 0. 1. 0. 200.][ 33. 0. 0. 1. 60.][ 42. 1. 0. 0. 80.]]
特征名字:['age' 'city=北京' 'city=成都' 'city=重庆' 'temperature']
import pandas
pandas.DataFrame(data_new, columns=transfer.get_feature_names_out())
(3)示例2 提取为稀疏矩阵
from sklearn.feature_extraction import DictVectorizer
data = [{'city':'成都', 'age':30, 'temperature':200}, {'city':'重庆','age':33, 'temperature':60}, {'city':'北京', 'age':42, 'temperature':80}]
#创建DictVectorizer对象
transfer = DictVectorizer(sparse=True)
data_new = transfer.fit_transform(data)
#data_new的类型为<class 'scipy.sparse._csr.csr_matrix'>
print("data_new:\n", data_new)
#得到特征
print("特征名字:\n", transfer.get_feature_names_out())
其中(row,col)数据中的col表示特征, 本示例中0表示 ‘age’, 1表示‘city=北京’,……
data_new:(0, 0) 30.0(0, 2) 1.0(0, 4) 200.0(1, 0) 33.0(1, 3) 1.0(1, 4) 60.0(2, 0) 42.0(2, 1) 1.0(2, 4) 80.0
特征名字:['age' 'city=北京' 'city=成都' 'city=重庆' 'temperature']
(4)稀疏矩阵转为数组
稀疏矩阵对象调用toarray()函数, 得到类型为ndarray的二维稀疏矩阵
4 CountVectorizer 文本特征提取
(1)API
sklearn.feature_extraction.text.CountVectorizer
构造函数关键字参数stop_words,值为list,表示词的黑名单(不提取的词)
fit_transform函数的返回值为稀疏矩阵
(2) 英文文本提取
from sklearn.feature_extraction.text import CountVectorizer
import pandas as pd
data=["stu is well, stu is great", "You like stu"]
#创建转换器对象, you和is不提取
transfer = CountVectorizer(stop_words=["you","is"])
#进行提取,得到稀疏矩阵
data_new = transfer.fit_transform(data)
print(data_new)import pandas
pandas.DataFrame(data_new.toarray(), index=["第一个句子","第二个句子"],columns=transfer.get_feature_names_out())
(3) 中文文本提取
a.中文文本不像英文文本,中文文本文字之间没有空格,所以要先分词,一般使用jieba分词.
b.下载jieba组件, (不要使用conda)
c.jieba的基础
import jieba
data = "在如今的互联网世界,正能量正成为澎湃时代的大流量"
data = jieba.cut(data)
data = list(data)
print(data) #['在', '如今', '的', '互联网', '世界', ',', '正', '能量', '正', '成为', '澎湃', '时代', '的', '大', '流量']
data = " ".join(data)
print(data) #"在 如今 的 互联网 世界 , 正 能量 正 成为 澎湃 时代 的 大 流量"
使用jieba封装一个函数,功能是把汉语字符串中进行分词(会忽略长度小于等于1的词语,因为它们往往缺乏语义信息,不能很好地表达文本的特征)
import jieba
def cut(text):return " ".join(list(jieba.cut(text)))data = "在如今的互联网世界,正能量正成为澎湃时代的大流量"
data = cut(data)
print(data) #"在 如今 的 互联网 世界 , 正 能量 正 成为 澎湃 时代 的 大 流量"
完整终合示例
import jieba
from sklearn.feature_extraction.text import CountVectorizerdef cut(text):return " ".join(list(jieba.cut(text)))data = ["教育学会会长期间坚定支持民办教育事业!","热忱关心、扶持民办学校发展","事业做出重大贡献!"]
data_new = [cut(v) for v in data]transfer = CountVectorizer(stop_words=['期间', '做出'])
data_final = transfer.fit_transform(data_new)print(data_final.toarray())#把非稀疏矩阵转变为稀疏矩阵
print(transfer.get_feature_names_out())#import pandas as pd
pd.DataFrame(data_final.toarray(), columns=transfer.get_feature_names_out())
import pandas
mylist = []
for i in range(len(data)):print("第"+str(i)+"名")mylist.append("第"+str(i)+"句")pandas.DataFrame(data_final.toarray(), index=mylist, columns=transfer.get_feature_names_out())
5 TfidfVectorizer TF-IDF文本特征词的重要程度特征提取
(1) 算法
词频(Term Frequency, TF), 表示一个词在当前篇文章中的重要性
逆文档频率(Inverse Document Frequency, IDF), 反映了词在整个文档集合中的稀有程度
(2) API
sklearn.feature_extraction.text.TfidfVectorizer()
构造函数关键字参数stop_words,表示词特征黑名单
fit_transform函数的返回值为稀疏矩阵
(3) 示例
代码与CountVectorizer的示例基本相同,仅仅把CountVectorizer改为TfidfVectorizer即可
示例中data是一个字符串list, list中的第一个元素就代表一篇文章.
import jieba
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizerdef cut_words(text):return " ".join(list(jieba.cut(text)))data = ["教育学会会长期间,坚定支持民办教育事业!", "扶持民办,学校发展事业","事业做出重大贡献!"]
data_new = [cut_words(v) for v in data]transfer = TfidfVectorizer(stop_words=['期间', '做出',"重大贡献"])
data_final = transfer.fit_transform(data_new)pd.DataFrame(data_final.toarray(), columns=transfer.get_feature_names_out())
from sklearn.feature_extraction.text import CountVectorizertransfer = CountVectorizer(stop_words=['期间', '做出',"重大贡献"])
data_final = transfer.fit_transform(data_new)pd.DataFrame(data_final.toarray(), columns=transfer.get_feature_names_out())
6 无量纲化-预处理
无量纲,即没有单位的数据
无量纲化包括"归一化"和"标准化", 为什么要进行无量纲化呢?
这是一个男士的数据表:
编号id | 身高 h | 收入 s | 体重 w |
---|---|---|---|
1 | 1.75(米) | 15000(元) | 120(斤) |
2 | 1.5(米) | 16000(元) | 140(斤) |
3 | 1.6(米) | 20000(元) | 100(斤) |
假设算法中需要求它们之间的欧式距离, 这里以编号1和编号2为示例:
L = ( 1.75 − 1.5 ) 2 + ( 15000 − 16000 ) 2 + ( 120 − 140 ) 2 L = \sqrt{(1.75-1.5)^2+(15000-16000)^2+(120-140)^2} L=(1.75−1.5)2+(15000−16000)2+(120−140)2
从计算上来看, 发现身高对计算结果没有什么影响, 基本主要由收入来决定了,但是现实生活中,身高是比较重要的判断标准. 所以需要无量纲化.
(1) MinMaxScaler 归一化
通过对原始数据进行变换把数据映射到指定区间(默认为0-1)
<1>归一化公式:
这里的 𝑥min 和 𝑥max 分别是每种特征中的最小值和最大值,而 𝑥是当前特征值,𝑥scaled 是归一化后的特征值。
若要缩放到其他区间,可以使用公式:x=x*(max-min)+min;
比如 [-1, 1]的公式为:
手算过程:
<2>归一化API
sklearn.preprocessing.MinMaxScaler(feature_range)
参数:feature_range=(0,1) 归一化后的值域,可以自己设定
fit_transform函数归一化的原始数据类型可以是list、DataFrame和ndarray, 不可以是稀疏矩阵
fit_transform函数的返回值为ndarray
<3>归一化示例
示例1:原始数据类型为list
from sklearn.preprocessing import MinMaxScaler
data=[[12,22,4],[22,23,1],[11,23,9]]
#feature_range=(0, 1)表示归一化后的值域,可以自己设定
transfer = MinMaxScaler(feature_range=(0, 1))
#data_new的类型为<class 'numpy.ndarray'>
data_new = transfer.fit_transform(data)
print(data_new)
[[0.09090909 0. 0.375 ][1. 1. 0. ][0. 1. 1. ]]
示例2:原始数据类型为DataFrame
from sklearn.preprocessing import MinMaxScaler
import pandas as pd;
data=[[12,22,4],[22,23,1],[11,23,9]]
data = pd.DataFrame(data=data, index=["一","二","三"], columns=["一列","二列","三列"])
transfer = MinMaxScaler(feature_range=(0, 1))
data_new = transfer.fit_transform(data)
print(data_new)
示例3:原始数据类型为 ndarray
from sklearn.feature_extraction import DictVectorizer
from sklearn.preprocessing import MinMaxScalerdata = [{'city':'成都', 'age':30, 'temperature':200}, {'city':'重庆','age':33, 'temperature':60}, {'city':'北京', 'age':42, 'temperature':80}]
transfer = DictVectorizer(sparse=False)
data = transfer.fit_transform(data) #data类型为ndarray
print(data)transfer = MinMaxScaler(feature_range=(0, 1))
data = transfer.fit_transform(data)
print(data)
<4>缺点
最大值和最小值容易受到异常点影响,所以鲁棒性较差。所以常使用标准化的无量钢化
(2)StandardScaler 标准化
在机器学习中,标准化是一种数据预处理技术,也称为数据归一化或特征缩放。它的目的是将不同特征的数值范围缩放到统一的标准范围,以便更好地适应一些机器学习算法,特别是那些对输入数据的尺度敏感的算法。
<1>标准化公式
最常见的标准化方法是Z-score标准化,也称为零均值标准化。它通过对每个特征的值减去其均值,再除以其标准差,将数据转换为均值为0,标准差为1的分布。这可以通过以下公式计算:
其中,z是转换后的数值,x是原始数据的值,μ是该特征的均值,σ是该特征的标准差
<2> 标准化 API
sklearn.preprocessing.StandardScale
与MinMaxScaler一样,原始数据类型可以是list、DataFrame和ndarray
fit_transform函数的返回值为ndarray, 归一化后得到的数据类型都是ndarray
from sklearn.preprocessing import StandardScale
#不能加参数feature_range=(0, 1)
transfer = StandardScaler()
data_new = transfer.fit_transform(data) #data_new的类型为ndarray
<3>标准化示例
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
# 1、获取数据
df_data = pd.read_csv("src/dating.txt")
print(type(df_data)) #<class 'pandas.core.frame.DataFrame'>
print(df_data.shape) #(1000, 4)# 2、实例化一个转换器类
transfer = StandardScaler()# 3、调用fit_transform
new_data = transfer.fit_transform(df_data) #把DateFrame数据进行归一化
print("DateFrame数据被归一化后:\n", new_data[0:5])nd_data = df_data.values #把DateFrame转为ndarray
new_data = transfer.fit_transform(nd_data) #把ndarray数据进行归一化
print("ndarray数据被归一化后:\n", new_data[0:5])nd_data = df_data.values.tolist() #把DateFrame转为list
new_data = transfer.fit_transform(nd_data) #把ndarray数据进行归一化
print("list数据被归一化后:\n", new_data[0:5])
<class 'pandas.core.frame.DataFrame'>
(1000, 4)
DateFrame数据被归一化后:[[ 0.33193158 0.41660188 0.24523407 1.24115502][-0.87247784 0.13992897 1.69385734 0.01834219][-0.34554872 -1.20667094 -0.05422437 -1.20447063][ 1.89102937 1.55309196 -0.81110001 -1.20447063][ 0.2145527 -1.15293589 -1.40400471 -1.20447063]]
ndarray数据被归一化后:[[ 0.33193158 0.41660188 0.24523407 1.24115502][-0.87247784 0.13992897 1.69385734 0.01834219][-0.34554872 -1.20667094 -0.05422437 -1.20447063][ 1.89102937 1.55309196 -0.81110001 -1.20447063][ 0.2145527 -1.15293589 -1.40400471 -1.20447063]]
list数据被归一化后:[[ 0.33193158 0.41660188 0.24523407 1.24115502][-0.87247784 0.13992897 1.69385734 0.01834219][-0.34554872 -1.20667094 -0.05422437 -1.20447063][ 1.89102937 1.55309196 -0.81110001 -1.20447063][ 0.2145527 -1.15293589 -1.40400471 -1.20447063]]
自己实现标准化来测试
#数据
data=np.array([[5],[20],[40],[80],[100]])
#API实现标准化
data_news=scaler.fit_transform(data)
print("API实现:\n",data_news)#标准化自己实现
mu=np.mean(data)
sum=0
for i in data:sum+=((i[0]-mu)**2)
d=np.sqrt(sum/(len(data)))
print("自己实现:\n",(data[3]-mu)/d)
<4> 注意点
在数据预处理中,特别是使用如StandardScaler
这样的数据转换器时,fit
、fit_transform
和transform
这三个方法的使用是至关重要的,它们各自有不同的作用:
- fit:
- 这个方法用来计算数据的统计信息,比如均值和标准差(在
StandardScaler
的情况下)。这些统计信息随后会被用于数据的标准化。 - 你应当仅在训练集上使用
fit
方法。
- 这个方法用来计算数据的统计信息,比如均值和标准差(在
- fit_transform:
- 这个方法相当于先调用
fit
再调用transform
,但是它在内部执行得更高效。 - 它同样应当仅在训练集上使用,它会计算训练集的统计信息并立即应用到该训练集上。
- 这个方法相当于先调用
- transform:
- 这个方法使用已经通过
fit
方法计算出的统计信息来转换数据。 - 它可以应用于任何数据集,包括训练集、验证集或测试集,但是应用时使用的统计信息必须来自于训练集。
- 这个方法使用已经通过
当你在预处理数据时,首先需要在训练集X_train
上使用fit_transform
,这样做可以一次性完成统计信息的计算和数据的标准化。这是因为我们需要确保模型是基于训练数据的统计信息进行学习的,而不是整个数据集的统计信息。
**一旦scaler
对象在X_train
上被fit
,它就已经知道了如何将数据标准化。**这时,对于测试集X_test
,我们只需要使用transform
方法,因为我们不希望在测试集上重新计算任何统计信息,也不希望测试集的信息影响到训练过程。如果我们对X_test
也使用fit_transform
,测试集的信息就可能会影响到训练过程。
总结来说:我们常常是先fit_transform(x_train)然后再transform(x_text)
相关文章:
11.12机器学习_特征工程
四 特征工程 1 特征工程概念 特征工程:就是对特征进行相关的处理 一般使用pandas来进行数据清洗和数据处理、使用sklearn来进行特征工程 特征工程是将任意数据(如文本或图像)转换为可用于机器学习的数字特征,比如:字典特征提取(特征离散化)、文本特征提取、图像特征提取。 …...
RAG经验论文《FACTS About Building Retrieval Augmented Generation-based Chatbots》笔记
《FACTS About Building Retrieval Augmented Generation-based Chatbots》是2024年7月英伟达的团队发表的基于RAG的聊天机器人构建的文章。 这篇论文在待读列表很长时间了,一直没有读,看题目以为FACTS是总结的一些事实经验,阅读过才发现FAC…...
【配置后的基本使用】CMake基础知识
🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀各种软件安装与配置_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1.…...
ollama+springboot ai+vue+elementUI整合
1. 下载安装ollama (1) 官网下载地址:https://github.com/ollama/ollama 这里以window版本为主,下载链接为:https://ollama.com/download/OllamaSetup.exe。 安装完毕后,桌面小图标有一个小图标,表示已安装成功&…...
【项目开发】理解SSL延迟:为何HTTPS比HTTP慢?
未经许可,不得转载。 文章目录 前言HTTP与HTTPS的耗时差异TCP握手HTTPS的额外步骤:SSL握手使用curl测量SSL延迟性能与安全的权衡前言 在互联网发展的早期阶段,Netscape公司设计了SSL(Secure Sockets Layer)协议,为网络通信提供加密和安全性。有人曾提出一个大胆的设想:…...
2.STM32之通信接口《精讲》之USART通信
有关通信详解进我主页观看其他文章!【免费】SPIIICUARTRS232/485-详细版_UART、IIC、SPI资源-CSDN文库 通过以上可以看出。根据电频标准,可以分为TTL电平,RS232电平,RS485电平,这些本质上都属于串口通信。有区别的仅是…...
Bootstrap和jQuery开发案例
目录 1. Bootstrap和jQuery简介及优势2. Bootstrap布局与组件示例:创建一个响应式的表单界面 3. jQuery核心操作与事件处理示例:使用jQuery为表单添加交互 4. Python后端实现及案例代码案例 1:用户登录系统Flask后端代码前端代码 5. 设计模式…...
Qt 之 qwt和QCustomplot对比
QWT(Qt Widgets for Technical Applications)和 QCustomPlot 都是用于在 Qt 应用程序中绘制图形和图表的第三方库。它们各有优缺点,适用于不同的场景。 以下是 QWT 和 QCustomPlot 的对比分析: 1. 功能丰富度 QWT 功能丰富&a…...
【STM32】MPU6050简介
文章目录 MPU6050简介MPU6050关键块带有16位ADC和信号调理的三轴MEMS陀螺仪具有16位ADC和信号调理的三轴MEMS加速度计I2C串行通信接口 MPU6050对应的数据手册:MPU6050 陀螺仪加速度计 链接: https://pan.baidu.com/s/13nwEhGvsfxx0euR2hMHsyw?pwdv2i6 提取码: v2i6…...
Oracle 单机及 RAC 环境 归档模式及路径修改
Oracle 数据库的使用过程中经常会根据需求的不同而调整归档模式,也经常会修改归档文件存放路径。 下面分别演示单机及 RAC 环境下修改归档模式及路径的操作步骤。 一、单机环境 1.查询当前归档模式及路径 SQL> archive log list Database log mode …...
抽象java入门1.5.3.1——类的进阶
前言:在研究神技代码Hello word的时候,发现了一个重大公式bug,在代码溯源中,我发现了一个奇怪的东西,就是OUT不是类中类(不是常规类的写法) 内容总结: 代码运行的顺序复习 正片开始…...
python——模块 迭代器 正则
一、python模块 先创建一个 .py 文件,这个文件就称之为 一个模块 Module。 使用模块的优点: 模块化编程,多文件编程 1.2 模块的使用 1.2.1 import语句 想要B.py文件中,使用A.py文件,只需要在B.py文件中使用关键字…...
QT仿QQ聊天项目,第三节,实现聊天界面
一,界面控件示意图 界面主要由按钮QPushButton,标签QLabel,列表QListWidget 要注意的是QListWidget既是实现好友列表的控件,也是实现聊天气泡的控件 二,控件样式 QPushButton#btn_name {border:none;}QPushButton#btn_close {border:1px;bac…...
Linux-何为CentOS
今年公司做的 POC 项目中,越来越多地听到客户开始或已经将系统迁移到麒麟、统信、openEuler,但还是有很多客户在用CentOS 7,或者和CentOS 7兼容的其他Linux。今天把CentOS 7相关概念统一整理下供后续参考使用 何为CentOS CentOS — Communit…...
C++中的 std::optional
std::optional<T>是 C17 中的一个标准库组件,optional <T>对象默认是空的,也就是处于无效状态,给它赋值后因为里面有了元素,就变成了有效状态。 1.引入背景 c函数常用返回值表示函数是否执行成功。如返回nullptr表示…...
猫狗识别之BUG汇总
一、github登不上去问题 下载watt toolkit 下载地址:https://steampp.net/ 可以下载后加速,访问github 二、猫狗总体参考核心 B哥的博客 https://github.com/bubbliiiing/classification-keras?tabreadme-ov-file 三、CSDN很多会员才能阅读问题 根据…...
【论文复现】自动化细胞核分割与特征分析
📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀自动化细胞核分割与特征分析 引言1. 效果展示2. HoverNet概述3. HoverNet原理分析整体网络框架实例分割原理 4. HoverNet评估结果5. 复现过程…...
排序算法 -快速排序
文章目录 1. 快速排序(Quick Sort)1.1、 简介1.2、 快速排序的步骤 2. Hoare 版本2.1、 基本思路1. 分区(Partition)2. 基准选择(Pivot Selection)3. 递归排序(Recursive Sorting) 2…...
K8S 查看pod节点的磁盘和内存使用情况
查看某个节点的磁盘使用率: kubectl exec -it pod名称 -n 命名空间 – df -h 查询所有节点的已使用内存: kubectl top pods --all-namespaces | grep itsm 查询某个节点的总内存, kubectl describe pod itsr-domain-59f4ff5854-hzb68 --nam…...
华为HCIP——MSTP/RSTP与STP的兼容性
一、MSTP/RSTP与STP的兼容性的原理: 1.BPDU版本号识别:运行MSTP/RSTP协议的交换机会根据收到的BPDU(Bridge Protocol Data Unit,桥协议数据单元)版本号信息自动判断与之相连的交换机的运行模式。如果收到的是STP BPDU…...
AI 大模型如何重塑软件开发流程:现状与未来展望
随着人工智能技术的飞速发展,AI 大模型的出现正在深刻改变软件开发行业的传统模式。从代码生成到智能测试,AI 已渗透到软件开发的各个环节,为开发者提供了前所未有的效率提升,同时也带来了全新的挑战与思考。在本文中,…...
3步实现贪吃蛇
方法很简单,打开页面,复制,粘贴 一.整体思维架构 我们根据游戏的开始,运行,结束,将整个游戏划分成三个部分。在每个部分下面又划分出多个功能,接下来我们就根据模块一一实现功能。 二.Gamesta…...
华东师范大学数学分析第五版PDF习题答案上册及下册
“数学分析”是数学专业最重要的一门基础课程,也是报考数学类专业硕士研究生的专业考试科目。为了帮助、指导广大读者学好这门课程,编者编写了与华东师范大学数学科学学院主编的《数学分析》(第五版)配套的辅导用书,以帮助读者加深对基本概念…...
MySQL之联合查询
前文我们了解到了数据库设计的范式要求,故生活中很多相互关联的数据被拆分开来,但彼此之间通过某种条件链接,此文联合查询就是通过多表之间的连接关系,来查询我们想要的数据,即 《联合查询》 1. 联合查询简介 1.1 为什…...
[C/C++] 定位新表达式 placement new
在C中,表达式 new (ptr) T(); 展示了一种特殊的内存分配和对象构造方式,这被称为定位新表达式(placement new)。 通常,当我们使用 new 关键字时,它会在堆上动态分配内存,并调用相应的构造函数来…...
【MySQL】MySQL的笛卡尔积现象是什么?简单说说
笛卡尔积好像是个科学家,也是个学术概念,在MySQL中表示交叉连接,即:匹配一切所有的可能 举例如下: 准备两张表 【employee表】 emp_idlast_namedept_id1Smith12Johnson2 【department表】 dept_iddepartment_nam…...
《InsCode AI IDE:编程新时代的引领者》
《InsCode AI IDE:编程新时代的引领者》 一、InsCode AI IDE 的诞生与亮相二、独特功能与优势(一)智能编程体验(二)多语言支持与功能迭代 三、实际应用与案例(一)游戏开发案例(二&am…...
微搭低代码私有化部署搭建教程
目录 1 下载远程工具2 查看服务器配置3 下载部署包4 安装部署包5 系统登录总结 最近微搭推出了私有化部署版本,正好官方赠送了我一台云服务器,练习一下部署的过程,本篇作为一个实践的记录 1 下载远程工具 一般我们使用的是云服务器ÿ…...
【在Linux世界中追寻伟大的One Piece】多路转接epoll(续)
目录 1 -> epoll的工作方式 1.1 -> 水平触发(Level Triggered)工作模式 1.2 -> 边缘触发(Edge Triggered)工作模式 2 -> 对比LT与ET 3 -> 理解ET模式和非阻塞文件描述符 4 -> epoll的使用场景 5 -> epoll示例 5.1 -> epoll服务器(LT模式) 5.2…...
【不写for循环】玩玩行列
利用numpy的并行操作可以比纯用Python的list快很多,不仅如此,代码往往精简得多。 So, 这篇来讲讲进阶的广播和花哨索引操作,少写几个for循环()。 目录 一个二维的例题 一个三维的例题 解法一 解法二 更难的三维例题…...
百度app制作网站/买链接网
近期在做爬虫时有时会遇到网站只提供pdf的情况,这样就不能使用scrapy直接抓取页面内容了,只能通过解析PDF的方式处理,目前的解决方案大致只有pyPDF和PDFMiner。因为据说PDFMiner更适合文本的解析,而我需要解析的正是文本ÿ…...
义乌做网站的公司哪家好/seo顾问合同
Centos基础优化一、给系统添加普通账户在生产环境当中root账户是不允许被使用的,所以我们需要给系统增加一些普通账户来进行日常维护操作使用。增加账户命令如下:[rootlocalhost ~]# useradd jerry[rootlocalhost ~]# passwd jerryChanging password for…...
给个做的网站吗/seo推广怎么做视频教程
2019独角兽企业重金招聘Python工程师标准>>> #ifndef __HASH_TABLE_H__#define __HASH_TABLE_H__#include <afxtempl.h> #define M 200 // 桶的容量。#define MAX_NUM 32 // 目录的深度。 typedef struct _head{ int g; //全局深度 long number; //节…...
东西湖区城乡建设局网站/国内做网站比较好的公司
想将学习的东东分享下,但有些问题理解得不是很深,希望大家多多指正,但拒绝恶评。。。各有所长嘛,重在于学习。转载于:https://blog.51cto.com/4017397/1077645...
手机网站有用吗/东莞seo推广机构帖子
我有这样的XML:它可以毫无问题地配置转换器。但是,此代码无法做到这一点:Configurationpublic class ConversionConfiguration {Beanpublic ConversionService getConversionService() {ConversionServiceFactoryBean bean new ConversionSe…...
wordpress新建文章中添加目录/广州新闻最新消息今天
使用umireactdvaant-design开发项目时,通过对umi-request进行二次封装方便进行后端接口的请求 一、话不多说先贴完整代码: /utils/request.ts import { extend } from umi-request; import { history } from umi; import { message } from antd; impo…...