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

掌握线性回归:从简单模型到多项式模型的综合指南

目录

一、说明

二、简单线性回归

三、线性回归的评估指标

3.1 线性回归中的假设

四、从头开始的简单线性回归代码

五、多元线性回归

六、多元线性回归代码

七、多项式线性回归

八、多项式线性回归代码

九、应用单变量多项式回归

十、改变多项式的次数

十一、多列多项式回归


一、说明

        数据科学的基础算法在预测连续结果方面起着关键作用。它通过假设独立变量和因变量之间存在线性关系来预测两个变量之间的关系。它寻求最小化预测值和实际值之间平方差之和的最佳直线。该方法应用于经济学和金融学等各个领域,用于分析和预测数据趋势。它可以扩展到涉及多个独立变量的多元线性回归和逻辑回归,适用于二元分类问题。

        任何 ML 模型都遵循以下工作流程:
数据 → 模型 → 成本函数 (J) → J 的优化

        这里我们将讨论三种类型的线性回归:

  1. 简单线性回归
  2. 多元线性回归
  3. 多项式线性回归

二、简单线性回归

        在简单线性回归中,有一个独立变量 (x)一个因变量 (y)。模型估计最佳拟合线的斜率截距,表示变量之间的关系。斜率表示独立变量每变化一个单位,因变量的变化量,而截距表示独立变量为零时因变量的预测值。

模型
为了计算最佳拟合线,线性回归使用传统的斜率截距形式的直线:Y = W*X + b,
其中 Y = 因变量,X = 自变量,W = 斜率,b = 常数/截距。

        成本函数 (J)
        线性回归算法的目标是获得β ₀ 和β ₁ 的最佳值,以找到最佳拟合线。最佳拟合线是误差最小的线,这意味着预测值和实际值之间的误差应该最小。

        随机误差:在回归中,因变量(Yi)的观测值与预测值(Y_predicted)之间的差异称为残差随机误差

error = Y_predicted - Yi

其中Y_prediced = W*X + b
最佳拟合线是与给定散点图最佳拟合的线。从数学上讲,最佳拟合线是通过最小化残差平方和 (RSS) 获得的。

成本函数有助于计算出Wb的最优值,从而为数据点提供最佳拟合线。
        注意 →成本函数应具有连续性、可微性凸性
        在线性回归中,使用均方误差 (MSE),即 Y_predicted 和 Yi 之间发生的平方误差的平均值。

        梯度下降
        梯度下降是一种优化算法,它优化成本函数以达到最佳最小解。为了找到最佳解决方案,我们需要降低所有数据点的成本函数(MSE)。这是通过迭代更新 W 和 b 的值来实现的,直到我们得到最佳解决方案。
回归模型优化梯度下降算法,通过随机选择系数值降低成本函数来更新线的系数,然后迭代更新这些值以达到最小成本函数。

由于我们的成本函数是凸函数,它应该有一个全局最小值,为了达到这个最小值,我们需要采取一些步骤。现在,如果我们采取小步骤,将需要大量时间才能达到最小值,如果我们采取更大的步骤,我们将更快地到达底部,但我们可能会超调。所以在 ML 中,这些步骤被称为学习率,这决定了算法收敛到最小值的速度。

        从数学上讲,我们可以通过推导方程并使其等于零(斜率/梯度 = 0)来达到最小值。因此,我们必须根据我们的参数(W 和 b)推导方程,以更新 W 和 b 的值。

        梯度下降的推导
我们将通过对 W 和 b 的偏导数来获取成本函数 (J) 的梯度。

这里的偏导数就是梯度,用来更新W和b的值,Alpha就是学习率。

三、线性回归的评估指标

        任何线性回归模型的强度都可以使用各种评估指标来评估。这些评估指标通常可以衡量模型生成观察到的输出的效果。

        1. 判定系数或 R 平方 (R2)
        R 平方是一个数字,它解释了所开发的模型所解释/捕获的变化量。它始终介于 0 和 1 之间。总体而言,R 平方的值越高,模型与数据的拟合效果越好。

        残差平方和 (RSS)定义为图/数据中每个数据点的残差平方和。它是预期和实际观测输出之间差异的度量。

        总平方和 (TSS)定义为数据点与响应变量平均值的误差之和。

R 平方的重要性如下图所示,

        2. 均方根误差 (RMSE) 和残差标准误差 (RSE)
