【机器学习(七)】分类和回归任务-K-近邻 (KNN)算法-Sentosa_DSML社区版

文章目录

  • 一、算法概念
  • 二、算法原理
    • (一)K值选择
    • (二)距离度量
      • 1、欧式距离
      • 2、曼哈顿距离
      • 3、闵可夫斯基距离
    • (三)决策规则
      • 1、分类决策规则
      • 2、回归决策规则
  • 三、算法优缺点
      • 优点
      • 缺点
  • 四、KNN分类任务实现对比
    • (一)数据加载和样本分区
      • 1、Python代码
      • 2、Sentosa_DSML社区版
    • (二)训练模型
      • 1、Python代码
      • 2、Sentosa_DSML社区版
    • (三)模型评估和模型可视化
      • 1、Python代码
      • 2、Sentosa_DSML社区版
  • 五、KNN回归任务实现对比
    • (一)数据加载和样本分区
      • 1、Python代码
      • 2、Sentosa_DSML社区版
    • (二)训练模型
      • 1、Python代码
      • 2、Sentosa_DSML社区版
    • (三)模型评估和模型可视化
      • 1、Python代码
      • 2、Sentosa_DSML社区版
  • 六、总结

一、算法概念

什么是KNN?
  K-近邻 (KNN) 是一种监督算法。KNN 背后的基本思想是在训练空间中找到距离新数据点最近的 K 个数据点,然后根据 k 个最近数据点中多数类别对新数据点进行分类,类似于“物以类聚”的思想,将一个样本的类别归于它的邻近样本。K-近邻算法是一种惰性学习模型(lazy learning),也称为基于实例学习模型,这与勤奋学习模型(eager learning)不一样。
  勤奋学习模型在训练模型的时候会很耗资源,它会根据训练数据生成一个模型,在预测阶段直接带入数据就可以生成预测的数据,所以在预测阶段几乎不消耗资源。
  惰性学习模型在训练模型的时候不会估计由模型生成的参数,他可以即刻预测,但是会消耗较多资源,例如KNN模型,要预测一个实例,需要求出与所有实例之间的距离。
K-近邻算法是一种非参数模型,参数模型使用固定的数量的参数或者系数去定义模型,非参数模型并不意味着不需要参数,而是参数的数量不确定,它可能会随着训练实例数量的增加而增加,当数据量大的时候,看不出解释变量和响应变量之间的关系的时候,使用非参数模型就会有很大的优势,而如果数据量少,可以观察到两者之间的关系的,使用相应的模型就会有很大的优势。
  存在一个样本集,也就是训练集,每一个数据都有标签,也就是我们知道样本中每个数据与所属分类的关系,输入没有标签的新数据后,新数据的每个特征会和样本集中的所有数据对应的特征进行比较,算出新数据与样本集其他数据的欧几里得距离,这里需要给出K值,这里会选择与新数据距离最近的K个数据,其中出现次数最多的分类就是新数据的分类,一般k不会大于20。
  KNN在做回归和分类的主要区别,在于最后做预测时候的决策不同。在分类预测时,一般采用多数表决法。在做回归预测时,一般使用平均值法。
多数表决法:分类时,哪些样本离我的目标样本比较近,即目标样本离哪个分类的样本更接近。
  平均值法: 预测一个样本的平均身高,观察目标样本周围的其他样本的平均身高,我们认为平均身高是目标样本的身高。
  这里就运用了KNN的思想。KNN方法既可以做分类,也可以做回归,这点和决策树等算法相同。
在这里插入图片描述
  由上图KNN分类算法可以发现,数据分为蓝色和绿色两个类别,当有一个新的数据点(红色)出现,并且 K = 5时,可以看到红色点有 3 个绿色近邻样本和 2个蓝色近邻样本,这说明蓝点将被归类为绿色类,因为多数投票为 3。同样,当 K 值变化时,圆内的近邻样本数量会增加,新的数据点被归类到其对应的多数投票类中。

在这里插入图片描述
  在 KNN 回归中,因变量是连续的,分布在整个特征空间中。当有新的数据点红色点出现时,会使用某种距离度量(如欧几里得距离)找到最接近的新数据点的 K 个近邻样本。找到这些邻居后,新数据点的预测值通过计算这些邻居的因变量值的平均值来确定。
