机器学习基础知识面经(个人记录)

朴素贝叶斯

特征为理想状态下的独立同分布,作为机器学习的重要基石和工具

由贝叶斯公式推导而来P(A \mid B)=\frac{P(B \mid A) \times P(A)}{P(B)}

P(A \mid B)是后验概率:在B发生的条件下A发生的概率。

P(B \mid A)是似然概率: 在  \mathrm{A}发生的条件下 \mathrm{B}  发生的概率。

P(A) 是先验概率: A发生的概率,而不考虑  \mathrm{B}的影响。

P(B)是边缘概率: B发生的概率, 而不考虑A的影响。

这种不考虑相互之间的影响,并不是说AB没有任何关系,只是说客观条件下发生的A和B的概率分别是多少

贝叶斯定理的直观理解

假设A代表某种特定情况或假设,比如某人患有一种疾病,而B代表一个相关观测或数据,比如一个医学检测的结果。贝叶斯定理允许我们使用检测结果来更新我们对该人患病概率的估计。

先验摡率  P(A) :在没有看到检测结果之前,我们对疾病的概率评估。

似然摡率 P(B \mid A) :如果该人确实患病,得到当前检测结果的概率。

边缘摡率  P(B) :任何情况下得到这个检测结果的总概率。

后验摡率  P(A \mid B) : 在检测结果呈阳性后,该人实际患病的概率。

朴素贝叶斯在贝叶斯定理基础上:

  • 特征独立性假设:朴素贝叶斯分类器假设所有的特征在给定类别的条件下都是相互独立的。因此,一个实例的类别概率可以通过将其所有单独特征的概率相乘得到。

  • 模型训练与预测:在训练阶段,算法将通过训练数据学习每个类别的先验概率(即每个类别在数据中出现的频率)和每个特征在给定类别下的概率。在预测阶段,算法利用这些学习到的概率和贝叶斯定理来计算给定实例属于每个类别的概率,最后将实例分类到具有最高后验概率的类别。

应用场景:

朴素贝叶斯因其简单性、速度快和适应性强,在文本分类(如垃圾邮件识别、情感分析)、医疗诊断、用户行为预测等多个领域都有广泛的应用。尽管“朴素”的独立性假设很少在实际数据中完全成立,但在实践中,朴素贝叶斯仍然能够提供强大的基准性能。

  朴素贝叶斯的优点:

  对小规模的数据表现很好,适合多分类任务,适合增量式训练。

  缺点

  对输入数据的表达形式很敏感。

决策树

举个栗子:

假设我们有一个数据集,我们想根据天气条件来决定是否进行野餐。

我们的数据集包含以下特征:

  1. 天气(晴朗、多云、下雨)
  2. 温度(热、温暖、凉爽)
  3. 湿度(高、正常)
  4. 风力(强、弱)

目标变量是决定是否进行野餐(是、否)。

假设我们有以下训练数据:

接下来,我们根据天气的不同值(晴朗、多云、下雨)分三个分支:

  1. 如果天气是晴朗,我们进一步观察数据,发现当风力是弱时,我们通常会选择进行野餐,但如果风力强,则不去。因此,在“晴朗”分支下,我们创建一个基于“风力”的决策节点。

  2. 如果天气是多云,我们观察到无论其他条件如何,结果似乎总是“是”,所以这个分支直接结束在一个叶节点上,表示决定“进行野餐”。

  3. 如果天气是下雨,数据显示我们通常不去野餐,所以这个分支也直接结束在一个叶节点上,表示决定“不进行野餐”。

最终,我们得到一个决策树,其中包括决策点(天气和风力)和决策结果(是否进行野餐)。在实际应用中,当我们有一个新的天气预报时,我们可以根据这个决策树来决定是否安排野餐。

决策树的工作原理:

  1. 节点分裂:从数据集的根部开始,选择最佳特征来分割数据,以便于按照某种标准优化目标函数(如信息增益、增益比率或基尼不纯度)。这个过程将重复进行,每一步都选择最佳特征来进一步将数据子集分割成更小的子集。
  2. 树的构建:通过重复分裂过程,决策树将不断生长,直到满足某些停止条件,例如树达到最大深度、节点下的样本数少于最小样本数、或者如果进一步分割不能增加信息增益。
  3. 剪枝:为了防止过拟合,决策树的生长可能会通过剪枝过程被停止,其中一些子树会被替换为叶节点。剪枝可以在树完全生长后进行(后剪枝),也可以在树构建过程中进行(预剪枝)。