均方根误差是残差方差的平方根。它指定模型与数据的绝对拟合度,即观察到的数据点与预测值的接近程度。从数学上讲,它可以表示为,

        为了使该估计无偏,必须将残差平方和除以自由度,而不是模型中的数据点总数。该术语称为残差标准误差 (RSE)。从数学上讲,它可以表示为:

R 平方是比 RMSE 更好的度量。由于均方根误差的值取决于变量的单位(即它不是标准化的度量),因此它可以随着变量单位的变化而变化。

3.1 线性回归中的假设

1. 残差的线性:因变量和自变量之间需要存在线性关系。

2. 残差的独立性:误差项不应相互依赖(例如在时间序列数据中,下一个值依赖于前一个值)。残差项之间不应存在相关性。这种现象的缺失被称为自相关。

3. 残差的正态分布:残差的均值应服从正态分布,均值等于零或接近于零。这样做是为了检查所选线是否真的是最佳拟合线。如果误差项不服从正态分布,则表明存在一些不寻常的数据点,必须仔细研究才能建立更好的模型。

4. 残差方差相等:误差项必须具有恒定方差。这种现象称为同方差性。误差项中存在非常量方差称为异方差性。通常,非常量方差是在存在异常值或极端杠杆值时出现的。

四、从头开始的简单线性回归代码


import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
X,y = datasets.make_regression(n_samples=100, n_features=1, noise=20, random_state=4)
X_train, X_test ,y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1234)fig = plt.figure(figsize=(8,6))
plt.scatter(X[:,0], y, color="b", marker="o", s=30)
plt.show()

        第一行生成一个用于简单线性回归问题的合成数据集。它创建X作为输入特征(本例中为单个特征),y作为目标变量。n_samples指定数据点的数量,n_features是数据集中的特征数量(本例中为 1),noise控制数据中的噪声量,random_state确保可重复性。然后,我们使用 scikit-learn 中的train_test_split函数将数据集拆分为训练集和测试集。它采用输入特征 X 和目标变量 y,以及test_size作为要包含在测试拆分中的数据集比例(20%)。我们将使用 Matplotlib 的图形函数创建一个指定大小为8x6 英寸的散点图。X [:,0]从输入特征 X 中选择第一个(也是唯一的)特征。y 是目标变量。color=”b”将标记的颜色设置为蓝色,marker=”o”指定应使用圆形标记,s=30将标记的大小设置为 30 点。
 

class LinearRegression() : def __init__(self, lr = 0.002, n_iters = 1000):self.lr = lrself.n_iters = n_itersself.weights = Noneself.bias = Nonedef fit(self, X, y):n_samples, n_features = X.shapeself.weights = np.zeros(n_features)self.bias = 0for _ in range(self.n_iters):y_pred = np.dot(X, self.weights) + self.biasdw = (1/n_samples) * np.dot(X.T, (y_pred - y))db = (1/n_samples) * np.sum(y_pred - y)self.weights = self.weights - self.lr * dwself.bias = self.bias - self.lr * dbdef predict(self, X):y_pred = np.dot(X, self.weights) + self.biasreturn y_pred
reg = LinearRegression()
reg.fit(X_train, y_train)
pred = reg.predict(X_test)
print(pred)

此类实现了一个简单的线性回归模型。
__init __()是该类的构造函数方法。它使用两个参数初始化线性回归模型:

  • lr:学习率,控制梯度下降时所采取的步长。
  • n_iters:梯度下降算法将运行的迭代次数。

fit()函数将模型与训练数据进行拟合。它接受两个参数:输入特征 (X) 和输出目标变量 (y)。此函数将模型的权重和偏差初始化为零

predict()函数使用学习到的权重和偏差来预测新输入特征“X”的目标变量。

mse = np.mean((y_test - pred)**2)
print(mse) #--> 361.2812896055198
y_pred_line = reg.predict(X)
cmap = plt.get_cmap('viridis')
fig = plt.figure(figsize=(8,6))
m1 = plt.scatter(X_train, y_train, color=cmap(0.9), s=10)
m2 = plt.scatter(X_test, y_test, color=cmap(0.5), s=10)
plt.plot(X, y_pred_line, color='black', linewidth=2, label='Prediction')
plt.show()