例如,假设我们想预测学生的考试成绩,而已知的特征是学习时长。我们已经有了许多学生的学习时长和对应的考试成绩数据。现在,针对一个新来的学生,我们知道他的学习时长,通过 KNN 回归,我们可以找到学习时长最接近的 K 个学生,然后将这 K 个学生的考试成绩取平均值,作为这个新学生的成绩预测。

二、算法原理

(一)K值选择

   K K K值的选择与样本分布有关,一般选择一个较小的 K K K值,可以通过交叉验证来选择一个比较优的 K K K值,默认值是5。如果数据是三维以下的,如果数据是三维或者三维以下的,可以通过可视化观察来调参。
  当 k = 1 k=1 k=1时的 k k k近邻算法称为最近邻算法,此时将点 X X X分配给特征空间中其最近邻的点的类。即: C n 1 n n ( X ) = Y ( 1 ) C_{n}^{1nn}(X)=Y_{(1)} Cn1nn(X)=Y(1)
   K K K值的选择会对 k k k近邻法的结果产生重大影响。若 K K K值较小,则相当于用较小的邻域中的训练样本进行预测,"学习"的偏差减小。
  只有与输入样本较近的训练样本才会对预测起作用,预测结果会对近邻的样本点非常敏感。
  若 k k k近邻的训练样本点刚好是噪声,则预测会出错。即: 值的减小意味着模型整体变复杂,易发生过拟合。
  优点:减少"学习"的偏差。
  缺点:增大"学习"的方差(即波动较大)。
  若 K K K值较大,则相当于用较大的邻域中的训练样本进行预测。
  这时输入样本较远的训练样本也会对预测起作用,使预测偏离预期的结果。 K K K值增大意味着模型整体变简单。
  优点:减少"学习"的方差(即波动较小)。
  缺点:增大"学习"的偏差。
  应用中, K K K值一般取一个较小的数值。通常采用交叉验证法来选取最优的 K K K值, K K K值的选择取决于数据集和问题。较小的 K K K值可能导致过度拟合,而较大的 K K K值可能导致欠拟合,可以尝试不同的 K K K值,以找到特定数据集的最佳值。

(二)距离度量

  距离度量是 KNN 算法中用来计算数据点之间相似性的重要组成部分,以下是几种常见的距离度量类型:

1、欧式距离

  欧式距离是 KNN 中最广泛使用的距离度量,表示两个数据点在欧几里得空间中的直线距离。
在这里插入图片描述

  计算公式如下:
d ( x , y ) = ∑ i = 1 n ( x i − y i ) 2 d(x,y)=\sqrt{\sum_{i=1}^n\left(x_i-y_i\right)^2} d(x,y)=i=1n(xiyi)2

2、曼哈顿距离

  曼哈顿距离(Manhattan Distance)是一种衡量两点之间距离的方式,两个点之间的距离是沿着网格(即水平和垂直方向)的路径总和,而不是像欧几里得距离那样的直线距离。
在这里插入图片描述
  计算公式如下:

d ( x , y ) = ∑ i = 1 n ∣ x i − y i ∣ d(x,y)=\sum_{i=1}^n|x_i-y_i| d(x,y)=i=1nxiyi

3、闵可夫斯基距离

  闵可夫斯基距离是一个广义的距离度量,可以根据参数 𝑝的不同,生成多种常见的距离度量,如曼哈顿距离和欧几里得距离。计算方法是绝对差和的 p 次方根.例如:
  如果 p = 1,简化为曼哈顿距离,即绝对差的和。
  如果 p = 2,简化为欧几里得距离,即平方差的和的平方根。
  距离度量必须满足一些条件:
    非负性:任意两点之间的距离不能为负。
    同一性:点与自身的距离为零。
    对称性:两点之间的距离相同。
    三角不等式:两点之间的距离应小于或等于通过第三点的路径之和。
  计算公式如下所示:
d ( x , y ) = ( ∑ i = 1 n ∣ x i − y i ∣ p ) 1 p d(x,y)=\left(\sum_{i=1}^n|x_i-y_i|^p\right)^{\frac1p} d(x,y)=(i=1nxiyip)p1