决策树的主要优点:

  1. 直观性:决策树的结果很容易理解和解释,可以可视化展示。
  2. 无需数据预处理:决策树通常不需要数据归一化,也不需要处理缺失值。
  3. 适用性广:可以处理数值型和类别型数据,也适用于多类别分类。

决策树的不足:

  1. 过拟合:决策树很容易过拟合,尤其是当树很深时,它可能会学习到数据中的噪声。可以通过设置树深度限制、要求一个节点包含的最小样本数或剪枝等方法来缓解过拟合。
  2. 稳定性:决策树对数据中的小变动可能很敏感,这可能导致生成完全不同的树。这个问题可以通过集成方法,如随机森林,来缓解。

Logistics回归和线性回归跳过

KNN算法

假设我们有一个简化的情况:我们需要根据电影的“打斗场景数”和“接吻场景数”来判断电影是动作片还是爱情片。

假设我们的训练数据集如下:

现在,假设我们有一个新电影(未知类别)的数据如下:

首先,我们需要决定如何测量距离。在这个例子中,我们可以使用欧几里得距离。对于电影1,距离会是:

\text { distence}=\sqrt{(7-10)^{2}+(3-1)^{2}}=\sqrt{9+4}=\sqrt{13}

我们对每部电影重复这个过程,找出与未知电影最近的三部电影。假设它们是电影1、电影2和电影3(这只是一个例子,实际结果取决于计算出的实际距离)。

接下来,我们看这三部最近的电影分别属于哪些类别。假设电影1和电影2是动作片,电影3是爱情片。

因为在最近的三部电影中,有两部是动作片,一部是爱情片,所以根据k-NN算法,我们会预测未知电影也是动作片。

我们要使用k-NN算法来预测这部未知电影的类别。我们选择 k = 3,意味着我们将查看距离未知电影最近的三部电影。

  1. 首先,我们需要决定如何测量距离。在这个例子中,我们可以使用欧几里得距离。对于电影1,距离会是:

KNN即最近邻算法,其主要过程为:

  1. 计算训练样本和测试样本中每个样本点的距离(常见的距离度量有欧式距离,马氏距离等);

  2. 对上面所有的距离值进行排序;

  3. 选前k个最小距离的样本;

  4. 根据这k个样本的标签进行投票,得到最后的分类类别;

  如何选择一个最佳的K值,这取决于数据。一般情况下,在分类时较大的K值能够减小噪声的影响。但会使类别之间的界限变得模糊。一个较好的K值可通过各种启发式技术来获取,比如,交叉验证。另外噪声和非相关性特征向量的存在会使K近邻算法的准确性减小。

  近邻算法具有较强的一致性结果。随着数据趋于无限,算法保证错误率不会超过贝叶斯算法错误率的两倍。对于一些好的K值,K近邻保证错误率不会超过贝叶斯理论误差率。

  KNN算法的优点:

  1. 思想简单,理论成熟,既可以用来做分类也可以用来做回归;

  2. 可用于非线性分类;

  3. 训练时间复杂度为O(n);

  4. 准确度高,对数据没有假设,对outlier不敏感;

  缺点:

  1. 计算量大;

  2. 样本不平衡问题(即有些类别的样本数量很多,而其它样本的数量很少);

  3. 需要大量的内存;

SVM

SVM就是简单来说就是分割高维平面来进行分类:

举个栗子来进行说明:

1. 最大边距超平面:

在二维空间中,一个超平面是一条直线,定义为w \cdot x+b=0,其中:

  • ww 是法向量,决定了超平面的方向。
  • xx 是任意点在平面上的位置。
  • bb 是位移项,决定了超平面与原点的距离。

对于二分类问题,我们的目标是找到一个超平面,使得所有正样本(比如类别 +1)都满足 w \cdot x+b \leq -1,所有负样本(比如类别 -1)都满足 w \cdot x+b \leq-1

两个边界(对正样本和负样本)分别为:

  • 正样本边界:w \cdot x+b=1
  • 负样本边界:w \cdot x+b=-1

这两个边界之间的距离叫做“边距”,可以计算为:

边距=\frac{2}{\|w\|}

在SVM中,我们的目标是最大化这个边距,从而创建最优的分割超平面。