五、多元线性回归

        多元线性回归是一种理解单个因变量和多个自变量之间关系的技术。多元线性回归的公式也类似于简单线性回归,但有一个细微的变化,即不再只有一个 beta 变量,而是所有使用的变量都有 beta 值。公式如下:Y = W1*X1 + W2*X2 + … + WmXm + b

        多元线性回归的考虑
因素 简单线性回归的所有四个假设对于多元线性回归仍然成立,并且还有一些新的附加假设。
        1.过度拟合:当向模型中添加越来越多的变量时,模型可能变得过于复杂,通常会记住训练集中的所有数据点。这种现象称为模型的过度拟合。这通常会导致高训练准确率和非常低的测试准确率。
        2.多重共线性:这是一种具有多个独立变量的模型中可能有一些变量相互关联的现象。
        3.特征选择:随着变量的增多,从给定特征池(其中许多可能是多​​余的)中选择最佳预测因子集成为构建相关且更好模型的重要任务。

        多重共线性由于多重共线性很难找出哪个变量实际上对响应变量的预测有贡献,因此它会导致人们错误地得出变量对目标变量的影响的结论。虽然它不会影响预测的精度,但必须正确检测和处理模型中存在的多重共线性,因为从模型中随机删除任何这些相关变量都会导致系数值大幅波动,甚至改变符号。

可以使用以下方法检测多重共线性。1
. 成对相关性:检查不同对独立变量之间的成对相关性可以为检测多重共线性提供有用的见解。2
. 方差膨胀因子 (VIF):成对相关性可能并不总是有用,因为可能只有一个变量无法完全解释其他变量,但一些变量组合起来可能可以做到这一点。因此,要检查变量之间的这种关系,可以使用 VIF。VIF 基本上解释了一个独立变量与所有其他独立变量之间的关系。VIF 由以下公式给出:

VIF = 1/ (1 - R^2)

对于 VIF 值,常见的启发式方法是,如果 VIF > 10,则该值肯定很高,应将其删除。如果 VIF=5,则它可能有效,但应先进行检查。如果 VIF < 5,则认为这是一个好的 vif 值。

线性回归中的过拟合和欠拟合总是存在模型在训练数据上表现良好但在测试数据上表现不佳的情况。在数据集上训练模型时,过拟合和欠拟合是人们面临的最常见问题。

在理解过度拟合和欠拟合之前,必须了解偏差和方差。

偏差:偏差是一种衡量模型对未来未知数据的准确度的指标。假设有足够的训练数据,复杂的模型可以准确地进行预测。而那些过于简单的模型很可能在预测方面表现不佳。简单地说,偏差是训练数据造成的错误。一般来说
,线性算法的偏差较大,这使得它们学习速度快、更容易理解,但总体而言灵活性较差。这意味着对复杂问题的预测性能较低,无法达到预期结果。

方差:方差是模型对训练数据的敏感度,即它量化了输入数据发生变化时模型的反应程度。理想情况下,模型不应该从一个训练数据集到下一个训练数据发生太大变化,这意味着算法擅长找出输入和输出变量之间隐藏的潜在模式。
理想情况下,模型应该具有较低的方差,这意味着模型在改变训练数据后不会发生剧烈变化(它是可推广的)。方差较高会使模型即使在训练数据集发生微小变化时也发生剧烈变化。

偏差方差权衡

为了追求最佳性能,监督式机器学习算法力求在低偏差和低方差之间取得平衡,以提高稳健性。在机器学习领域,偏差和方差之间存在内在关系,其特点是呈反相关。

  • 偏差增加会导致方差减少。
  • 相反,方差增大会导致偏差减小。
    找到偏差和方差之间的平衡至关重要,算法必须权衡利弊才能获得最佳结果。
    在实践中,由于底层目标函数的性质未知,计算精确的偏差和方差误差项具有挑战性。

过度拟合
当模型学习数据中的每个模式和噪声,以至于影响模型在未见的未来数据集上的性能时,这被称为过度拟合。模型与数据的拟合程度很高,以至于它将噪声解释为数据中的模式。

当模型的偏差较低且方差较高时,它最终会记住数据并导致过度拟合。过度拟合会导致模型变得具体而不是通用。这通常会导致训练准确率高但测试准确率非常低。

检测过拟合很有用,但并不能解决实际问题。有几种方法可以防止过拟合,如下所示:

  • 交叉验证
  • 如果训练数据太小,无法训练,则添加更多相关且干净的数据。
  • 如果训练数据太大,请进行一些特征选择并删除不必要的特征。
  • 正则化

