【机器学习】回归模型(线性回归+逻辑回归)原理详解

线性回归 Linear Regression

1 概述

线性回归类似高中的线性规划题目。线性回归要做的是就是找到一个数学公式能相对较完美地把所有自变量组合(加减乘除)起来,得到的结果和目标接近。

线性回归分为一元线性回归和多元线性回归。

2 一元线性回归

2.1 构造回归方程

有n组数据,自变量(特征值) x ( x 1 , x 2 , . . . , x n ) x(x_1,x_2,...,x_n) x(x1,x2,...,xn) 与因变量(目标值) y ( y 1 , y 2 , . . . , y n ) y(y_1,y_2,...,y_n) y(y1,y2,...,yn) ,我们需要找到一个线性关系,使他们之间尽可能满足: f ( x ) = a x + b f(x) =ax+b f(x)=ax+b ,这个就是构建的一元线性方程。

在这里插入图片描述

线性回归的目标就是让 f ( X ) f(X) f(X) y y y 之间的差距最小,也就是权重 a a a和偏置 b b b取什么值的时候 f ( X ) f(X) f(X) y y y最接近。

2.2 构造损失函数

损失函数是来度量模型预测值与真实值不一样的程度的,或者说度量预测错误的程度,损失函数值越小,模型就越好。

在回归问题中,误差平方和是回归任务中最常用的性能度量。这里就可以令损失函数 L ( a , b ) L(a,b) L(a,b)等于误差平方和(均方误差)。

则损失函数为:
L ( a , b ) = ∑ i = 1 n ( f ( x i ) − y i ) 2 L(a, b) = \sum \limits_{i = 1}^{n}(f(x_i) - y_i)^2 L(a,b)=i=1n(f(xi)yi)2

2.3 确定参数

我们需要通过最小的损失函数得到最佳的参数 a a a b b b 。一般使用最小二乘法
a = ∑ i = 1 n x i y i − n x ‾ y ‾ ∑ i = 1 n x i 2 − n x ‾ 2 b = y ‾ − a x ‾ a = \frac{\sum \limits_{i=1}^{n}x_iy_i - n \overline x \overline y}{\sum \limits_{i=1}^{n}x_i^2 - n \overline x ^ 2} \\ b = \overline y - a \overline x a=i=1nxi2nx2i=1nxiyinxyb=yax

3 多元线性回归

多元线性回归类似一元

回归方程: y = a 1 x 1 + a 2 x 2 + a 3 x 3 + . . . + a n x n + b y = a_1 x_1 + a_2 x_2 + a_3 x_3 + ... + a_n x_n + b y=a1x1+a2x2+a3x3+...+anxn+b

对所有的数据统一用矩阵形式表示:
y ( i ) = θ T x ( i ) + ε ( i ) ( 1 ) y^{(i)} = \theta ^ T x ^ {(i)} + \varepsilon^{(i)} \ (1) y(i)=θTx(i)+ε(i) (1)

y ( i ) y^{(i)} y(i)表示第i个样本的真实值

ε \varepsilon ε 误差代表真实值和预测值之间的差异

误差 ε ( i ) \varepsilon ^{(i)} ε(i) 是独立并具有相同的分布,服从均值为 0 方差为 θ 2 \theta ^ 2 θ2 的高斯分布

损失函数
L ( a 1 , a 2 , . . . , a n , b ) = ∑ i = 1 n ( f ( x i ) − y i ) 2 L(a_1, a_2, ..., a_n, b) = \sum_{i = 1}^{n}(f(x_i) - y_i)^2 L(a1,a2,...,an,b)=i=1n(f(xi)yi)2