2. 优化问题:

最大化边距 \frac{2}{\|w\|}​ 等价于最小化 \frac{\|w\|^{2}}{2}​。因此,我们可以写出以下优化问题:

\min _{w, b} \frac{1}{2}\|w\|^{2}

受到以下约束条件:

y_{i}\left(w \cdot x_{i}+b\right) \geq 1, \forall i

这里,y_{i}​ 是样本x_{i}的类别标签,取值为+1或-1。

3. 拉格朗日乘数法:

为了解决这个约束优化问题,我们使用拉格朗日乘数法将原问题转换为拉格朗日对偶问题,使得原问题和对偶问题达到同样的最小值。拉格朗日函数是:

L(w, b, \alpha)=\frac{1}{2}\|w\|^{2}-\sum_{i=1}^{n} \alpha_{i}\left[y_{i}\left(w \cdot x_{i}+b\right)-1\right]

其中,\alpha_{i}是拉格朗日乘数,对每一个数据点x_{i}都有一个对应的 \alpha_{i}

4. 对偶问题:

通过对拉格朗日函数L(w, b, \alpha) 关于 wb的偏导数等于0的条件,我们可以找到最优值 wb 的表达式,并将它们代回拉格朗日函数,这将转换成只关于 0 的问题,这就是所谓的对偶问题。

最终,对偶问题可以写成:

\max _{\alpha} \sum_{i=1}^{n} \alpha_{i}-\frac{1}{2} \sum_{i, j=1}^{n} \alpha_{i} \alpha_{j} y_{i} y_{j} x_{i} \cdot x_{j}

受到约束:

\begin{array}{l} \alpha_{i} \geq 0, \forall i \\ \sum_{i=1}^{n} \alpha_{i} y_{i}=0 \end{array}

解决这个对偶问题将给出所有拉格朗日乘数\alpha_{i}的最优值。最优的 w可以通过已解决的 \alpha_{i}计算

  SVM算法优点:

  可用于线性/非线性分类,也可以用于回归;

  低泛化误差;

  容易解释;

  计算复杂度较低;

  缺点:

  对参数和核函数的选择比较敏感;

  原始的SVM只比较擅长处理二分类问题;

Boosting

Boosting是一种强大的集成学习策略,它基于这样一个原则:将多个弱学习器(通常指那些只比随机猜测略好的模型,如小决策树)组合起来,形成一个强学习器(即性能非常好的模型)。这个过程是通过迭代地训练弱学习器来完成的,每一轮的训练都侧重于之前被模型误分类的样本,从而使模型能够学习到数据的不同方面。

工作原理:

  1. 初始化权重:首先,对训练数据中的每个样本分配一个初始权重。在第一轮中,通常给所有样本相同的权重,比如 1/N,其中 N 是样本的数量。

  2. 迭代训练:在每一轮中,训练一个弱学习器,通常是决策树。该学习器是根据当前的数据权重分布进行训练的。

  3. 权重更新:一旦训练了一个弱学习器,就根据它的错误率来更新训练样本的权重:正确分类的样本权重降低,而错误分类的样本权重增加。这就意味着在下一轮中,新的弱学习器将更加关注那些之前被错误分类的样本。

  4. 模型组合:每个弱学习器会根据其性能(通常是它的错误率或损失)被赋予一个权重。最终的模型是所有这些弱学习器的加权组合,其中表现较好的模型会有更大的权重。

特点和优势:

  • 性能:Boosting通常可以显著提高学习算法的性能,特别是对于复杂的任务,它能够减少偏差和方差,是一种有效的偏差-方差权衡策略。

  • 灵活性:它可以与各种类型的学习算法结合使用,不仅限于决策树。

  • 适应性:通过逐步地“学习”数据的不同方面(特别是通过更加关注那些难以正确分类的样本),Boosting算法可以适应复杂的数据结构。

著名的Boosting算法:

  • AdaBoost (Adaptive Boosting):最著名的Boosting算法之一,根据之前弱学习器的错误率来调整样本权重和学习器权重。

  • Gradient Boosting:另一种流行的Boosting方法,通过关注前一个模型的残差(即错误)来训练后续模型。

  • XGBoost、LightGBM、CatBoost:这些都是基于Gradient Boosting的高性能算法,广泛应用于数据科学竞赛和工业应用中,因其出色的速度和性能而闻名。