(三)决策规则

1、分类决策规则

  KNN算法的分类决策通常基于多数表决原则,即在新样本的 K K K个最近邻中,哪个类别的样本数最多,则预测新样本属于该类别。此外,也可以根据样本与新数据点之间的距离远近进行加权投票,即离新样本越近的邻居样本权重越大,影响力也越大。分类的决策规则可以用经验风险最小化来解释,假设我们要最小化分类中的错误,即最小化0-1 损失函数。这个损失函数可以表示为:
L = 1 K ∑ x i ∈ N K ( X ) I ( y i ≠ c m ) = 1 − 1 K ∑ x i ∈ N K ( X ) I ( y i = c m ) L=\dfrac{1}{K}\sum_{{{x}}_i\in\mathcal{N}_K({{X}})}I({y}_i\neq c_m)=1-\dfrac{1}{K}\sum_{{{x}}_i\in\mathcal{N}_K({{X}})}I({y}_i=c_m) L=K1xiNK(X)I(yi=cm)=1K1xiNK(X)I(yi=cm)
  其中:
   ∙ \bullet X {{X} } X是新样本点。
   ∙ \bullet N k ( x ) \mathcal{N} _k( {{x} } ) Nk(x)是新样本 ∙ \bullet X {{X}} X的 K 个最近邻的集合。
   ∙ \bullet y i {y} _i yi是近邻 x i {{x}}_i xi 的实际标签。
   ∙ \bullet c m c_m cm是预测的类别,即我们希望找到的多数类别。
   ∙ \bullet I ( y i ≠ c m ) I( {y} _i\neq c_m) I(yi=cm)是指示函数,表示近邻 x i {{x}}_i xi的实际类别与 c m c_m cm是否相同。
  通过这个公式可以看到,损失函数 L L L表示的是分类错误的比例。为了最小化损失函数,我们需要找到一个类别 c m c_{m} cm使得近邻中属于该类别的样本数量最大。因此,损失函数最小化等价于多数表决:
c m = arg ⁡ max ⁡ c m ∑ x i ∈ N k ( X ) I ( y i = c m ) c_m=\arg\max_{c_m}\sum_{{{x}}_i\in\mathcal{N}_k({{X}})}I({y}_i=c_m) cm=argcmmaxxiNk(X)I(yi=cm)

2、回归决策规则

  对于 KNN 回归,决策规则与分类类似,但在回归问题中,输出是连续值,而不是类别。因此,KNN 回归通常采用均值回归,即新样本的预测值是 K 个最近邻样本的目标值的均值。同样,我们也可以基于样本与新样本点之间的距离进行加权投票,距离越近的邻居对预测的影响力越大。
  在回归问题中,我们依然可以使用经验风险最小化的思想,回归中的损失函数一般是均方误差(MSE)。回归问题的损失函数表示为:
L = 1 K ∑ x i ∈ N K ( X ) ( y i − y ^ ) 2 L=\dfrac{1}{K}\sum_{{{x}}_i\in\mathcal{N}_K({{X}})}({y}_i-\hat{y})^2 L=K1xiNK(X)(yiy^)2
  其中:
   ∙ \bullet y ^ \hat{y} y^表示新样本的预测值。
   ∙ \bullet y i {y} _i yi是近邻点 x i {{x}}_i xi的实际值。
  这个损失函数表示新样本X预测值与近邻点实际值之间平方误差的平均值。为了最小化均方误差,最优的预测值 y ^ \hat{y} y^应该是近邻样本实际值 y i {y}_i yi的平均值,即:
y ^ = 1 K ∑ x i ∈ N K ( X ) y i \hat{y}=\frac{1}{K}\sum_{{{x}}_i\in\mathcal{N}_K({{X}})}{y}_i y^=K1xiNK(X)yi
  因此,KNN 回归算法的预测值是近邻点的平均值,即均值回归。
  总结来说,KNN 算法的分类和回归决策规则虽然任务不同,但核心思想都是通过找到最近的K个邻居,然后根据这些邻居的属性 (类别或值) 进行多数表决或均值计算,从而做出预测。

三、算法优缺点