高斯分布的概率函数:
p ( x ) = 1 2 π σ exp ⁡ ( − x 2 2 σ 2 ) ( 2 ) p(x) = \frac{1}{\sqrt {2 \pi} \sigma} \exp{(-\frac{x^2}{2 \sigma ^ 2})} \ (2) p(x)=2π σ1exp(2σ2x2) (2)
(1)带入(2)得到预测值成为真实值的概率函数:
p ( y ( i ) ∣ x ( i ) ; θ ) = 1 2 π σ exp ⁡ ( − ( y ( i ) − θ T x ( i ) ) 2 2 σ 2 ) p(y ^ {(i)} | x ^ {(i)}; \theta) = \frac{1}{\sqrt {2 \pi} \sigma} \exp{(-\frac{(y^{(i)} - \theta ^ T x ^ {(i)})^2}{2 \sigma ^ 2})} p(y(i)x(i);θ)=2π σ1exp(2σ2(y(i)θTx(i))2)
似然函数:(什么样的参数计算出来的误差最小,即与实际值最接近)
L ( θ ) = ∏ i = 1 m p ( y ( i ) ∣ x ( i ) ; θ ) = ∏ i = 1 m 1 2 π σ exp ⁡ ( − ( y ( i ) − θ T x ( i ) ) 2 2 σ 2 ) L(\theta) = \prod \limits_{i = 1}^{m} p(y ^ {(i)} | x ^ {(i)}; \theta) = \prod \limits_{i=1}^{m}\frac{1}{\sqrt {2 \pi} \sigma} \exp{(-\frac{(y^{(i)} - \theta ^ T x ^ {(i)})^2}{2 \sigma ^ 2})} L(θ)=i=1mp(y(i)x(i);θ)=i=1m2π σ1exp(2σ2(y(i)θTx(i))2)
对数似然法:(将乘法转化为加法),之后需要用极大似然估计方法求解
l n L ( θ ) = l n ∏ i = 1 m 1 2 π σ exp ⁡ ( − ( y ( i ) − θ T x ( i ) ) 2 2 σ 2 ) ln L(\theta) = ln \prod \limits_{i=1}^{m}\frac{1}{\sqrt {2 \pi} \sigma} \exp{(-\frac{(y^{(i)} - \theta ^ T x ^ {(i)})^2}{2 \sigma ^ 2})} lnL(θ)=lni=1m2π σ1exp(2σ2(y(i)θTx(i))2)
展开化简:
l n L ( θ ) = ∑ i = 1 m l n 1 2 π σ exp ⁡ ( − ( y ( i ) − θ T x ( i ) ) 2 2 σ 2 ) = m l n 1 2 π σ − 1 σ 2 1 2 ∑ i = 1 m ( y ( i ) − θ T x ( i ) ) 2 ln L(\theta) = \sum \limits_{i = 1}^{m}ln \frac{1}{\sqrt {2 \pi} \sigma} \exp{(-\frac{(y^{(i)} - \theta ^ T x ^ {(i)})^2}{2 \sigma ^ 2})} \\ = mln \frac{1}{\sqrt {2 \pi} \sigma} - \frac{1}{\sigma^2} \frac{1}{2} \sum \limits _{i = 1}^{m} (y^{(i)} - \theta ^ T x ^ {(i)})^2 lnL(θ)=i=1mln2π σ1exp(2σ2(y(i)θTx(i))2)=mln2π σ1σ2121i=1m(y(i)θTx(i))2

目标:让似然函数越大越好(极大似然估计),即让 J ( θ ) J(\theta) J(θ)越小越好(可以使用最小二乘法求解)
J ( θ ) = 1 2 ∑ i = 1 m ( y ( i ) − θ T x ( i ) ) 2 J(\theta) = \frac{1}{2} \sum \limits _{i = 1}^{m} (y^{(i)} - \theta ^ T x ^ {(i)})^2 J(θ)=21i=1m(y(i)θTx(i))2

其实由损失函数也可以得到同样的式子:

对于 y = θ x + b y = \theta x + b y=θx+b θ \theta θ b b b 也吸入进入得到 θ ^ = ( θ , b ) \hat \theta = (\theta, b) θ^=(θ,b) X X X代表所有的样本数据,最后一个元素置1,最后要和 θ ^ \hat\theta θ^ 相乘,最后求偏导也是一样的结果。
L = ∑ i = 1 n ( y i − f ( x i ) ) 2 = ( y − X θ ^ ) T ( y − X θ ^ ) X = ( x 11 x 12 ⋯ x 1 d 1 x 11 x 12 ⋯ x 1 d 1 ⋮ ⋮ ⋱ ⋮ ⋮ x m 1 x m 2 ⋯ x m d 1 ) = ( x 1 T 1 x 2 T 1 ⋮ ⋮ x m T 1 ) L = \sum \limits_{ i = 1 } ^ n ( y_i - f(x_i)) ^ 2 = (y - X \hat \theta)^T (y - X \hat\theta) \\ X = \begin{pmatrix} x_{11} & x_{12} & \cdots & x_{1d} & 1 \\ x_{11} & x_{12} & \cdots & x_{1d} & 1 \\ \vdots & \vdots & \ddots & \vdots & \vdots \\ x_{m1} & x_{m2} & \cdots & x_{md} & 1 \end{pmatrix} = \begin{pmatrix} x_1^T & 1 \\ x_2^T & 1 \\ \vdots & \vdots \\ x_m^T & 1 \end{pmatrix} L=i=1n(yif(xi))2=(yXθ^)T(yXθ^)X= x11x11xm1x12x12xm2x1dx1dxmd111 = x1Tx2TxmT111

矩阵求导参考:

  • https://zhuanlan.zhihu.com/p/263777564 (先导篇)
  • https://zhuanlan.zhihu.com/p/273729929 (公式篇)

在这里插入图片描述

4 梯度下降

梯度下降法(gradient descent)是一种常用的一阶(first-order)优化方法。主要解决求最小值问题,其基本思想在于不断地逼近最优点,每一步的优化方向就是梯度的方向。

4.1 梯度下降方法

  • 批量梯度下降

容易得到最优解,但是由于每次考虑所有样本,速度很慢。

  • 随机梯度下降

每次找一个样本,迭代速度很快,但不一定每次都朝着收敛的方向。

  • 小批量梯度下降

每次更新一小部分数据来算,因为在整个训练集上算梯度资源消耗太大,我们可以随机采取 b b b个样本 i 1 , i 2 , ⋯ , i b i_1, i_2, \cdots, i_b i1,i2,,ib来近似损失, e e e是损失函数, b b b是批量大小。
1 b ∑ i ∈ I b e ( x i , y i , w ) \frac{1}{b} \sum \limits_{i \in I_b} \mathcal{e}(\mathbf{x_i}, y_i, \mathbf{w}) b1iIbe(xi,yi,w)

4.2 其他参数

  • 学习率:更新的步长

在这里插入图片描述

  • 批处理数量

一般batch_size选择32,64,128等,有时候会考虑内存和效率。

逻辑回归

逻辑回归是一个经典的二分类算法。

1 sigmoid函数

g ( z ) = 1 1 + e − z , z ∈ R g(z) = \frac{1}{1 + e ^ {-z}}, z \in R g(z)=1+ez1,zR

在这里插入图片描述

将任意的输入映射到了 [ 0 , 1 ] [0, 1] [0,1]区间中,在线性回归中可以得到一个预测值,再将该值映射到sigmoid函数中,这样就可以完成由值到概率的转换,这就是分类任务。

2 逻辑回归求解