Boosting方法特别适合于处理偏差较大的情况,即那些在训练数据上欠拟合的情况。通过聚焦于难以正确分类的样本,Boosting能够创建一个更加准确和鲁棒的模型。

k-means自监督聚类

1. 初始化:

  • 选择 k 个随机点作为簇中心(质心)。这些可以是随机选择的数据点,或者完全随机的位置。
  • k 的选择依赖于数据及你希望识别的簇的数量,通常需要通过多次实验或其他方法(如肘部法则)来确定。

2. 分配步骤:

  • 对于数据集中的每一个点,计算它与各个簇中心的距离,并将它分配到最近的簇中心所代表的簇。
  • 最常用的距离度量是欧几里得距离,但也可以根据问题的特定需求选择其他类型的距离。

3. 更新步骤:

  • 一旦所有的点都被分配到某个簇,每个簇的中心就会更新为该簇所有点的均值。这意味着簇中心将移动到它所有成员的平均位置。

4. 迭代:

  • 重复分配和更新步骤,直到满足停止条件,例如:
    • 簇中心的变化小于某个阈值;
    • 达到预定的迭代次数;
    • 数据点的簇分配不再改变。

   k-means算法的优点:

  (1)k-means算法是解决聚类问题的一种经典算法,算法简单、快速。

  (2)对处理大数据集,该算法是相对可伸缩的和高效率的,因为它的复杂度大约是O(nkt),其中n是所有对象的数目,k是簇的数目,t是迭代的次数。通常k<<n。这个算法通常局部收敛。

  (3)算法尝试找出使平方误差函数值最小的k个划分。当簇是密集的、球状或团状的,且簇与簇之间区别明显时,聚类效果较好。

   缺点:

  (1)k-平均方法只有在簇的平均值被定义的情况下才能使用,且对有些分类属性的数据不适合。

  (2)要求用户必须事先给出要生成的簇的数目k。

  (3)对初值敏感,对于不同的初始值,可能会导致不同的聚类结果。

  (4)不适合于发现非凸面形状的簇,或者大小差别很大的簇。

  (5)对于"噪声"和孤立点数据敏感,少量的该类数据能够对平均值产生极大影响。

推荐系统

协同滤波(Collaborative Filtering, CF)是推荐系统中常用的一种方法,它主要基于用户之间或物品之间的相似性来生成推荐。协同滤波的基本假设是,如果用户 A 在过去喜欢了某些物品,而用户 B 在不同的物品集上显示出与用户 A 相似的喜好,则用户 B 可能也会喜欢用户 A 喜欢的那些未评价的物品。

协同滤波通常分为两大类:用户基于的协同滤波(User-Based Collaborative Filtering)和物品基于的协同滤波(Item-Based Collaborative Filtering)。

用户基于的协同滤波:

  1. 相似性计算:首先计算用户之间的相似度,通常基于用户的评分历史,使用诸如皮尔逊相关系数、余弦相似性等度量方法。

  2. 找到邻居:对于一个给定的用户,找出与他最相似的其他用户(即“邻居”)。

  3. 生成推荐:根据这些邻居的评分和相似度,预测目标用户对未评分物品的可能喜好,并提出推荐。

物品基于的协同滤波:

  1. 相似性计算:计算物品之间的相似度,这同样通常基于所有用户对这些物品的评分。

  2. 找到相似物品:对于用户已评分的每个物品,找出与之最相似的其他物品。

  3. 生成推荐:基于用户的现有评分以及相应物品的相似物品,预测用户对未知物品的喜好度,并据此提出推荐。

优点与限制:

  • 优点

    • 直观易懂,基于实际用户行为而非内容属性,因此可以跨越不同类型的物品推荐。
    • 能够发现和推荐给用户意外的新内容,从而增加用户的满意度和探索性。
  • 限制

    • 冷启动问题:对于新用户或新物品缺乏足够的评分数据,协同滤波方法可能难以生成有效推荐。
    • 数据稀疏性:在用户-物品评分矩阵中,评分项通常是非常稀疏的,这可能影响推荐质量。
    • 可扩展性:随着用户和物品数量的增长,计算相似度和生成推荐的计算成本会显著增加。

