机器学习数据预处理preprocessing

预处理方法预处理方法预处理方法
BinarizerFunctionTransformerKBinsDiscretizer
KernelCentererLabelBinarizerLabelEncoder
MaxAbsScalerMinMaxScalerMultiLabelBinarizer
Normalizer OneHotEncoderOrdinalEncoder
PolynomialFeaturesPowerTransformerQuantileTransformer

sklearn.preprocessing.Binarizer

设定一个阈值(threshold),对于每个输入值,如果该值大于或等于阈值,则输出 1;否则输出 0

from sklearn.preprocessing import Binarizer# 创建 Binarizer 对象,并设定阈值
binarizer = Binarizer(threshold=0.5)# 输入数据
data = [[0.1, 0.8], [0.4, 0.6], [0.7, 0.2]]# 进行二值化处理
binary_data = binarizer.transform(data)print(binary_data)
[[0. 1.][0. 1.][1. 0.]]

sklearn.preprocessing.FunctionTransformer

将一个自定义的函数应用于数据的转换过程

from sklearn.preprocessing import FunctionTransformer
import numpy as np# 定义一个简单的函数
def log_transform(x):return np.log1p(x)# 创建 FunctionTransformer 对象
transformer = FunctionTransformer(log_transform)# 应用转换
data = np.array([[1, 2], [3, 4]])
transformed_data = transformer.transform(data)
print(transformed_data)
[[0.69314718 1.09861229][1.38629436 1.60943791]]

它可以将任何可调用的函数包装成一个转换器,使其能够与流水线(pipeline)和网格搜索(grid search)无缝集成

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import Binarizer# 创建 Binarizer 对象,并设定阈值
# binarizer = Binarizer(threshold=0.5)# 创建一个流水线,将自定义转换器与标准化器结合
pipeline = Pipeline([('log_transform', FunctionTransformer(log_transform)),('scaler', Binarizer(threshold=0.8))
])# 应用流水线
data = np.array([[1, 2], [3, 4]])
transformed_data = pipeline.fit_transform(data)
print(transformed_data)
[[0. 1.][1. 1.]]

sklearn.preprocessing.KBinsDiscretizer

将连续数据分箱(即离散化)
将连续特征值分成离散的区间(bins),从而将连续变量转换为离散变量

class sklearn.preprocessing.KBinsDiscretizer(n_bins=5, *, encode='onehot', strategy='quantile', dtype=None, subsample=200000, random_state=None)
  • n_bins:指定每个特征要分成的箱子的数量
  • encode:指定编码方式
    • onehot’:独热编码
    • 'onehot-dense’密集独热编码
    • ordinal’:使用序数编码(即每个箱用一个整数表示)
  • strategy:指定分箱策略
    • uniform’:将数据均匀分箱
    • quantile’:根据分位数分箱
    • kmeans’:使用 K-Means 聚类分箱
from sklearn.preprocessing import KBinsDiscretizer
import numpy as np# 创建示例数据
X = np.array([[1, 2, 6],[4, 5, 8],[7, 8, 10]])# 初始化 KBinsDiscretizer
kbins = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='uniform')# 拟合并转换数据
X_binned = kbins.fit_transform(X)print(X_binned)
[[0. 0. 0.][1. 1. 1.][2. 2. 2.]]

在上述示例中,KBinsDiscretizer 将每个特征列分成 3 个箱,并使用均匀分箱策略,具体分箱情况如下:

  • 第一列:对于数据范围 [1, 7],每个箱的宽度为 (7 - 1) / 3 = 2
    • 第一个箱子:[1, 3)对应编号为0
    • 第二个箱子:[3, 5)对应编号为1
    • 第二个箱子:[5, 7)对应编号为2
      所以第一列特征的[1, 4, 7]变换为[0, 1, 2],同理第二列特征的[2, 5, 8]变换为[0, 1, 2],第二列特征的[6, 8, 10]变换为[0, 1, 2]