优点

  1、KNN 可用于分类和回归任务,适应性强。
无需训练:算法不需要训练阶段,直接使用数据进行预测,节省计算资源。
  2、由于依赖于邻居的多数投票,KNN 对噪声数据具有较强的抗干扰能力,不易受异常值影响。
  3、KNN 在小数据集上表现良好,不需要大量数据即可进行预测。
  4、不需要对数据做出特定假设,适合多种数据分布。
  5、算法直观易懂,便于实现和应用。

缺点

  1、正确选择 K 值很重要,影响模型的性能,但不同数据集的最佳 K 值不同。
  2、在类别不平衡的数据集中,KNN 可能偏向于多数类别。
  3、当特征维度很高时,KNN 的效果会下降,因为距离计算不精确,难以找到有意义的近邻。

四、KNN分类任务实现对比

(一)数据加载和样本分区

1、Python代码

# 导入相关包
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix
from sklearn.datasets import load_iris##在线导入	
#data = datasets.load_iris()# 本地导入
df = pd.read_csv("D:/sentosa_ML/Sentosa_DSML/mlServer/TestData/Iris.csv")
df.head()df["Species"].unique()
df.shape
encoder = LabelEncoder()
df["Species"] = encoder.fit_transform(df["Species"])# 将数据集划分为特征和标签
X = df.drop("Species", axis=1)  # 特征
y = df["Species"]  # 标签# 数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2,random_state=0)

2、Sentosa_DSML社区版

  首先,利用文本算子对数据集进行读入,
在这里插入图片描述
  其次,连接样本分区算子,划分测试集和训练集的比例为2:8
在这里插入图片描述
  然后接类型算子,设置Feature列和Label列
在这里插入图片描述

(二)训练模型

1、Python代码

# 初始化 KNN 分类器,K值设置为3
knn = KNeighborsClassifier(n_neighbors=3)# 训练模型
knn.fit(X_train, y_train)# 对新样本进行预测
X_new = pd.DataFrame([[5, 2.9, 1, 0.2]], columns=X.columns)
prediction = knn.predict(X_new)# print(f"Predicted target name: {encoder.inverse_transform(prediction)}")# 对测试集进行预测
y_pred = knn.predict(X_test)

2、Sentosa_DSML社区版

  连接KNN分类算子,这里我们将K值设置为3,点击应用并执行,
在这里插入图片描述
  执行结束后得到KNN模型
在这里插入图片描述

(三)模型评估和模型可视化

1、Python代码

# 评估模型
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred, average='weighted')
recall = recall_score(y_test, y_pred, average='weighted')
f1 = f1_score(y_test, y_pred, average='weighted')# 打印评估结果
print(f"KNN 模型的准确率: {accuracy:.2f}")
print(f"加权精度 (Weighted Precision): {precision:.2f}")
print(f"加权召回率 (Weighted Recall): {recall:.2f}")
print(f"F1 值 (Weighted F1 Score): {f1:.2f}")# 生成混淆矩阵
cm = confusion_matrix(y_test, y_pred)
plt.figure(figsize=(8, 6))
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=encoder.classes_, yticklabels=encoder.classes_)
plt.xlabel('Predicted')
plt.ylabel('Actual')
plt.title('Confusion Matrix')
plt.show()# 绘制特征分布图
plt.figure(figsize=(12, 8))
for i, column in enumerate(X.columns, 1):plt.subplot(2, 2, i)sns.boxplot(x=df['Species'], y=X[column])plt.title(f'{column} by Species')plt.tight_layout()
plt.show()

  可以绘制Iris数据集中各个特征在不同分类下的分布图,以帮助我们了解不同类别的鸢尾花(Species)在不同特征(如sepal_length, sepal_width等)上的分布情况,生成了4个箱线图,每个箱线图展示了一个特征在不同Species(花种)类别上的分布情况。
在这里插入图片描述

2、Sentosa_DSML社区版

  连接评估算子对模型进行评估
在这里插入图片描述
  得到训练集和测试集的各评估指标结果,如下所示:
在这里插入图片描述
在这里插入图片描述
  右击模型可以查看模型的模型信息,可以得到模型混淆矩阵、特征重要性等结果