Apriori

 Apriori是关联分析中比较早的一种方法,主要用来挖掘那些频繁项集合。其思想是:

  1. 如果一个项目集合不是频繁集合,那么任何包含它的项目集合也一定不是频繁集合;

  2. 如果一个项目集合是频繁集合,那么它的任何非空子集也是频繁集合;

  Aprioir需要扫描项目表多遍,从一个项目开始扫描,舍去掉那些不是频繁的项目,得到的集合称为L,然后对L中的每个元素进行自组合,生成比上次扫描多一个项目的集合,该集合称为C,接着又扫描去掉那些非频繁的项目,重复…

假设我们有以下交易记录,每个交易记录包含一些商品(项目):

  • 交易1: {面包, 牛奶}
  • 交易2: {面包, 尿布, 啤酒}
  • 交易3: {牛奶, 尿布, 啤酒, 可乐}
  • 交易4: {面包, 牛奶, 尿布}
  • 交易5: {面包, 牛奶, 尿布, 啤酒}
  • 交易6: {牛奶, 啤酒}

设最小支持度阈值为50%(即项集需要在至少3个交易中出现才认为是频繁的)。

步骤 1: 生成1-项集合并计算支持度

首先,列出所有单个项目的集合(1-项集),并计算每个集合在所有交易中出现的频率(支持度):

  • {面包}: 4/6
  • {牛奶}: 5/6
  • {尿布}: 4/6
  • {啤酒}: 4/6
  • {可乐}: 1/6

只有{可乐}的支持度低于50%,所以我们将其舍去。

步骤 2: 生成2-项集合并计算支持度

接下来,对剩下的频繁1-项集进行自组合,生成所有可能的2-项集:

  • {面包, 牛奶}: 3/6
  • {面包, 尿布}: 3/6
  • {面包, 啤酒}: 2/6
  • {牛奶, 尿布}: 3/6
  • {牛奶, 啤酒}: 3/6
  • {尿布, 啤酒}: 3/6

在这里,{面包, 啤酒}的支持度低于50%,因此被舍去。

步骤 3: 生成3-项集合并计算支持度

然后,我们用剩下的频繁2-项集生成3-项集,并计算它们的支持度:

  • {面包, 牛奶, 尿布}: 2/6
  • {面包, 牛奶, 啤酒}: 1/6
  • {面包, 尿布, 啤酒}: 1/6
  • {牛奶, 尿布, 啤酒}: 2/6

所有这些3-项集的支持度都低于50%,因此它们都被舍去。

结果

最终,我们发现频繁项集为:

  • 频繁1-项集:{面包}, {牛奶}, {尿布}, {啤酒}
  • 频繁2-项集:{面包, 牛奶}, {面包, 尿布}, {牛奶, 尿布}, {牛奶, 啤酒}, {尿布, 啤酒}

没有频繁的3-项集。

通过Apriori算法,我们不仅发现了频繁出现的单个项目,还发现了经常一起出现的项目组合。这对于如超市货架布局、交叉销售策略等方面的决策制定是非常有用的。

随机森林

随机森林的工作原理包括以下几个步骤:

  1. 自助采样(Bootstrapping):对原始数据集进行多次重采样以生成多个不同的训练数据集。每次采样都是随机的,并允许重复选择同一数据点(即每个训练集可能包含重复的数据点,而一些原始数据点可能被遗漏)。

  2. 构建决策树:对每个新的训练数据集,构建一个决策树。在构建这些树的过程中,每次分割时选择最佳属性的过程中引入随机性:通常是从随机选取的属性子集中选择最佳属性,而不是考虑所有可能的属性。这增加了森林的多样性。

  3. 预测和决策

    • 分类任务:森林中的每棵树对样本进行分类,最后通过“多数投票”来确定最终类别。即,被森林中大多数树选中的类别成为最终预测结果。
    • 回归任务:每棵树都会给出一个预测结果,最终输出的是所有树预测结果的平均值。

假设我们有一个小数据集,目标是根据天气条件预测是否适合进行野餐。

示例数据集:

假设我们的数据集如下,包含四个特征:温度、天气、风速和湿度,以及一个标签:是否野餐。

步骤 1: 自助采样

对原始数据进行自助采样(Bootstrap sampling),生成多个训练子集。假设我们生成了3个这样的子集:

  • 子集1: {第1, 1, 3, 5行}
  • 子集2: {第1, 2, 3, 4行}
  • 子集3: {第2, 3, 5, 6行}

步骤 2: 构建决策树