欠拟合
欠拟合的讨论频率并不像过拟合那么高。当模型无法从训练数据集中学习,也无法推广到测试数据集时,就称为欠拟合。这种类型的问题可以很容易地通过性能指标检测到。

当模型具有高偏差和低方差时,它最终无法概括数据并导致欠拟合。它无法从数据中找到隐藏的底层模式。这通常会导致训练准确率低和测试准确率极低。防止欠拟合的方法如下,

  • 增加模型复杂度
  • 增加训练数据中的特征数量
  • 消除数据中的噪音

六、多元线性回归代码

X, y = datasets.make_regression(n_samples=100, n_features=3, noise=20, random_state=4)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1234)fig = plt.figure(figsize=(8,6))
plt.scatter(X[:,0], y, color="b", marker="o", s=30)
plt.show()

reg = LinearRegression()
reg.fit(X_train, y_train)pred = reg.predict(X_test)
print(pred)

mse = np.mean((y_test - pred)**2)
print(mse) #--> 698.925115269247
def plot_multiple_linear_regression(X, y, y_pred, title='Multiple Linear Regression'):fig = plt.figure(figsize=(8, 6))ax = fig.add_subplot(111, projection='3d')ax.scatter(X[:, 0], X[:, 1], y, color='blue', label='Actual')ax.scatter(X[:, 0], X[:, 1], y_pred, color='red', label='Predicted')ax.set_xlabel('Feature 1')ax.set_ylabel('Feature 2')ax.set_zlabel('Target')ax.set_title(title)ax.legend()plt.show()
plot_multiple_linear_regression(X_test, y_test, pred)

七、多项式线性回归

        简单的线性回归算法仅在数据之间的关系为线性时才有效。但是假设我们有非线性数据,那么线性回归将无法绘制最佳拟合线。在这种情况下,简单回归分析会失败。考虑下图,它具有非线性关系,您可以看到其上的线性回归结果,其表现不佳,这意味着它与现实不相符。因此,我们引入多项式回归来克服这个问题,这有助于识别独立变量和因变量之间的曲线关系。

        多项式回归如何处理非线性数据?
        多项式回归是线性回归的一种形式,由于因变量和自变量之间存在非线性关系,我们在线性回归中添加一些多项式项以将其转换为多项式回归。
在多项式回归中,因变量和自变量之间的关系被建模为 n 次多项式函数。当多项式的次数为 2 时,它被称为二次模型;当多项式的次数为 3 时,它被称为三次模型,依此类推。
假设我们有一个数据集,其中变量 X 代表独立数据,Y 是因变量。在预处理阶段将数据输入模式之前,我们使用某种程度将输入变量转换为多项式项。

        多项式回归模型通常用最小二乘法拟合。最小二乘法在高斯-马尔可夫定理下最小化系数的方差。

八、多项式线性回归代码

from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
X = 6 * np.random.rand(200, 1) - 3
y = 0.8 * X**2 + 0.9*X + 2 + np.random.randn(200, 1)plt.plot(X, y, 'b.')
plt.xlabel("X")
plt.ylabel("Y")
plt.show()

我们创建一个形状为 (200, 1) 的数组 X,其中包含-3 和 3之间的随机值。np.random.randn()用于生成 0 到 1 之间的随机数,然后缩放并移动它们到 -3 到 3 之间。
然后我们根据方程y = 0.8x^2 + 0.9x + 2生成目标变量 y ,其中 x 是输入变量 X。它首先计算(0.8 * X^2)得到二次项,(0.9*X)得到线性项,并为常数项加 2。然后它添加一些随机噪声np.random.randn(200, 1)以使数据更真实。噪声是从均值为 0 和标准差为 1 的正态(高斯)分布中采样的。

x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=2)
lr = LinearRegression()
lr.fit(x_train, y_train)
y_pred = lr.predict(x_test)
print(r2_score(y_test, y_pred)) #--> 0.2678387104012654
plt.plot(x_train, lr.predict(x_train), color="r")
plt.plot(X, y, "b.")
plt.xlabel("X")
plt.ylabel("Y")
plt.show()

九、应用单变量多项式回归