再看另外一个例子

from sklearn.preprocessing import KBinsDiscretizer
import numpy as np# 创建示例数据
X = np.array([[1, 2, 6],[2, 5, 8],[7, 8, 10]])# 初始化 KBinsDiscretizer
#n_bins参数如果是列表形式,则其长度须等于特征数,即列数
kbins = KBinsDiscretizer(n_bins=[3, 2, 2], encode='ordinal', strategy='uniform')# 拟合并转换数据
X_binned = kbins.fit_transform(X)print(X_binned)
[[0. 0. 0.][0. 1. 1.][2. 1. 1.]]

在上述示例中,KBinsDiscretizer 将第一列分成 3 个箱、第二列分成2个箱、第三列分成2个箱,并使用均匀分箱策略,具体分箱情况如下:

  • 第一列:对于数据范围 [1, 7],每个箱的宽度为 (7 - 1) / 3 = 2
    • 第一个箱子:[1, 3)对应编号为0
    • 第二个箱子:[3, 5)对应编号为1
    • 第二个箱子:[5, 7)对应编号为2
  • 第二列:对于数据范围 [2, 8],每个箱的宽度为 (8 - 2) / 2 = 3
    • 第一个箱子:[2, 5)对应编号为0
    • 第二个箱子:[5, 8]对应编号为1
  • 第三列:对于数据范围 [6, 10],每个箱的宽度为 (10 - 6) / 2 = 2
    • 第一个箱子:[6, 8)对应编号为0
    • 第二个箱子:[8, 10]对应编号为1
      所以第一列特征的[1, 4, 7]变换为[0, 1, 2],同理第二列特征的[2, 5, 8变换为[0, 1, 1],第二列特征的[6, 8, 10]变换为[0, 1, 1]

sklearn.preprocessing.KernelCenterer

用于中心化核矩阵的工具,通常用于核方法(如支持向量机和核主成分分析)中,以确保核矩阵的中心化,从而提高算法的性能
调整核矩阵使其行和列的均值为零,目的是消除数据的偏移,使得算法能够更好地捕捉数据的结构特征

具体计算方式参见机器学习数据预处理preprocessing之KernelCenterer

sklearn.preprocessing.LabelBinarizer

将多类标签转换为一组二进制值,使得每个类都用一个独立的二进制特征表示

from sklearn.preprocessing import LabelBinarizer# 创建 LabelBinarizer 对象
lb = LabelBinarizer()# 拟合并转换标签
labels = ['猫', '狗', '兔子', '猫', '狗']
binary_labels = lb.fit_transform(labels)print(binary_labels)
[[0 0 1][0 1 0][1 0 0][0 0 1][0 1 0]]
# 查看标签
print(lb.classes_)
# 输出:
# ['兔子' '狗' '猫']

sklearn.preprocessing.LabelEncoder

将每个类别值映射到一个从 0 到 n_classes-1 的整数,其中 n_classes 是类别的数量

from sklearn.preprocessing import LabelEncoder# 创建一个 LabelEncoder 实例
label_encoder = LabelEncoder()# 假设我们有一个包含类别数据的列表
categories = ['猫', '狗', '猫', '鸟']# 使用 LabelEncoder 将类别数据转换为数值数据
encoded_labels = label_encoder.fit_transform(categories)print(encoded_labels)
# 输出: [0 1 0 2]# 如果需要将数值数据转换回类别数据,可以使用 inverse_transform 方法
decoded_labels = label_encoder.inverse_transform(encoded_labels)
print(decoded_labels)
# 输出: ['猫' '狗' '猫' '鸟']

sklearn.preprocessing.MaxAbsScaler

通过将每个特征值除以该特征的最大绝对值,将特征值缩放到 [-1, 1] 范围内
MaxAbsScaler 不会改变数据的稀疏性(即不会破坏稀疏矩阵的结构),适合处理稀疏数据

X s c a l e d = X m a x ( ∣ X ∣ ) X_{scaled}=\frac{X}{max(|X|)} Xscaled=max(X)X

  1. 初始化 MaxAbsScaler 对象
  2. 使用 fit 方法计算训练数据的最大绝对值
  3. 使用 transform 方法将训练数据缩放到 [-1, 1] 范围内
  4. 对测试数据重复第 3 步的缩放操作
from sklearn.preprocessing import MaxAbsScaler
X = [[ 1., -1.,  2.],[ 2.,  0.,  0.],[ 0.,  1., -1.]]
transformer = MaxAbsScaler().fit(X)
transformer.transform(X)
array([[ 0.5, -1. ,  1. ],[ 1. ,  0. ,  0. ],[ 0. ,  1. , -0.5]])

sklearn.preprocessing.MinMaxScaler

class sklearn.preprocessing.MinMaxScaler(feature_range=(0, 1), *, copy=True, clip=False)

将特征缩放到给定的最小值和最大值之间,通常是0和1之间

X s c a l e d = X − X m i n X m a x − X m i n X_{scaled}=\frac{X-X_{min}}{X_{max}-X_{min}} Xscaled=XmaxXminXXmin

from sklearn.preprocessing import MinMaxScaler
data =	[[-1.   2.  ][-0.5 6][0  10 ][1.   18.  ]]
scaler = MinMaxScaler()
scaler.fit(data)
print(scaler.data_max_)
[ 1. 18.]
print(scaler.transform(data))
[[0.   0.  ][0.25 0.25][0.5  0.5 ][1.   1.  ]]
print(scaler.transform([[2, 2]]))
[[1.5 0. ]]

sklearn.preprocessing.MultiLabelBinarizer

将多标签数据转换为二进制格式。它可以将一组标签集合转换为一个二进制矩阵,其中每一列代表一个可能的标签,每一行代表一个样本。如果样本包含某个标签,则相应位置为1,否则为0。

from sklearn.preprocessing import MultiLabelBinarizer# 假设我们有以下多标签数据
y = [['apple', 'banana'],['banana', 'orange'],['apple'],['banana', 'orange', 'apple']]# 创建 MultiLabelBinarizer 对象
mlb = MultiLabelBinarizer()# 拟合并转换数据
y_bin = mlb.fit_transform(y)
print(y_bin)
# 输出:
# [[1 1 0]
#  [0 1 1]
#  [1 0 0]
#  [1 1 1]]# 查看标签
print(mlb.classes_)
# 输出:
# ['apple' 'banana' 'orange']

sklearn.preprocessing.Normalizer

对特征向量进行归一化处理,将每个样本缩放到单位范数(即每个样本的向量长度为1)

class sklearn.preprocessing.Normalizer(norm='l2', *, copy=True)

Normalizer 类的主要参数是 norm,它指定了归一化的方式。常用的选项包括:

  • l1: 使用L1范数进行归一化。
  • l2: 使用L2范数进行归一化(默认值)。
  • max: 使用最大值范数进行归一化。
from sklearn.preprocessing import Normalizer
import numpy as np# 创建示例数据
X = np.array([[4, 1, 2, 2],[1, 3, 9, 3],[5, 7, 5, 1]])# 初始化 Normalizer
normalizer = Normalizer(norm='l1')
# 对数据进行归一化处理
X_normalized = normalizer.fit_transform(X)
X_normalized
array([[0.8, 0.2, 0.4, 0.4],[0.1, 0.3, 0.9, 0.3],[0.5, 0.7, 0.5, 0.1]])

向量[4, 1, 2, 2] L 2 L2 L2范数为:
∣ ∣ x 1 ∣ ∣ 2 = 4 2 + 1 2 + 2 2 + 2 2 = 5 x 11 = 4 / 5 = 0.8 , x 12 = 1 / 5 = 0.2 , x 13 = 2 / 5 = 0.4 , x 14 = 2 / 5 = 0.4 ||x_1||_2=\sqrt{4^2+1^2+2^2+2^2}=5\\ x_{11}=4/5=0.8, x_{12}=1/5=0.2,x_{13}=2/5=0.4,x_{14}=2/5=0.4 ∣∣x12=42+12+22+22 =5x11=4/5=0.8,x12=1/5=0.2,x13=2/5=0.4,x14=2/5=0.4

sklearn.preprocessing.OneHotEncoder

将分类(类别)特征转换为可以用于机器学习算法的独热编码(one-hot encoding)
OneHotEncoder转换的是数据端的特征向量,而LabelBinarizer转换的是类别端的标签

class sklearn.preprocessing.OneHotEncoder(*, categories='auto', drop=None, sparse_output=True, dtype=<class 'numpy.float64'>, handle_unknown='error', min_frequency=None, max_categories=None, feature_name_combiner='concat')

主要参数:

  • categories: 指定每个特征的类别。如果是 ‘auto’,则类别会从数据中自动推断。
  • drop: 指定要删除的类别,以避免多重共线性。可以是 ‘first’ 或 ‘if_binary’。
  • sparse_output: 如果为 True,则返回稀疏矩阵。默认值是 True。
  • dtype: 输出数据的类型。默认是 np.float64。
  • handle_unknown: 指定如何处理未知类别。可以是 ‘error’(默认)或 ‘ignore’。
    主要方法:
  • fit(X): 拟合模型,根据输入数据 X 学习类别。
  • transform(X): 将输入数据 X 转换为独热编码。
  • fit_transform(X): 结合 fit 和 transform,对输入数据 X 进行拟合并转换。
  • inverse_transform(X): 将独热编码的数据转换回原始类别值。
from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder(handle_unknown='ignore')
X = [['Male', 1], ['Female', 3], ['Female', 2]]
enc.fit(X)
enc.categories_
[array(['Female', 'Male'], dtype=object), array([1, 2, 3], dtype=object)]
enc.transform([['Female', 1], ['Male', 0]]).toarray()
array([[1., 0., 1., 0., 0.],[0., 1., 0., 0., 0.]])

每个样本有两维特征:第一维特征是array([‘Female’, ‘Male’],第二维特征是array([1, 2, 3],共有5个值,新样本转换后是一个5维仅包含0和1的特征向量,对于待转换样本:

  • 如果第一维特征中有’Female’,则转换后对应[1, 0, …,如果有’Male’,则转换后对应[0, 1, …,否则对应[0, 0, …
  • 同理, 如果第二维特征中分别有1, 2, 3,则分别对应…, 1, 0, 0],…, 0, 1, 0],…, 0, 0, 1],否则对应…, 0, 0, 0]

因此,[‘Female’, 1]转换后对应[1, 0, 1, 0, 0],[‘Male’, 0]转换后对应[0, 1, 0, 0, 0]

sklearn.preprocessing.OrdinalEncoder

将分类(类别)数据转换为整数编码,适用于将类别特征转换为机器学习算法可以处理的数值特征
OrdinalEncoderOneHotEncoder相似的地方:转换的是数据端的特征向量
OrdinalEncoderOneHotEncoder差异的地方:OrdinalEncoder只能转换categories_包含的值,否则会报错
OrdinalEncoderOneHotEncoder差异的地方:categories_包含的值,从0开始编码对应
OrdinalEncoderOneHotEncoder差异的地方:OrdinalEncoder转换后长度与原特征向量一致

class sklearn.preprocessing.OrdinalEncoder(*, categories='auto', dtype=<class 'numpy.float64'>, handle_unknown='error', unknown_value=None, encoded_missing_value=nan, min_frequency=None, max_categories=None)
from sklearn.preprocessing import OrdinalEncoder
enc = OrdinalEncoder()
X = [['Male', 1], ['Female', 3], ['Female', 2]]
enc.fit(X)
enc.categories_
[array(['Female', 'Male'], dtype=object), array([1, 2, 3], dtype=object)]
enc.transform([['Female', 3], ['Male', 1]])
array([[0., 2.],[1., 0.]])
enc.transform([['Female', 2], ['Male', 3]])
array([[0., 1.],[1., 2.]])

每个样本有两维特征:第一维特征是array([‘Female’, ‘Male’],对应编码为0和1;第二维特征是array([1, 2, 3],对应编码为0, 1 和2,对于待转换样本:

  • 如果第一维特征中是’Female’,则转换后对应0,如果是’Male’,则转换后对应1,否则报错
  • 如果第二维特征中是1,则转换后对应0,如果是 2,则转换后对应1, 如果是3,则转换后对应2,否则报错

因此,[‘Female’, 3]转换后对应[0, 2],[‘Male’, 1]转换后对应[1, 0],[‘Female’, 2]转换后对应[0, 1], [‘Male’, 3]转换后对应[1, 2]

sklearn.preprocessing.PolynomialFeatures

将输入数据转换为多项式特征,从而扩展特征空间,使得线性模型能够拟合非线性数据

class sklearn.preprocessing.PolynomialFeatures(degree=2, *, interaction_only=False, include_bias=True, order='C')

主要参数:

  • degree: 多项式的最高次数, 默认值为 2。
  • interaction_only: 布尔值,如果为 True,则仅包括交互项,而不包括各个特征的幂次项。默认值为 False。
  • include_bias: 布尔值,如果为 True,则包括偏置(即截距)列。默认值为 True。
  • order: 字符串,指定输出特征的顺序。可以是 “C”(行优先)或 “F”(列优先)。默认值为 “C”。
from sklearn.preprocessing import PolynomialFeatures
import numpy as np
# 创建示例数据
X = np.array([[2, 3], [3, 4], [4, 5]])
# 初始化 PolynomialFeatures 对象
poly = PolynomialFeatures(degree=2, include_bias=False)
# 生成多项式特征
X_poly = poly.fit_transform(X)
X_poly
array([[ 2.,  3.,  4.,  6.,  9.],[ 3.,  4.,  9., 12., 16.],[ 4.,  5., 16., 20., 25.]])
poly = PolynomialFeatures(degree=2, include_bias=True)
# 生成多项式特征
X_poly = poly.fit_transform(X)
X_poly
array([[ 1.,  2.,  3.,  4.,  6.,  9.],[ 1.,  3.,  4.,  9., 12., 16.],[ 1.,  4.,  5., 16., 20., 25.]])
poly = PolynomialFeatures(degree=2, include_bias=True, interaction_only=True)
# 生成多项式特征
X_poly = poly.fit_transform(X)
X_poly
array([[ 1.,  2.,  3.,  6.],[ 1.,  3.,  4., 12.],[ 1.,  4.,  5., 20.]])

sklearn.preprocessing.PowerTransformer

对数据进行幂变换(power transformation),旨在通过应用幂函数来稳定方差、使数据更接近正态分布,从而提高模型的性能

class sklearn.preprocessing.PowerTransformer(method='yeo-johnson', *, standardize=True, copy=True)

主要参数:

  • method: 选择变换方法,‘yeo-johnson’ 适用于正负值数据或 'box-cox’仅适用于正值数据。
  • standardize: 布尔值,表示是否在变换后将数据标准化为均值为0,方差为1。默认为 True。
  • copy: 布尔值,表示是否在变换时复制输入数据。默认为 True。

对于method='box-cox'
y ( λ ) = { y λ − 1 λ , l o g ( y ) , y(\lambda)= \begin{cases}\frac{y^\lambda-1}{\lambda},& \text{ }\\ log(y),& \text{}\end{cases} y(λ)={λyλ1,log(y), 

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

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

相关文章

3D滤波器处理遥感tif图像

import cv2 import numpy as np from osgeo import gdal# 定义 Gabor 滤波器的参数 kSize 31 # 滤波器核的大小 g_sigma 3.0 # 高斯包络的标准差 g_theta np.pi / 4 # Gabor 函数的方向 g_lambda 10.0 # 正弦波的波长 g_gamma 0.5 # 空间纵横比 g_psi np.pi / 2 # …

UnityXR Interaction Toolkit 如何检测HandGestures

前言 随着VR设备的不断发展,从最初的手柄操作,逐渐演变出了手部交互,即头显可以直接识别玩家的手部动作,来完成手柄的交互功能。我们今天就来介绍下如何使用Unity的XR Interaction Toolkit 来检测手势Hand Gesture。 环境配置 1.使用Unity 2021或者更高版本,创建一个项…

Qt 中使用 moveToThread 多线程踩坑记录

关于QT Widget 其它文章请点击这里: QT Widget 今天在使用 Qt 的 moveToThread 实现多线程时&#xff0c;遇到了两个常见的坑&#xff0c;在这里记录一下&#xff0c;供自己和大家参考。 一、继承于QWidget 的控件不能在子线程中运行 Qt 的规定是&#xff1a;所有 UI 操作…

Unity Protobuf实践

官方文档&#xff1a;https://protobuf.com.cn/overview/ 1. 获取Protobuf&#xff1a; 1.1 通过NuGet包管理器&#xff1a; 拷贝dll&#xff1a; 选择.net2.0的dll&#xff1a; 导入Unity Plugins目录&#xff1a; 1.2 下载源码并生成dll&#xff1a; GitHub - protocolbuf…

【微服务】面试 4、限流

微服务限流技术总结 一、微服务业务面试题引入 在微服务业务面试中&#xff0c;限流是重要考点&#xff0c;常与分布式事务、分布式服务接口幂等解决方案、分布式任务调度等一同被考查。面试官一般会询问项目中是否实施限流及具体做法&#xff0c;回答需涵盖限流原因、采用的方…

Java Bean Validation 不适用Spring的情况下自定义validation注解

Java Bean Validation&#xff08;也称为 JSR 380&#xff0c;为 Bean Validation 2.0 规范&#xff09;提供了一套基本的注解&#xff0c;用于定义和验证 Java Bean 的属性。例如&#xff1a; NotNull&#xff1a;属性不能为空 Size&#xff1a;字符串、集合或数组的大小有约…

VScode 配置 C语言环境

遇到的问题集合 mingw官方下载网站&#xff08;https://sourceforge.net/projects/mingw-w64/files/&#xff09;更新之后&#xff0c;与网上大多数教程上写的界面不同了。 网上大多数教程让下载这个&#xff1a; 但是现在找不到这个文件。 写hello.c文件时&#xff0c;报错&…

语音技术与人工智能:智能语音交互的多场景应用探索

引言 近年来&#xff0c;智能语音技术取得了飞速发展&#xff0c;逐渐渗透到日常生活和各行各业中。从语音助手到智能家居控制&#xff0c;再到企业客服和教育辅导&#xff0c;语音交互正以前所未有的速度改变着人机沟通的方式。这一变革背后&#xff0c;人工智能技术无疑是关键…

前端依赖安装指南

前端依赖安装指南 一、NVM管理工具安装 1.在 Windows 上安装 下载 NVM for Windows 的安装程序&#xff1a;(最新版本可以在 nvm-windows Releases 页面 找到)运行下载的安装程序并按步骤操作。 2.配置 NVM exe安装自动配置环境变量 3. 验证 NVM 安装 验证 NVM 是否成功…

使用sqlplus的easy connect时如何指定是链接到shared server还是dedicated process

在oracle配置了shared server的情况下 可以使用 :shared来指定链接到shared server也可以默认不指定 不指定的情况下会默认链接到shared server 如果想链接到 dedicated process 则必须显式指定链接到dedicated process server type的类型包括DEDICATED, SHARED, or POOLED. […

26个开源Agent开发框架调研总结(2)

根据Markets & Markets的预测&#xff0c;到2030年&#xff0c;AI Agent的市场规模将从2024年的50亿美元激增至470亿美元&#xff0c;年均复合增长率为44.8%。 Gartner预计到2028年&#xff0c;至少15%的日常工作决策将由AI Agent自主完成&#xff0c;AI Agent在企业应用中…

IOS HTTPS代理抓包工具使用教程

打开抓包软件 在设备列表中选择要抓包的 设备&#xff0c;然后选择功能区域中的 HTTPS代理抓包。根据弹出的提示按照配置文件和设置手机代理。如果是本机则会自动配置&#xff0c;只需要按照提醒操作即可。 iOS 抓包准备 通过 USB 将 iOS 设备连接到电脑&#xff0c;设备需解…

Java面试核心知识4

公平锁与非公平锁 公平锁&#xff08;Fair&#xff09; 加锁前检查是否有排队等待的线程&#xff0c;优先排队等待的线程&#xff0c;先来先得 非公平锁&#xff08;Nonfair&#xff09; 加锁时不考虑排队等待问题&#xff0c;直接尝试获取锁&#xff0c;获取不到自动到队尾…

在 Linux 下Ubuntu创建同权限用户

我是因为不小心把最开始创建的用户的文件夹颜色搞没了&#xff0c;再后来全白用习惯了&#xff0c;就不想卸载了&#xff0c;像创建一个和最开始创建的用户有一样的权限可以执行sudo -i进入root一样的用户 如图这是最原始的样子 第一步 创建新用户&#xff0c;我这里是因为之前…

Microsoft Sql Server 2019 函数理解

说到函数&#xff0c;首先和存储过程作个比较吧&#xff0c;两者有一个共同点都是预编译优化后存储在磁盘中&#xff0c;所以效率 要比T-SQL高一点点。值得注意的是&#xff0c;存储过程可以创建或访问临时表&#xff0c;而函数不可以&#xff1b; 同时函数不可 以修改表中的数…

依据正则表达式拦截文本

正则表达式匹配 因为我是go语言&#xff0c;所以展示golang的 包&#xff1a;"github.com/dlclark/regexp2" 更多欢迎访问&#xff1a;www.zpf0000.com // CanMatchRegexp return bool 某个字符串是否匹配正则表达式 func CanMatchRegexp(message string, regexpSt…

学习及笔记

1、计算md5 md5sum 文件名 2、跨服务器复制 scp 文件 目标用户名目标Ip:目标路径 3、curl curl -X POST http://10.105.2.46/getUerls -H "Content-Type: application/json" -d {"id": 379, "userId": "lyc", "password":…

【Unity插件】解决移动端UI安全区问题 - Safe Area Helper

在移动端设计界面时&#xff0c;必须要考虑的就是UI的安全区。 Unity本身也提供了Safearea的API。 但在asset store时已经有人提供了免费的插件&#xff08;Safe Area Helper&#xff09;&#xff0c;我们可以直接使用。 插件链接&#xff1a; https://assetstore.unity.com/p…

机器学习之随机森林算法实现和特征重要性排名可视化

随机森林算法实现和特征重要性排名可视化 目录 随机森林算法实现和特征重要性排名可视化1 随机森林算法1.1 概念1.2 主要特点1.3 优缺点1.4 步骤1.5 函数及参数1.5.1 函数导入1.5.2 参数 1.6 特征重要性排名 2 实际代码测试 1 随机森林算法 1.1 概念 是一种基于树模型的集成学…

OpenAI 故障复盘 - 阿里云容器服务与可观测产品如何保障大规模 K8s 集群稳定性

本文作者&#xff1a; 容器服务团队&#xff1a;刘佳旭、冯诗淳 可观测团队&#xff1a;竺夏栋、麻嘉豪、隋吉智 一、前言 Kubernetes(K8s)架构已经是当今 IT 架构的主流与事实标准&#xff08;CNCF Survey[1]&#xff09;。随着承接的业务规模越来越大&#xff0c;用户也在使…