对于每个子集,我们构建一个决策树。在每次分割时,我们不是查看所有特征,而是随机选择一部分特征。假设我们每次只选择两个特征来考虑。

  • 对于子集1,假设随机选中的特征是“温度”和“风速”,然后基于这些特征构建决策树。
  • 对于子集2,假设随机选中的特征是“天气”和“湿度”,然后构建决策树。
  • 对于子集3,假设随机选中的特征是“天气”和“风速”,然后构建决策树。

步骤 3: 进行预测和汇总结果

当需要对新的数据点进行分类时(假设是:“温度=低,天气=晴朗,风速=高,湿度=低”),每棵树都会独立做出预测:

  • 树1可能会根据“温度”和“风速”预测“是”(适合野餐)。
  • 树2可能会根据“天气”和“湿度”预测“否”(不适合野餐)。
  • 树3可能会根据“天气”和“风速”预测“是”(适合野餐)。

最后,我们通过多数投票来确定最终的分类结果。在这个例子中,因为有两棵树预测“是”,一棵树预测“否”,最终结果是“是”(适合野餐)。

结论:

通过这个过程,随机森林算法结合了多个决策树的结果来改进整体预测的准确性。每棵树都是在不完全相同的数据上训练,并且在分割时考虑不同的特征子集,这有助于增加模型的多样性,减少过拟合,提高泛化能力。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis入门到实战-第五弹

Redis实战热身Hashes篇 完整命令参考官网 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://redis.io/Redis概述 Redis是一个开源的&#xff08;采用BSD许可证&#xff09;&#xff0c;用作数据库、缓存、消息代理和…

【Java初阶(四)】数组的定义和使用

❣博主主页: 33的博客❣ ▶文章专栏分类: Java从入门到精通◀ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; 目录 1.前言2.数组的概念2.1数组的初始化2.2数组的使用2.2.1数组元素访问2.2.2遍历数组 3.数组是引用类型3.1实例3.2 认识null 4.数组的应用4.1 二分查找4.2…

合成孔径雷达干涉测量InSAR数据处理、地形三维重建、形变信息提取、监测

原文链接&#xff1a;合成孔径雷达干涉测量InSAR数据处理、地形三维重建、形变信息提取、监测https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247598798&idx7&snc054ed7c9d9c433d00837a7798080935&chksmfa820329cdf58a3f6b5986d6d4da3d19f81e3efd0b159f…

YOLOv9/YOLOv8算法改进【NO.106】使用YOLOv7下采样进行改进

前 言 YOLO算法改进系列出到这&#xff0c;很多朋友问改进如何选择是最佳的&#xff0c;下面我就根据个人多年的写作发文章以及指导发文章的经验来看&#xff0c;按照优先顺序进行排序讲解YOLO算法改进方法的顺序选择。具体有需求的同学可以私信我沟通&#xff1a; 首推…

米多论文怎么用 #学习方法#职场发展

米多论文是一款专为论文写作者设计的工具&#xff0c;可以帮助用户进行论文的查重和降重。它的使用非常简单&#xff0c;只需将需要检测的论文内容粘贴到相应的输入框中&#xff0c;点击“检测”按钮即可开始查重。米多论文通过比对用户提交的论文和互联网上已经存在的内容&…

零基础机器学习(4)之线性回归的基本原理

文章目录 一、线性回归的基本原理1.相关与回归2.线性回归的原理分析①线性回归的一般公式②线性回归的损失函数③线性回归方程的参数求解方法A.最小二乘法B.梯度下降法 一、线性回归的基本原理 1.相关与回归 相关描述的是变量之间的一种关系。 从统计角度看&#xff0c;变量之…

数据结构面试题

1、数据结构三要素&#xff1f; 逻辑结构、物理结构、数据运算 2、数组和链表的区别&#xff1f; 数组的特点&#xff1a; 数组是将元素在内存中连续存放&#xff0c;由于每个元素占用内存相同&#xff0c;可以通过下标迅速访问数组中任何元素。数组的插入数据和删除数据效率低…

自己动手做一个批量doc转换为docx文件的小工具

前言 最近遇到了一个需求&#xff0c;就是要把大量的doc格式文件转换为docx文件&#xff0c;因此就动手做了一个批量转换的小工具。 背景 doc文件是什么&#xff1f; “doc” 文件是一种常见的文件格式&#xff0c;通常用于存储文本文档。它是 Microsoft Word 文档的文件扩…