poly = PolynomialFeatures(degree=2, include_bias=True)
x_train_trans = poly.fit_transform(x_train)
x_test_trans = poly.transform(x_test)lr = LinearRegression()
lr.fit(x_train_trans, y_train)
y_pred = lr.predict(x_test_trans)
print(r2_score(y_test, y_pred)) #--> 0.7692773830829487
print(lr.coef_)
print(lr.intercept_)
X_new = np.linspace(-3, 3, 200).reshape(200, 1)
X_new_poly = poly.transform(X_new)
y_new = lr.predict(X_new_poly)
plt.plot(X_new, y_new, "r-", linewidth=2, label="Predictions")
plt.plot(x_train, y_train, "b.",label='Training points')
plt.plot(x_test, y_test, "g.",label='Testing points')
plt.xlabel("X")
plt.ylabel("y")
plt.legend()
plt.show()

十、改变多项式的次数

        现在我们将设计一个函数来帮助我们找到正确的度值。在这里,我们将上面完成的所有预处理步骤应用到一个函数中,并将最终预测图映射到它上面。我们需要做的就是传递度数,它将建立一个模型并绘制特定度数的图形。在这里,我们将创建一个预处理步骤管道,使流程简化。

数据 → 多项式变换 → 线性回归 → 预测

def polynomial_regression(degree):X_new=np.linspace(-3, 3, 100).reshape(100, 1)X_new_poly = poly.transform(X_new)polybig_features = PolynomialFeatures(degree=degree, include_bias=False)std_scaler = StandardScaler()lin_reg = LinearRegression()polynomial_regression = Pipeline([("poly_features", polybig_features),("std_scaler", std_scaler),("lin_reg", lin_reg),])polynomial_regression.fit(X, y)y_newbig = polynomial_regression.predict(X_new)#plotting prediction lineplt.plot(X_new, y_newbig,'r', label="Degree " + str(degree), linewidth=2)plt.plot(x_train, y_train, "b.", linewidth=3)plt.plot(x_test, y_test, "g.", linewidth=3)plt.legend(loc="upper left")plt.xlabel("X")plt.ylabel("y")plt.axis([-3, 3, 0, 10])plt.show()

        当我们运行该函数并传递 10、15 和 20 等高阶数时,模型会尝试过度拟合数据,这意味着预测线会慢慢脱离其原始本质并尝试依赖训练数据点,并且随着训练路径发生一些变化,该线会尝试捕捉该点。

polynomial_regression(10)

polynomial_regression(15)

<polynomial_regression(25)

这是一个高次多项式的问题,我们在实际中可以看到,所以需要选择一个最优的次数值。

十一、多列多项式回归

我们已经了解了单变量多项式回归。大多数情况下,输入数据会有很多列,那么如何应用多项式回归并在三维空间中可视化结果呢?对于大多数初学者来说,这有时感觉是一项繁重的任务,所以让我们来解决这个问题,并了解如何在三维空间中执行多项式回归。

# 3D polynomial regression
x = 7 * np.random.rand(100, 1) - 2.8
y = 7 * np.random.rand(100, 1) - 2.8
z = x**2 + y**2 + 0.2*x + 0.2*y + 0.1*x*y +2 + np.random.randn(100, 1)
import plotly.express as px
df = px.data.iris()
fig = px.scatter_3d(df, x=x.ravel(), y=y.ravel(), z=z.ravel())
fig.show()

X = np.hstack((x, y, x**2, y**2, x*y))
reg = LinearRegression().fit(X, z)# Generate grid points for surface plot
x_input, y_input = np.meshgrid(np.linspace(-2.8, 4.2, 100), np.linspace(-2.8, 4.2, 100))
X_input = np.hstack((x_input.reshape(-1, 1), y_input.reshape(-1, 1), x_input.reshape(-1, 1)**2, y_input.reshape(-1, 1)**2, (x_input.reshape(-1, 1)*y_input.reshape(-1, 1))))
z_final = reg.predict(X_input)
import plotly.graph_objects as go
fig = go.Figure()
fig.add_trace(go.Scatter3d(x=x.ravel(), y=y.ravel(), z=z.ravel(), mode='markers', marker=dict(size=3), name='Data'))
fig.add_trace(go.Surface(x=x_input, y=y_input, z=z_final.reshape(x_input.shape), name='Fitted Surface'))
fig.update_layout(scene=dict(xaxis_title='X', yaxis_title='Y', zaxis_title='Z'), title='3D Polynomial Regression')
fig.show()