预测函数:
h θ ( x ) = g ( θ T x ) = 1 1 + e − θ T x 其中 θ 0 + θ 1 x 1 + . . . + θ n x n = ∑ i = 1 n θ i x i = θ T x h_{\theta}(x) = g(\theta ^ T x) = \frac{1}{1 + e ^ {-\theta^T x}} \\ \text{其中} \theta_0 + \theta_1 x_1 + ... + \theta_n x_n = \sum \limits_{i = 1}^n \theta_i x_i = \theta ^ T x hθ(x)=g(θTx)=1+eθTx1其中θ0+θ1x1+...+θnxn=i=1nθixi=θTx
分类任务:
{ P ( y = 1 ∣ x ; θ ) = h θ ( x ) P ( y = 0 ∣ x ; θ ) = 1 − h θ ( x ) ⇒ P ( y ∣ x ; θ ) = ( h θ ( x ) ) y ( 1 − h θ ( x ) ) 1 − y \begin{cases} P(y = 1|x; \theta) = h_\theta(x) \\ P(y = 0|x; \theta) = 1 - h_\theta(x) \end{cases} \Rightarrow P(y | x; \theta) = (h_\theta(x)) ^ y (1 - h_\theta(x)) ^ {1 - y} {P(y=1∣x;θ)=hθ(x)P(y=0∣x;θ)=1hθ(x)P(yx;θ)=(hθ(x))y(1hθ(x))1y
对于二分类任务(0, 1),整合后,y取0只保留 ( 1 − h θ ( x ) ) 1 − y (1 - h_\theta(x)) ^ {1 - y} (1hθ(x))1yy取1只保留 ( h θ ( x ) ) y (h_\theta(x)) ^ y (hθ(x))y

似然函数:
L ( θ ) = ∏ i = 1 m P ( y i ∣ x i ; θ ) = ∏ i = 1 m ( h θ ( x i ) ) i y ( 1 − h θ ( x i ) ) 1 − y i L(\theta) = \prod \limits_{i = 1}^m P(y_i | x_i; \theta) = \prod \limits_{i = 1}^m (h_\theta(x_i)) ^ y_i (1 - h_\theta(x_i)) ^ {1 - y_i} L(θ)=i=1mP(yixi;θ)=i=1m(hθ(xi))iy(1hθ(xi))1yi
对数似然法,即求 l ( θ ) l(\theta) l(θ) 的最大值:
l ( θ ) = l o g L ( θ ) = ∑ i = 1 m ( y i l o g h θ ( x i ) + ( 1 − y i ) l o g ( 1 − h θ ( x i ) ) ) l(\theta) = logL(\theta) = \sum \limits_{i = 1} ^m (y_i log h_\theta(x_i) + (1 - y_i) log (1 - h_\theta(x_i))) l(θ)=logL(θ)=i=1m(yiloghθ(xi)+(1yi)log(1hθ(xi)))
将上述函数转化为求最小值,同时系数乘上一个常数,即求 J ( θ ) = − 1 m l ( θ ) J(\theta) = -\frac{1}{m}l(\theta) J(θ)=m1l(θ) 的最小值,转化为梯度下降问题:
J ( θ ) = − 1 m l ( θ ) J(\theta) = -\frac{1}{m}l(\theta) J(θ)=m1l(θ)
在这里插入图片描述

上述过程即求出了偏导的方向,有了更新方向就可以进行参数更新: α \alpha α代表学习率
θ j = θ j − α 1 m ∑ i = 1 m ( h θ ( x i ) − y i ) x i j \theta_j = \theta_j - \alpha \frac{1}{m} \sum \limits_{i = 1} ^ m (h_\theta(x_i) - y_i)x_i^j θj=θjαm1i=1m(hθ(xi)yi)xij

减法是代表用的梯度下降,整体除以m是考虑了所有的m个样本。

多分类问题:

在这里插入图片描述

Softmax回归是逻辑回归的一般化,相关对比参考 https://zhuanlan.zhihu.com/p/98061179

模型评估标准

1 回归模型评估

1.1 平均绝对误差(Mean Absolute Error,MAE)

平均绝对误差就是指预测值与真实值之间平均相差多大
M A E = 1 m ∑ i = 1 m ∣ f i − y i ∣ MAE = \frac{1}{m}\sum \limits _{i = 1}^m \lvert f_i - y_i \rvert MAE=m1i=1mfiyi

1.2 均方误差(Mean Squared Error,MSE)

观测值与真值偏差的平方和与观测次数的比值
M S E = 1 m ∑ i = 1 m ( f i − y i ) 2 MSE = \frac{1}{m} \sum \limits_{i = 1}^m(f_i - y_i)^2 MSE=m1i=1m(fiyi)2
这也是线性回归中最常用的损失函数,线性回归过程中尽量让该损失函数最小。那么模型之间的对比也可以用它来比较。

MSE可以评价数据的变化程度,MSE的值越小,说明预测模型描述实验数据具有更好的精确度。

1.3 R-square(决定系数)

R 2 = 1 − ∑ ( Y a c t u a l − Y p r e d i c t ) 2 ∑ ( Y a c t u a l − Y m e a n ) 2 R^2 = 1 - \frac{\sum(Y_{actual} - Y_{predict})^2}{\sum(Y_{actual} - Y_{mean})^2} R2=1(YactualYmean)2(YactualYpredict)2

1.4 Adjusted R-Square(校正决定系数)

R a d j u s t e d 2 = 1 − ( 1 − R 2 ) ( n − 1 ) n − p − 1 R^2_{adjusted} = 1 - \frac{(1 - R^2)(n - 1)}{n - p - 1} Radjusted2=1np1(1R2)(n1)

n为样本数量,p为特征数量

消除了样本数量和特征数量的影响

1.5 交叉验证

我们有一个总的数据集,将总数据集切分,例如,将数据分为训练集(80%)和测试集(20%),训练集用来训练model,测试集用来最终的测试。

训练集还再平均进行切分为3份(标号为1、2、3)。

测试集和训练集的比例自己定。

交叉验证就是在训练集中,采用2份数据来训练,用另一份数据来验证训练出的模型的参数,进行3次。

即:1 + 2来训练,3验证;2 + 3来训练,1来验证;1 + 3来训练,2来验证。

为了让模型的评估效果比较好,最后将3次的参数取平均值。

无论分类还是回归模型,都可以利用交叉验证,进行模型评估

sklearn模块中有交叉验证函数,例如sklearn.cross_validation 中的 train_testsplit 函数

交叉验证主要是为了防止某一部分数据比较简单,导致模型的效果比较高。

2 分类模型评估

2.1 准确率、精确率、召回率、f1_score

  • 准确率(Accuracy)的定义是:对于给定的测试集,分类模型正确分类的样本数与总样本数之比;

  • 精确率(Precision)的定义是:对于给定测试集的某一个类别,分类模型预测正确的比例,或者说:分类模型预测的正样本中有多少是真正的正样本;

  • 召回率(Recall)的定义为:对于给定测试集的某一个类别,样本中的正类有多少被分类模型预测正确;

    假设有1000个人,其中990个人正常,有10个人患有癌症,模型旨在预测哪些人是患有癌症的。

    如果模型预测1000个人中都是正常的,没有癌症患者,那么可以说模型的精度是 990 1000 = 0.99 \frac{990}{1000}=0.99 1000990=0.99。虽然精度很高,但是都是正样本,没有负样本,模型是无用的,因为一个患者都没有找到。因此无法用精度来评估模型,而是使用recall召回率来评估。

  • F1_score,在理想情况下,我们希望模型的精确率越高越好,同时召回率也越高越高,但是,现实情况往往事与愿违,在现实情况下,精确率和召回率像是坐在跷跷板上一样,往往出现一个值升高,另一个值降低,那么,有没有一个指标来综合考虑精确率和召回率了,这个指标就是F值。F值的计算公式为:
    F = ( a 2 + 1 ) × P × R a 2 × ( P + R ) F = \frac{(a ^ 2 + 1) \times P \times R}{a ^ 2 \times (P + R)} F=a2×(P+R)(a2+1)×P×R

    P: Precision, R: Recall, a:权重因子

    当a=1时,F值便是F1值,代表精确率和召回率的权重是一样的,是最常用的一种评价指标。

    F1的计算公式为: F 1 = 2 × P × R P + R F1 = \frac{2 \times P \times R}{P + R} F1=P+R2×P×R

2.2 混淆矩阵

混淆矩阵也称误差矩阵,是表示精度评价的一种标准格式,用n行n列的矩阵形式来表示。

具体评价指标有总体精度、制图精度、用户精度等,这些精度指标从不同的侧面反映了图像分类的精度。

下面是一个混淆矩阵,Actual代表真实值,Predicted代表预测值,预测的是标签号(因为是分类任务,主要对标签进行分类)。

下面是我对TP、TN、FP、FN四个值的理解(助记)

TP:预测正确,预测成1

TN:预测正确,预测成0

FP:预测错误,预测成1

FN:预测错误,预测成0

在这里插入图片描述

可以通过上面四个值计算相应的评估值,见下图。

在这里插入图片描述

  • 准确率:预测正确的比例
  • 精确率:在预测之后,在预测结果的某一结果上,正确的比例
  • 召回率:在预测之前,真实值为某一结果上,正确的比例

回归模型相关技巧

1 下采样和上采样

在分类问题的数据中,很容易出现正反数据集数量存在极大的差距,这类数据直接用于训练不利于模型的构架,所以我们需要对数据进行些许处理。

很容易想到,合理的数据集应该是正反数据集数量应接近,那就存在两种策略:

下采样策略:把数量多的减少到与数量少的相近

上(过)采样策略:把数量少的增加到与数量多的相近

  • 下采样:

在这里插入图片描述

  • 上采样:SMOTE算法

步骤:

(1)对于少数类中每一个样本x,以**欧氏距离(两点之间距离)**为标准计算它到少数类样本集中所有样本的距离,得到其k近邻(所有距离排序后前k小的距离)

(2)根据样本不平衡比例设置一个采样比例以确定采样倍率N,对于每一个少数类样本x,从其k近邻中随机选择若干个样本,假设选择的近邻为xn

(3)对于每一个随机选出的近邻xn,分别与原样本按照如下的公式构建新的样本。
x n e w = x + r a n d ( 0 , 1 ) × ( x ~ − x ) x_{new} = x + rand(0, 1) \times (\widetilde x - x) xnew=x+rand(0,1)×(x x)

( x ~ − x ) (\widetilde x - x) (x x) 相当于距离 d i d_i di (欧几里得距离),那么每个 d i d_i di 都可以生成一个新的数据。

在这里插入图片描述

2 正则化惩罚

加上了正则化项能在一定程度上避免过拟合

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

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

相关文章

OceanBase 分区表详解

1、分区表的定义 在OceanBase数据库中,普通的表数据可以根据预设的规则被分割并存储到不同的数据区块中,同一区块的数据是在一个物理存储上。这样被分区块的表被称为分区表,而其中的每一个独立的数据区块则被称为一个分区。 如下图所示&…

【Android原生问题分析】夸克、抖音划动无响应问题【Android14】

1 问题描述 偶现问题,用户打开夸克、抖音后,在界面上划动无响应,但是没有ANR。回到Launcher后再次打开夸克/抖音,发现App的界面发生了变化,但是仍然是划不动的。 2 log初分析 复现问题附近的log为: 用户…

使用 K-means 算法进行豆瓣读书数据的文本聚类分析

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

Django5 2024全栈开发指南(二):Django项目配置详解

目录 一、基本配置信息二、资源文件配置2.1 资源路由——STATIC_URL2.2 资源集合——STATICFILES_DIRS2.3 资源部署——STATIC_ROOT2.2.4 媒体资源——MEDIA 三、模板配置四、数据库配置4.1 mysqlclient连接MySQL4.2 pymysql连接MySQL4.3 多个数据库的连接方式4.4 使用配置文件…

数据结构-二叉搜索树(Java语言)

目录 1.概念 2.查找search 3.插入insert ​编辑4.删除remove(难点) 5.性能分析 1.概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树 : 1.若它的左子树不为空,则左子树上所有节点的值都…

学习笔记:黑马程序员JavaWeb开发教程(2024.11.18)

9.8 Mybatis-基础操作-查询(条件查询) 需要模糊查询,根据要求,我们需要在关键词前后都加上%,但是我们不能使用‘%#{内容}%’的形式,因为#{内容}最终会变成?,而?不能放在‘’之中&#xff…

数据分析-48-时间序列变点检测之在线实时数据的CPD

文章目录 1 时间序列结构1.1 变化点的定义1.2 结构变化的类型1.2.1 水平变化1.2.2 方差变化1.3 变点检测1.3.1 离线数据检测方法1.3.2 实时数据检测方法2 模拟数据2.1 模拟恒定方差数据2.2 模拟变化方差数据3 实时数据CPD3.1 SDAR学习算法3.2 Changefinder模块3.3 恒定方差CPD3…

学习大数据DAY61 宽表加工

目录 模型设计 加工宽表 任务调度: 大表 - 把很多数据整合起来 方便后续的明细查询和指标计算 模型设计 设计 建模 设计: excel 文档去编写 建模: 使用建模工具 PowerDesigner Navicat 在线画图工具... 把表结构给绘 制出来 共享\项目课工具\pd 加工宽表 数…

C#.Net筑基-模式匹配汇总

01、模式匹配概述 从C#7开始支持的 模式匹配 语法(糖,挺甜),可非常灵活的对数据进行条件匹配和提取,经过多个版本的完善,已经非常强大了。 C# 支持多种模式,包括声明、类型、常量、关系、属性…

Python蓝桥杯刷题1

1.确定字符串是否包含唯一字符 题解:调用count函数计算每一个字符出现的次数,如果不等于1就输出no,并且结束循环,如果等于1就一直循环直到计算到最后一个字符,若最后一个字符也满足条件,则输出yes import…

Unity类银河战士恶魔城学习总结(P127 Stat ToolTip属性提示)

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址:https://www.udemy.com/course/2d-rpg-alexdev/ 本章节实现了把鼠标放到属性上面就会显示属性的作用 UI_StatToolTip.cs 这段代码实现了一个UI提示框(ToolTip)功能…

计算机编程中的事件驱动编程模型及其在构建响应式用户界面中的应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 计算机编程中的事件驱动编程模型及其在构建响应式用户界面中的应用 计算机编程中的事件驱动编程模型及其在构建响应式用户界面中…

ROS第九梯:ROS+VSCode+Python+C++自定义消息发布和订阅

首先,Python版本的ROS项目和C++版本的ROS项目前期创建功能包的步骤基本一致,具体可参考第二章。 费一步:新建msg文件 在功能包(data_input)目录下创建一个msg文件夹,并在msg文件夹下创建一个名为Box的msg文件,具体如下图所示: 该msg文件为一个用于描述3D Box的文件,…

selenium元素定位---元素点击交互异常解决方法

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 1、异常原因 在编写ui自动化时,执行报错元素无法点击:ElementClickInterceptedException 具体报错:selenium.common.exc…

Front Panel Window Bounds 与 Front Panel Window Bounds 的区别与应用

在LabVIEW中,Front Panel Window Bounds 和 Front Panel WindowBounds 是两个不同的属性节点,用于描述前面板窗口的位置和大小。它们的区别主要体现在它们表示的是窗口的不同部分,具体如下: 1 Window Bounds:调整整个…

H.265流媒体播放器EasyPlayer.js播放器出现加载视频等待画面时长过长的原因排查

在数字媒体时代,用户体验是衡量播放器性能的关键指标之一。EasyPlayer.js网页web无插件播放器作为一款流行的Web视频播放器,其加载速度和响应时间直接影响着用户的观看体验。 1、问题描述 加载视频等待画面时长过长。 2、可能的原因: 检查下…

计算机网络-MSTP基础实验一(单域多实例)

前面我们已经大致了解了MSTP的基本概念和工作原理,但是我自己也觉得MSTP的理论很复杂不结合实验是很难搞懂的,今天来做一个配套的小实验以及一些配置命令。 一、网络拓扑 单域多实例拓扑 基本需求:SW1为VLAN10的网关,SW2为VLAN20的…

大数据-227 离线数仓 - Flume 自定义拦截器(续接上节) 采集启动日志和事件日志

点一下关注吧!!!非常感谢!!持续更新!!! Java篇开始了! 目前开始更新 MyBatis,一起深入浅出! 目前已经更新到了: Hadoop&#xff0…

【langchain4j】AIservices能够实现更加灵活的chain

文章目录 AI service介绍如何工作的AiServices提供的能力支持的返回形式 简单的例子:接收用户消息,并按规定返回接收单个变量接收更多动态变量 advanced RAGChaining multiple AI Services:多个AiSerives合并到一起相关教程:[Lang…

【UGUI】背包的交互01(道具信息跟随鼠标+道具信息面板显示)

详细程序逻辑过程 初始化物品栏: 在 Awake 方法中,通过标签找到提示框和信息面板。 循环生成10个背包格子,并为每个格子设置图标和名称。 为每个格子添加 UInterMaager232 脚本,以便处理交互事件。 关闭提示框和信息面板&#…