主干网络篇 | YOLOv8更换主干网络之SwinTransformer

前言:Hello大家好,我是小哥谈。Swin Transformer是一种基于Transformer架构的图像分类模型,与传统的Transformer模型不同,Swin Transformer通过引入分层的窗口机制来处理图像,从而解决了传统Transformer在处理大尺寸图像时的计算和内存开销问题。Swin Transformer的核心思…

【算法】环形纸牌均分问题

104. 货仓选址 - AcWing题库 有n家商店&#xff0c;求把货仓建在哪能使得货仓到每个点的距离总和最小&#xff0c;输出最短的距离总和。 首先&#xff0c;我们看只有两个点的情况&#xff0c;在这种情况下我们选[1,2]的任何一个位置都是一样的&#xff0c;总和就是这段区间的长…

利用sealos安装k8s集群

1. 环境准备 准备三台干净&#xff08;未安装过k8s环境&#xff09;的虚拟机 # 所有的主机都要配置主机名和域名映射 # 设置主机名 hostnamectl set-hostname k8s-master01 # vim /etc/hosts 192.168.59.201 k8s-master01 192.168.59.202 k8s-worker01 192.168.59.203 k8…

01. 如何配置ESP32环境?如何开发ESP32?

0. 前言 此文章收录于《ESP32学习笔记》专栏&#xff0c;此专栏会结合实际项目记录作者学习ESP32的过程&#xff0c;争取每篇文章能够将细节讲明白&#xff0c;会应用。 1. 安装IDE&#xff1a;Thonny 后续项目中我们都是使用pythont语言&#xff0c;而thonny工具能很好的支撑E…

Mongodb入门到入土,安装到实战,外包半年学习的成果

这是我参与「第四届青训营 」笔记创作活动的的第27天&#xff0c;今天主要记录前端进阶必须掌握内容Mongodb数据库,从搭建环境到运行数据库,然后使用MongodB; 一、文章内容 数据库基础知识关系型数据库和非关系型数据库为什么学习Mongodb数据库环境搭建及运行MongodbMongodb命…

React生命周期新旧对比

组件从创建到死亡&#xff0c;会经过一些特定的阶段React组件中包含一系列钩子函数{生命周期回调函数}&#xff0c;会在特定的时刻调用我们在定义组件的时候&#xff0c;会在特定的声明周期回调函数中&#xff0c;做特定的工作。旧生命周期总结 旧的生命周期分为三个阶段 1 初…

Nacos部署(三)Docker部署Nacos2.3单机环境

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; Nacos部署&#xff08;三&#xff09;Docker部署Nacos2.3单机环境 ⏱️…

SQLiteC/C++接口详细介绍sqlite3_stmt类(六)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;五&#xff09; 下一篇&#xff1a; SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;七&#xff09; 17. sqlite3_clear_bindings函数 sqlite3_clear_bindings函…

从零开始学习在VUE3中使用canvas(五):globalCompositeOperation(图形混合)

一、简介 通过设置混合模式来改变图像重叠区域的显示方式。 const ctx canvas.getContext("2d");ctx.globalCompositeOperation "source-over"; 二、属性介绍 source-over 这是默认的复合操作。将源图像绘制到目标图像上&#xff0c;保留目标图像的不透…

通过jsDelivr实现Github的图床CDN加速

最近小伙伴们是否发现访问我的个人博客http://xiejava.ishareread.com/图片显示特别快了&#xff1f; 我的博客的图片是放在github上的&#xff0c;众所周知的原因&#xff0c;github访问不是很快&#xff0c;尤其是hexo博客用github做图床经常图片刷不出来。一直想换图床&…

牛客NC108 最大正方形【中等 动态规划 Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/0058c4092cec44c2975e38223f10470e 思路 动态规划: 先初始化第一行和第一列。然后其他单元格依赖自己的上边&#xff0c;左边和左上角参考答案Java import java.util.*;public class Solution {/*** 代码中的类…

【Docker】golang操作容器使用rename动态更新容器的名字

【Docker】golang操作容器使用rename动态更新容器的名字 大家好 我是寸铁&#x1f44a; 总结了一篇golang操作容器使用rename动态更新容器的名字✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 今天遇到一个新的需求&#xff0c;要动态改变运行中的容器名字。 可以考虑先把…