您可以从github查看此处解释的代码。

相关文章:

掌握线性回归:从简单模型到多项式模型的综合指南

目录 一、说明 二、简单线性回归 三、线性回归的评估指标 3.1 线性回归中的假设 四、从头开始的简单线性回归代码 五、多元线性回归 六、多元线性回归代码 七、多项式线性回归 八、多项式线性回归代码 九、应用单变量多项式回归 十、改变多项式的次数 十一、多列多项式回归 一、…...

Java:183 基于SSM的高校食堂系统

项目介绍 基于SSM的食堂点餐系统 角色:管理员、用户、食堂 前台用户可以实现商品浏览&#xff0c;加入购物车&#xff0c;加入收藏&#xff0c;预定&#xff0c;选座&#xff0c;个人信息管理&#xff0c;收货信息管理&#xff0c;收藏管理&#xff0c;评论功能&#xff0c;…...

光谱相机

光谱相机是一种能够同时获取目标物体的空间图像信息和光谱信息的成像设备。 1、工作原理 光谱相机通过光学系统将目标物体的光聚焦到探测器上&#xff0c;在探测器前设置分光元件&#xff0c;如光栅、棱镜或滤光片等&#xff0c;将光按不同波长分解成多个光谱通道&#xff0c…...

AI绘图:开源Stable Diffusion 3 ComfyUI下载安装方法

AI绘图&#xff1a;开源Stable Diffusion 3 ComfyUI下载安装方法 安装好后软件运行效果&#xff1a; 第一步&#xff1a;安装ComfyUI的最新版本 1、请从下面的地址下载压缩包&#xff0c;并解压缩到硬盘 https://github.com/comfyanonymous/ComfyUI/releases/download/late…...

一区向量加权算法优化INFO-CNN-SVM卷积神经网络结合支持向量机多特征分类预测

一区向量加权算法优化INFO-CNN-SVM卷积神经网络结合支持向量机多特征分类预测 目录 一区向量加权算法优化INFO-CNN-SVM卷积神经网络结合支持向量机多特征分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现INFO-CNN-SVM向量加权算法优化卷积神经网络结…...

AES笔记整理

文章目录 1. 简介2. 密钥加法层2. 字节代换层3. 行位移 - ShiftRows4. 列混淆 - MixColumn5. 其他5.1列混淆矩阵乘法运算5.2 AES密钥生成 6. 参考资料 以下内容为信息安全开发过程中&#xff0c;AES对称加密算法的笔记&#xff0c;大部分内容转载其他文章&#xff0c;若描述不清…...

Jmeter 性能压测-Tomcat连接数

1、影响性能的线程状态 ①BLOCKED&#xff0c;如果线程中有BLOCKED&#xff0c;就代表有阻塞情况&#xff0c;需要进行排查 ②TIMED_WAITING&#xff0c;如果线程中有TIMED_WAITING&#xff0c;就代表有等待的情况&#xff0c;要分情况来排查 系统线程在等待&#xff08;如果…...

基于Vue3的组件封装技巧分享

1、需求说明 需求背景&#xff1a;日常开发中&#xff0c;我们经常会使用一些UI组件库诸如and design vue、element plus等辅助开发&#xff0c;提升效率。有时我们需要进行个性化封装&#xff0c;以满足在项目中大量使用的需求。 错误示范&#xff1a;基于a-modal封装一个自定…...

python中r代表什么意思

r在python中表示什么意思&#xff1f; “r”是“raw”的简写。去查单词&#xff0c;意思是“未加工的&#xff0c;原料”。因此&#xff0c;不难想象&#xff0c;在python字符串前面&#xff0c;表示“按原样输出字符串”&#xff0c;也就是说字符串里的元素&#xff0c;原来什…...

《量子计算对人工智能发展的深远影响》

在科技发展的浪潮中&#xff0c;量子计算与人工智能无疑是两颗璀璨的明星&#xff0c;二者的融合正引领着一场深刻的科技变革. 量子计算的独特之处在于其利用量子比特的叠加和纠缠特性&#xff0c;能够实现并行计算&#xff0c;从而在处理复杂问题时展现出超越传统计算的巨大潜…...

12.2【JAVA EXP4]next.js的各种问题,DEBUG,前端补强,前后端交互,springSecurity ,java 配置,h2数据库