在这里插入图片描述
在这里插入图片描述
  也可以连接二维箱线图,绘制Iris数据集中不同特征(sepal_length, sepal_width、petal_length、petal_width)在不同分类(Species)下的分布图
在这里插入图片描述
  执行后可以得到绘制结果,如下图所示:
在这里插入图片描述

五、KNN回归任务实现对比

(一)数据加载和样本分区

1、Python代码

# 导入相关库
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsRegressor
import matplotlib.pyplot as plt
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
import seaborn as sns# 读取 winequality 数据集
df = pd.read_csv("D:/sentosa_ML/Sentosa_DSML/mlServer/TestData/winequality.csv")# 检查数据集
print(df.head())
print(df.info())# 将数据集划分为特征和目标变量
X = df.drop("quality", axis=1)  # 特征
y = df["quality"]  # 标签(目标值)# 数据集拆分为训练集和测试集,训练集和测试集比例为8:2
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

2、Sentosa_DSML社区版

  首先,利用文本算子对数据集进行读取
在这里插入图片描述
  其次,连接样本样本分区算子划分训练集和测试集,训练集和测试集比例为8:2
在这里插入图片描述
  然后连接类型算子设置Label列和Feature列
在这里插入图片描述

(二)训练模型

1、Python代码

# 初始化 KNN 回归模型
knn_regressor = KNeighborsRegressor(n_neighbors=3)  # K值设置为3
# 训练模型
knn_regressor.fit(X_train, y_train)# 对测试集进行预测
y_pred = knn_regressor.predict(X_test)

2、Sentosa_DSML社区版

  连接KNN回归算子,设置模型超参数K值为3
在这里插入图片描述
  右键执行后得到KNN模型
在这里插入图片描述

(三)模型评估和模型可视化

1、Python代码

# 计算评估指标
r2 = r2_score(y_test, y_pred)
mae = mean_absolute_error(y_test, y_pred)
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)
mape = np.mean(np.abs((y_test - y_pred) / y_test)) * 100
smape = 100 / len(y_test) * np.sum(2 * np.abs(y_test - y_pred) / (np.abs(y_test) + np.abs(y_pred)))# 打印评估结果
print(f"R²: {r2:.4f}")
print(f"MAE: {mae:.4f}")
print(f"MSE: {mse:.4f}")
print(f"RMSE: {rmse:.4f}")
print(f"MAPE: {mape:.2f}%")
print(f"SMAPE: {smape:.2f}%")# 绘制实际值与预测值的对比图
plt.figure(figsize=(8, 6))
plt.scatter(y_test, y_pred, color="blue", alpha=0.6)
plt.plot([min(y_test), max(y_test)], [min(y_test), max(y_test)], 'r--')
plt.xlabel('Actual Quality')
plt.ylabel('Predicted Quality')
plt.title('Actual vs Predicted Wine Quality')
plt.show()# 计算残差
residuals = y_test - y_pred# 使用 Seaborn 并添加核密度估计 (KDE) 曲线
plt.figure(figsize=(8, 6))
sns.histplot(residuals, kde=True, bins=20)
plt.title('Residuals Histogram with KDE')
plt.xlabel('Residuals')
plt.ylabel('Frequency')
plt.grid(True)
plt.show()

2、Sentosa_DSML社区版

  连接评估算子,对模型进行评估
在这里插入图片描述
  得到训练集和测试集评估结果如下图所示:在这里插入图片描述
在这里插入图片描述
  右击可以查看模型信息,得到模型特征重要性图、实际值—残差值散点图和残差立方图等结果,如下所示:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

六、总结

  相比传统代码方式,利用Sentosa_DSML社区版完成机器学习算法的流程更加高效和自动化,传统方式需要手动编写大量代码来处理数据清洗、特征工程、模型训练与评估,而在Sentosa_DSML社区版中,这些步骤可以通过可视化界面、预构建模块和自动化流程来简化,有效的降低了技术门槛,非专业开发者也能通过拖拽和配置的方式开发应用,减少了对专业开发人员的依赖。
  Sentosa_DSML社区版提供了易于配置的算子流,减少了编写和调试代码的时间,并提升了模型开发和部署的效率,由于应用的结构更清晰,维护和更新变得更加容易,且平台通常会提供版本控制和更新功能,使得应用的持续改进更为便捷。

  为了非商业用途的科研学者、研究人员及开发者提供学习、交流及实践机器学习技术,推出了一款轻量化且完全免费的Sentosa_DSML社区版。以轻量化一键安装、平台免费使用、视频教学和社区论坛服务为主要特点,能够与其他数据科学家和机器学习爱好者交流心得,分享经验和解决问题。文章最后附上官网链接,感兴趣工具的可以直接下载使用