在服务器组件中使用了 useState 这样的 React Hook。useState 只能在客户端组件中使用&#xff0c;而不能在服务器组件中使用。Next.js 的新架构&#xff08;App Router&#xff09;中&#xff0c;默认情况下&#xff0c;页面和布局组件是服务器组件&#xff0c;因此不能直接使…...

docker启动一个helloworld(公司内网服务器)

这里写目录标题 容易遇到的问题&#xff1a;1、docker连接问题 我来介绍几种启动 Docker Hello World 的方法&#xff1a; 最简单的方式&#xff1a; docker run hello-world这会自动下载并运行官方的 hello-world 镜像。 使用 Nginx 作为 Hello World&#xff1a; docker…...

使用 Netty 实现 RPC 通信框架

使用 Netty 实现 RPC 通信框架 远程过程调用&#xff08;RPC&#xff0c;Remote Procedure Call&#xff09; 是分布式系统中非常重要的通信机制。它允许客户端调用远程服务器上的方法&#xff0c;就像调用本地方法一样。RPC 的核心在于屏蔽底层通信细节&#xff0c;使开发者关…...

【机器学习06--贝叶斯分类器】

文章目录 基础理解01 贝叶斯决策论02 极大似然估计03 朴素贝叶斯分类器04 半朴素贝叶斯分类器05 贝叶斯网06 EM算法 补充修正1. 贝叶斯定理与分类的基本概念2. 贝叶斯决策论3. 极大似然估计4. 朴素贝叶斯分类器5. 半朴素贝叶斯分类器6. 贝叶斯网7. EM算法 面试常考 基础理解 本…...

创建vue3项目步骤以及安装第三方插件步骤【保姆级教程】

&#x1f399;座右铭&#xff1a;得之坦然&#xff0c;失之淡然。 &#x1f48e;擅长领域&#xff1a;前端 是的&#xff0c;我需要您的&#xff1a; &#x1f9e1;点赞❤️关注&#x1f499;收藏&#x1f49b; 是我持续下去的动力&#xff01; 目录 一. 简单汇总一下创建…...

[146 LRU缓存](https://leetcode.cn/problems/lru-cache/)

分析 维护一个双向链表保存缓存中的元素。 如果元素超过容量阈值&#xff0c;则删除最久未使用的元素。为了实现这个功能&#xff0c;将get(), put()方法获取的元素添加到链表首部。 为了在O(1)时间复杂度执行get()方法&#xff0c;再新建一个映射表&#xff0c;缓存key与链表…...

【Java Nio Netty】基于TCP的简单Netty自定义协议实现(万字,全篇例子)

基于TCP的简单Netty自定义协议实现&#xff08;万字&#xff0c;全篇例子&#xff09; 前言 有一阵子没写博客了&#xff0c;最近在学习Netty写一个实时聊天软件&#xff0c;一个高性能异步事件驱动的网络应用框架&#xff0c;我们常用的SpringBoot一般基于Http协议&#xff0…...

【JavaWeb后端学习笔记】Redis常用命令以及Java客户端操作Redis

redis 1、redis安装与启动服务2、redis数据类型3、redis常用命令3.1 字符串String3.2 哈希Hash3.3 列表List3.4 集合Set&#xff08;无序&#xff09;3.5 有序集合zset3.6 通用命令 4、使用Java操作Redis4.1 环境准备4.2 Java操作字符串String4.3 Java操作哈希Hash4.4 Java操作…...

pdb调试器详解

文章目录 1. 启动 pdb 调试器1.1 在代码中插入断点1.2 使用命令行直接调试脚本 2. 常用调试命令2.1 基本命令2.2 高级命令2.3 断点操作 3. 调试过程示例4. 调试技巧4.1 条件断点4.2 自动启用调试4.2.1 运行程序时指定 -m pdb4.2.2在代码中启用 pdb.post_mortem4.2.3 使用 sys.e…...

项目15:简易扫雷--- 《跟着小王学Python·新手》

项目15&#xff1a;简易扫雷 — 《跟着小王学Python新手》 《跟着小王学Python》 是一套精心设计的Python学习教程&#xff0c;适合各个层次的学习者。本教程从基础语法入手&#xff0c;逐步深入到高级应用&#xff0c;以实例驱动的方式&#xff0c;帮助学习者逐步掌握Python的…...

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

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

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

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

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...