https://sentosa.znv.com/

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

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

相关文章

【CKA】二、节点管理-设置节点不可用

2、节点管理-设置节点不可用 1. 考题内容: 2. 答题思路: 先设置节点不可用,然后驱逐节点上的pod 这道题就两条命令,直接背熟就行。 也可以查看帮助 kubectl cordon -h kubectl drain -h 参数详情: –delete-empty…

【COSMO-SkyMed系列的4颗卫星主要用途】

COSMO-SkyMed系列的4颗卫星主要用于提供一个多用途的对地观测平台,服务于民间、公共机构、军事和商业领域。以下是这4颗卫星的主要用途: 民防与环境风险管理: 卫星的高分辨率雷达图像可用于监测自然灾害,如地震、洪水、滑坡等&am…

【计算机网络】网络层详解

文章目录 一、引言二、IP 基础知识1、IP 地址2、路由3、IP报文4、IP报文的分片与重组 三、IP 属于面向无连接型四、IP协议相关技术1、DNS2、ICMP3、NAT技术4、DHCP 一、引言 TCP/IP的心脏是网络层。这一层主要由 IP 和 ICMP 两个协议组成。网络层的主要作用是“实现终端节点之…

Redis进阶篇 - 缓存穿透、缓存击穿、缓存雪崩问题及其解决方案

文章目录 1 文章概述2 缓存穿透2.1 什么是缓存穿透?2.2 缓存穿透的解决方法2.2.1 做好参数校验2.2.2 缓存无效Key2.2.3 使用布隆过滤器2.2.4 接口限流 3 缓存击穿3.1 什么是缓存击穿?3.2 缓存击穿的解决方法3.2.1 调整热点数据过期时间3.2.2 热点数据预热…

Postgresql怎么查询数据库中所有的表,odoo17数据库最依赖表整理

今天遇到了一个需求,需要梳理odoo中数据库表的分类,所以想要知道怎么查询当前数据库中所有的表,特此记录. 一个简单的SQL语句: select * from pg_tables;得到的结果如下: 显然这个有点杂乱,我们换一个SQL语句: select tablename from pg_tables where schemanamepublic不过…

软件测试学习笔记丨Mock的价值与实战

本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/32331 一、Mock的价值与意义 1.1 简介 测试过程中,对于一些不容易构造或获取的对象,用一个虚拟的对象来替代它,达到相同的效果,这个虚拟的对象…

启动服务并登录MySQL9数据库

【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客 《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) Windows平台下安装与配置MyS…

Activiti 工作流大致了解

一、什么是 Activiti 简而言之&#xff0c;就是系统的流程图&#xff0c;如&#xff1a;请假审批流程、账单审批流程等。 二、mysql与pom配置 mysql要使用jdbc:mysql://localhost:3306/activiti?autoReconnecttrue pom文件要添加关键依赖 <!--activiti核心依赖--> &…

makefile和CMakeLists/C++包管理器

make 大家可能会很奇怪&#xff0c;都什么年代了&#xff0c;还学makefile&#xff0c;cmake都有些过时了&#xff0c;为什么还要再学这个呢&#xff1f; 我是这么看待这个问题的&#xff0c;cmake跨平台性还是很有有优势的&#xff0c;有着多年积累的底蕴&#xff0c;借助大模…

IDE 使用技巧与插件推荐全面指南

目录 目录 常用IDE概述 Visual Studio Visual Studio Code IntelliJ IDEA PyCharm Eclipse IDE 使用技巧 通用技巧 Visual Studio 专属技巧 Visual Studio Code 专属技巧 IntelliJ IDEA 专属技巧 插件推荐 Visual Studio 插件 Visual Studio Code 插件 IntelliJ…

STM32 实现 UDP 广播通信

目录 一、引言 二、准备工作 1.硬件准备 2.软件准备 三、LWIP 协议栈的配置与初始化 1.添加 LWIP 源文件 2.配置 LWIP 3.初始化 LWIP 四.创建 UDP 广播套接字 1.创建 UDP 控制块 2.绑定本地端口 五、设置 UDP 广播选项 1.设置广播地址 2.设置广播选项 六、发…

防反接电路设计

方案1 串联二极管&#xff0c; 优点&#xff1a;成本低、设计简单 缺点&#xff1a;损耗大&#xff0c;P ui 方案2 串联自恢复保险丝 当电源反接的时候&#xff0c;D4导通&#xff0c;F2超过跳闸带你留&#xff0c;就会断开&#xff0c;从而保护了后级电路 方案3 H桥电路…

[数据集][目标检测]电力场景防震锤缺陷检测数据集VOC+YOLO格式705张1类别

重要说明&#xff1a;防震锤缺陷图片太难找&#xff0c;数据集里面存在大量单一场景图片&#xff0c;请仔细查看图片预览谨慎下载&#xff0c;此外数据集均为小目标检测&#xff0c;如果训练map偏低属于正常现象 数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径…

COMP 6714-Info Retrieval and Web Search笔记week2

tokenizer&#xff1a;分词器 右半部分&#xff1a;倒排索引 Westlaw AND&#xff08;&&#xff09;&#xff1a; 要搜索必须同时出现在文档中的两个或多个词语&#xff0c;请使用 AND&#xff08;&&#xff09;。例如&#xff0c;输入 narcotics & warrant&#x…

net core mvc 数据绑定 《2》 bind fromquery,FromRoute,fromform等,自定义模型绑定器

mvc core 模型绑定 控制绑定名称 》》》Bind 属性可以用来指定 模型应该 绑定的前缀 public class MyController : Controller {[HttpPost]public ActionResult Create([Bind(Prefix "MyModel")] Ilist<MyModel> model){// 模型绑定将尝试从请求的表单数据中…

(二)大模型调用

一、基本概念 1.1、Prompt 大模型的所有输入&#xff0c;即&#xff0c;我们每一次访问大模型的输入为一个 Prompt&#xff0c; 而大模型给我们的返回结果则被称为 Completion。 1.2、Temperature LLM 生成是具有随机性的&#xff0c;在模型的顶层通过选取不同预测概率的预测结…

白内障分类数据集 3.4G

用于白内障检测的白内障和正常眼睛图像分类数据集。 名称 白内障分类数据集 规模 数据量&#xff1a;3.4GB图像数量&#xff1a;未明确提供&#xff0c;但通常这类数据集包含数千张图像。 类别 正常眼&#xff1a;无白内障的眼睛早期白内障&#xff1a;轻度白内障的眼睛中…

DC00024基于ssm实验室预约管理系统java web项目web教师预约jsp预约管理系统

1、项目功能演示 DC00024基于web实验室预约管理系统ssm教室预约实验室预约管理系统java web项目MySQL 2、项目功能描述 基于ssm实验室预约管理系统分为用户和系统管理员两个角色。 2.1 系统管理员 1、系统登录 2、用户管理&#xff1a;修改个人信息、修改个人密码、教师管理…

MySql Explain优化命令使用

MySql Explain优化命令使用 truncate table student // 自增id 从 0 开始 delete from student // 自增id 会保留 &#xff0c; 108 区别&#xff1a; 1&#xff1a;自增id 2&#xff1a;delete 可以恢复 truncate 无法恢复 前言 EXPLAIN 是一个用于获取 SQL 语句执行计划的…

nacos client 本地缓存问题

问题&#xff1a; nacos 更新了配置文件&#xff0c;更新了以后重新启动还是旧的配置信息。 NACOS版本&#xff1a; 1.1.4 解决&#xff1a; 配置缓存 Nacos Client 会将从 Nacos 服务器获取的配置信息缓存在本地。这样&#xff0c;即使 Nacos 服务器不可用&#xff0c;客…