机器学习笔记之核函数再回首:Nadarya-Watson核回归python手写示例

机器学习笔记之核函数再回首——Nadaraya-Watson核回归手写示例

引言

本节从代码角度,介绍基于高维特征向量使用 Nadaraya-Watson \text{Nadaraya-Watson} Nadaraya-Watson核回归的示例。

回顾: Nadaraya-Watson \text{Nadaraya-Watson} Nadaraya-Watson核回归

在注意力机制基本介绍中,我们提到过这种基于注意力机制权重懒惰学习方法。该方法与注意力机制关联的核心操作有如下步骤:

通过核函数描述样本之间的关联关系

我们想要主观获取某陌生样本 x ∈ R p x \in \mathbb R^p xRp数据集内各样本 x ( i ) ∈ D = { x ( i ) , y ( i ) } i = 1 N , x ( i ) ∈ R p x^{(i)} \in \mathcal D = \{x^{(i)},y^{(i)}\}_{i=1}^N,x^{(i)} \in \mathbb R^p x(i)D={x(i),y(i)}i=1N,x(i)Rp之间的关联关系。而这种描述关联关系的操作,我们首先会想到内积
x ⋅ x ( i ) = x T [ x ( i ) ] x \cdot x^{(i)} = x^T [x^{(i)}] xx(i)=xT[x(i)]
如果涉及到一个非线性问题——或者说仅仅使用内积对关联关系的表达不够丰富,可以通过高维特征转换非线性问题转化为高维线性问题
{ x ⇒ ϕ ( x ) x ( i ) = ϕ ( x ( i ) ) ( i = 1 , 2 , ⋯   , N ) x T [ x ( i ) ] ⇒ [ ϕ ( x ) ] T ϕ ( x ( i ) ) \begin{cases} x \Rightarrow \phi(x) \\x^{(i)} = \phi(x^{(i)})(i=1,2,\cdots,N) \\ x^T[x^{(i)}] \Rightarrow [\phi(x)]^T \phi(x^{(i)}) \end{cases} xϕ(x)x(i)=ϕ(x(i))(i=1,2,,N)xT[x(i)][ϕ(x)]Tϕ(x(i))
低维特征转化为高维特征同样存在弊端。在核方法思想与核函数中介绍过:映射后的特征结果 ϕ ( x ) , \phi(x), ϕ(x),其特征维数远远超过原始特征维数 p p p,甚至是无限维。在这种情况下去计算 [ ϕ ( x ) ] T ϕ ( x ( i ) ) [\phi(x)]^T \phi(x^{(i)}) [ϕ(x)]Tϕ(x(i)),其计算代价是无法估量的。而核技巧提供了一种简化运算的方式。关于核函数 κ ( ⋅ ) \kappa(\cdot) κ()的定义表示如下:
κ [ x , x ( i ) ] = ⟨ ϕ ( x ) , ϕ ( x ( i ) ) ⟩ = [ ϕ ( x ) ] T ϕ ( x ( i ) ) \kappa \left[x,x^{(i)}\right] = \left\langle\phi(x),\phi(x^{(i)})\right\rangle= [\phi(x)]^T \phi(x^{(i)}) κ[x,x(i)]=ϕ(x),ϕ(x(i))=[ϕ(x)]Tϕ(x(i))
可以看出:核函数 κ ( ⋅ ) \kappa(\cdot) κ()的自变量是未经过高维转换的原始特征;而对应函数是高维转换后的内积结果。因而该函数的作用可以简化运算。最终我们可以通过核函数描述 x x x与数据集内所有样本 x ( i ) ( i = 1 , 2 , ⋯   , N ) x^{(i)}(i=1,2,\cdots,N) x(i)(i=1,2,,N)之间的关联关系
κ [ x , x ( i ) ] i = 1 , 2 , ⋯   , N \kappa \left[x,x^{(i)}\right] \quad i=1,2,\cdots,N κ[x,x(i)]i=1,2,,N

使用 Softmax \text{Softmax} Softmax函数对权重进行划分

此时已经得到 x x x所有样本 x ( i ) x^{(i)} x(i)核函数结果,这 N N N个结果有大有小,数值大的意味着样本之间的关联程度。从而可以将关联关系描述成 x x x与样本 x ( i ) x^{(i)} x(i)对应标签结果 y ( i ) y^{(i)} y(i)的权重 G ( x , x ( i ) ) \mathcal G(x,x^{(i)}) G(x,x(i))
G ( x , x ( i ) ) = κ ( x , x ( i ) ) ∑ j = 1 N κ ( x , x ( j ) ) \mathcal G(x,x^{(i)}) = \frac{\kappa(x,x^{(i)})}{\sum_{j=1}^{N}\kappa(x,x^{(j)})} G(x,x(i))=j=1Nκ(x,x(j))κ(x,x(i))
关于权重 G ( x , x ( i ) ) \mathcal G(x,x^{(i)}) G(x,x(i)),必然有如下结果:
∑ i = 1 N G ( x , x ( i ) ) = ∑ i = 1 N κ ( x , x ( i ) ) ∑ i = 1 N κ ( x , x ( i ) ) = 1 \sum_{i=1}^N \mathcal G(x,x^{(i)}) = \frac{\sum_{i=1}^{N} \kappa(x,x^{(i)})}{\sum_{i=1}^{N} \kappa(x,x^{(i)})} = 1 i=1NG(x,x(i))=i=1Nκ(x,x(i))i=1Nκ(x,x(i))=1
为什么是 Softmax \text{Softmax} Softmax函数呢——如果该核函数是一个指数函数。例如高斯核函数
将大括号内的项视作 Δ ( i ) \Delta^{(i)} Δ(i)
κ ( x , x ( i ) ) = exp ⁡ { − 1 2 σ 2 ∥ x − x ( i ) ∥ 2 ⏟ Δ ( i ) } \kappa (x,x^{(i)}) = \exp \left\{\underbrace{- \frac{1}{2 \sigma^2} \left\|x - x^{(i)} \right\|^2 }_{\Delta^{(i)}}\right\} κ(x,x(i))=exp Δ(i) 2σ21 xx(i) 2
那么 G ( x , x ( i ) ) \mathcal G(x,x^{(i)}) G(x,x(i))可表示为:
G ( x , x ( i ) ) = exp ⁡ { Δ ( i ) } ∑ j = 1 N exp ⁡ { Δ ( j ) } = Softmax ( Δ ( i ) ) \mathcal G(x,x^{(i)}) = \frac{\exp \{\Delta^{(i)}\}}{\sum_{j=1}^N \exp\{\Delta^{(j)}\}} = \text{Softmax}(\Delta^{(i)}) G(x,x(i))=j=1Nexp{Δ(j)}exp{Δ(i)}=Softmax(Δ(i))
最终可以得到如下权重向量
G ( x , D ) = [ κ ( x , x ( 1 ) ) ∑ j = 1 N κ ( x , x ( j ) ) , ⋯   , κ ( x , x ( N ) ) ∑ j = 1 N κ ( x , x ( j ) ) ] 1 × N \mathcal G(x,\mathcal D) = \left[\frac{\kappa(x,x^{(1)})}{\sum_{j=1}^N \kappa(x,x^{(j)})},\cdots,\frac{\kappa (x,x^{(N)})}{\sum_{j=1}^N \kappa(x,x^{(j)})} \right]_{1 \times N} G(x,D)=[j=1Nκ(x,x(j))κ(x,x(1)),,j=1Nκ(x,x(j))κ(x,x(N))]1×N

将权重与相应标签执行加权运算

得到权重向量 G ( x , D ) \mathcal G(x,\mathcal D) G(x,D)后,与对应标签向量 Y = ( y ( 1 ) , ⋯   , y ( N ) ) T \mathcal Y = (y^{(1)},\cdots,y^{(N)})^T Y=(y(1),,y(N))T内积运算,得到关于陌生样本 x x x的预测结果 f ( x ) f(x) f(x)
本质上就是关于标签 y ( i ) ( i = 1 , 2 , ⋯   , N ) y^{(i)}(i=1,2,\cdots,N) y(i)(i=1,2,,N)的加权平均数~
f ( x ) = G ( x , D ) ⋅ Y = κ ( x , x ( 1 ) ) ∑ j = 1 N κ ( x , x ( j ) ) ⋅ y ( 1 ) + ⋯ κ ( x , x ( N ) ) ∑ j = 1 N κ ( x , x ( j ) ) ⋅ y ( N ) \begin{aligned} f(x) & = \mathcal G(x,\mathcal D) \cdot \mathcal Y \\ & = \frac{\kappa(x,x^{(1)})}{\sum_{j=1}^N \kappa(x,x^{(j)})} \cdot y^{(1)} + \cdots \frac{\kappa(x,x^{(N)})}{\sum_{j=1}^N \kappa(x,x^{(j)})} \cdot y^{(N)} \end{aligned} f(x)=G(x,D)Y=j=1Nκ(x,x(j))κ(x,x(1))y(1)+j=1Nκ(x,x(j))κ(x,x(N))y(N)

Nadaraya-Watson \text{Nadaraya-Watson} Nadaraya-Watson核回归代码示例

关于径向基核函数与高斯核函数

在上述注意力机制基本介绍一节中,我们模糊了径向基核函数高斯核函数的区别。这里提出一些新的认识。两种核函数的公式表示如下:
{ RBF :  κ ( x , x ( i ) ) = exp ⁡ ( − γ ⋅ ∥ x − x ( i ) ∥ 2 ) Gaussian :  κ ( x , x ( i ) ) = exp ⁡ [ − 1 2 σ 2 ∥ x − x ( i ) ∥ 2 ] \begin{cases} \begin{aligned} & \text{RBF : } \kappa (x,x^{(i)}) = \exp ( - \gamma \cdot \|x - x^{(i)}\|^2) \\ & \text{Gaussian : } \kappa(x,x^{(i)}) = \exp \left[- \frac{1}{2\sigma^2} \|x - x^{(i)}\|^2 \right] \end{aligned} \end{cases} RBF : κ(x,x(i))=exp(γxx(i)2)Gaussian : κ(x,x(i))=exp[2σ21xx(i)2]
相比之下,径向基核函数它的参数 γ ∈ [ 0 , 1 ] \gamma \in [0,1] γ[0,1],相比高斯核函数 σ \sigma σ的范围描述的更加方便

关于高维向量的核函数表示

根据上面公式,高维向量的核函数表示,其核心步骤是范数的表示。可以使用numpy模块中的numpy.linalg.norm()方法进行表示。下面分别通过调用径向基核函数模块sklearn.metrics.pairwise.rbf_kernel以及手写方式进行实现:

import numpy as np
from sklean.metrics.pairwise import rbf_kernel

def RBFKernelFunction(xInput, xSample, gamma):
    def NormCalculation(xInput, xSample):
        NormResult = np.linalg.norm(xInput - xSample)
        return NormResult ** 2
    return np.exp((-1 * gamma) * NormCalculation(xInput, xSample))

a = np.array([1,2,3,4])
b = np.array([5,6,7,4])

SklearnOut = rbf_kernel(a.reshape(1,-1),b.reshape(1,-1),gamma=0.5)
ManuOut = RBFKernelFunction(a.reshape(1,-1),b.reshape(1,-1),gamma=0.5)
# [[3.77513454e-11]]
print(SklearnOut)
# 3.775134544279111e-11
print(ManuOut)

关于回归任务的相关示例

完整代码如下:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import math
from tqdm import tqdm

def ReadXlsx(Path):
    Df = pd.read_excel(Path,sheet_name="Sheet1")
    return Df

def DealTokenAndLabel(Df):

    def DivideTokenAndLabel(ListInput):
        Label = ListInput.pop(3)
        return ListInput,Label

    def LinearCorrectOperation(Input,mode="Token"):
        assert mode in ["Token","Label"]
        if mode == "Token":
            OriginalToken = Input[3]
            UpdateToken = OriginalToken / 10.0
            Input[3] = round(UpdateToken,3)
        else:
            UpdateLabel = Input * 10.0
            Input = round(UpdateLabel,4)
        return Input

    DataList = list()
    LabelList = list()
    for (Ids,i) in Df.iterrows():
        Token,Label = DivideTokenAndLabel(list(i))
        UpdateToken = LinearCorrectOperation(Token)
        UpdateLabel = LinearCorrectOperation(Label,mode="Label")
        DataList.append(np.array(UpdateToken))
        LabelList.append(np.array(UpdateLabel))
    return DataList,LabelList

def AlgorithmProcess(DataList,LabelList,gamma,mode="RBF"):

    assert mode in ["Linear","RBF"]

    def RBFKernelFunction(xInput,xSample,gamma):

        def NormCalculation(xInput, xSample):
            NormResult = np.linalg.norm(xInput - xSample)
            return NormResult ** 2

        return np.exp((-1 * gamma) * NormCalculation(xInput, xSample))

    def LinearKernelFunction(xInput,xSample):

        return np.dot(xInput,xSample)

    def SoftmaxFunction(xInput,xSample,gamma,mode):

        if mode == "Linear":
            return LinearKernelFunction(xInput,xSample) / sum(LinearKernelFunction(xInput,i) for i in DataList)
        else:
            return RBFKernelFunction(xInput,xSample,gamma) / sum(RBFKernelFunction(xInput,i,gamma) for i in DataList)


    def NWKernalRegressionResult(xInput,gamma,mode):
        KernelRegressionList = list()
        for _,(TokenSample,LabelSample) in enumerate(zip(DataList,LabelList)):
            if (TokenSample == xInput).all():
                continue
            else:
                if mode == "RBF":
                    xInput = xInput.reshape(1, -1)
                    TokenSample = TokenSample.reshape(1, -1)

                SoftmaxCoeff = SoftmaxFunction(xInput, TokenSample, gamma, mode)
                KernelRegressionList.append(SoftmaxCoeff * LabelSample)

        return sum(KernelRegressionList)

    return [NWKernalRegressionResult(i,gamma,mode) for i in DataList]
    # return NWKernalRegressionResult(xInput,gamma)

def EmpiricRiskStatic(mode):

    def EmpiricRisk(NWKernelPredictList,LabelList,mode="FirstOrder"):

        assert mode in ["FirstOrder","SecondOrder"]
        ErrorList = list()
        for _,(NWKernelPredict,Label) in enumerate(zip(NWKernelPredictList,LabelList)):

            if mode == "FirstOrder":
                ErrorList.append(abs(NWKernelPredict - Label))
            else:
                ErrorList.append((NWKernelPredict - Label) ** 2)
        return sum(ErrorList) / len(ErrorList)

    GammaLimits = list(np.linspace(0, 0.5, 2000))
    EmpiricRiskList = list()
    EmpiricRiskListSecond = list()
    for GammaChoice in tqdm(GammaLimits):
        NWKernelPredictList = AlgorithmProcess(DataList,LabelList,GammaChoice,mode=mode)
        EmpiricRiskResult = EmpiricRisk(NWKernelPredictList, LabelList)
        EmpiricRiskList.append(EmpiricRiskResult)
        EmpiricRiskResultSecond = EmpiricRisk(NWKernelPredictList,LabelList,mode="SecondOrder")
        EmpiricRiskListSecond.append(EmpiricRiskResultSecond)

    plt.scatter(GammaLimits,EmpiricRiskList,s=2,c="tab:blue")
    plt.scatter(GammaLimits,EmpiricRiskListSecond,s=2,c="tab:orange")
    plt.savefig("EmpiricRisk.png")
    plt.show()

if __name__ == '__main__':
    Path = r""
    DataList, LabelList = DealTokenAndLabel(ReadXlsx(Path))
    EmpiricRiskStatic(mode="RBF")

关于使用 Nadaraya-Watson \text{Nadaraya-Watson} Nadaraya-Watson核回归时,需要注意的点:

  • 由于 Nadaraya-Watson \text{Nadaraya-Watson} Nadaraya-Watson核回归自身是懒惰学习方法,因此,这里唯一的参数就是径向基核函数中描述的 γ \gamma γ。而针对选择最优 γ \gamma γ,这里使用的目标函数经验风险 ( Empiric Risk ) (\text{Empiric Risk}) (Empiric Risk)
    J ( γ ) = E P ^ d a t a { L [ f ( x ( i ) ; γ ) , y ( i ) ] } = 1 M ∑ i = 1 M L [ f ( x ( i ) ; γ ) , y ( i ) ] \mathcal J(\gamma) =\mathbb E_{\hat {\mathcal P}_{data}} \left\{\mathcal L[f(x^{(i)};\gamma),y^{(i)}]\right\} = \frac{1}{\mathcal M} \sum_{i=1}^{\mathcal M} \mathcal L[f(x^{(i)};\gamma),y^{(i)}] J(γ)=EP^data{L[f(x(i);γ),y(i)]}=M1i=1ML[f(x(i);γ),y(i)]
    其中 L [ f ( x ( i ) ; γ ) ] \mathcal L[f(x^{(i)};\gamma)] L[f(x(i);γ)]表示关于 x ( i ) x^{(i)} x(i)预测结果 f ( x ( i ) ) f(x^{(i)}) f(x(i))真实标签 y ( i ) y^{(i)} y(i)之间的差异性结果,也就是损失函数 L ( ⋅ ) \mathcal L(\cdot) L() x ( i ) x^{(i)} x(i)点处的结果。目标函数确定后,这里的处理方式是:

    • γ \gamma γ确定的情况下,将数据集 P ^ d a t a \hat {\mathcal P}_{data} P^data中的每一个样本抽取出来,并使用剩余样本进行预测;
      值得注意的是:在抽取操作结束后,使用剩余样本做预测。因为如果被抽取样本依然保留在数据集内,那么在计算权重系数 κ ( x , x ( i ) ) ∑ j = 1 N κ ( x , x ( j ) ) \begin{aligned}\frac{\kappa(x,x^{(i)})}{\sum_{j=1}^N \kappa (x,x^{(j)})}\end{aligned} j=1Nκ(x,x(j))κ(x,x(i))过程中,数据集内与被抽取样本相同的样本其权重必然占据极高比重,因为该项的分子必然是 1 ( e 0 ) 1(e^0) 1(e0),从而该样本的预测结果会被数据集内相同的样本进行主导或者控制。个人实践踩过的坑~
    • 在所有样本均被遍历一次后,计算 J ( γ ) \mathcal J(\gamma) J(γ),记录并修改 γ \gamma γ,执行下一次迭代。从而通过统计的方式得到 γ ∈ [ 0 , 1 ] \gamma \in [0,1] γ[0,1]中的最优解
  • 关于损失函数 L [ f ( x ( i ) ; γ ) , y ( i ) ] \mathcal L[f(x^{(i)};\gamma),y^{(i)}] L[f(x(i);γ),y(i)],可以使用曼哈顿距离( 1 1 1阶)或者欧几里得距离( 2 2 2阶)对标签之间的差异性进行描述:
    无论 f ( x ( i ) ; γ ) f(x^{(i)};\gamma) f(x(i);γ)还是 y ( i ) y^{(i)} y(i)都是标量形式。因而没有使用范数进行表达。
    L [ f ( x ( i ) ; γ ) , y ( i ) ] = { ∣ f ( x ( i ) ; γ ) − y ( i ) ∣ ⇒ Manhattan Distance [ f ( x ( i ) ; γ ) − y ( i ) ] 2 ⇒ Euclidean Distance \mathcal L[f(x^{(i)};\gamma),y^{(i)}] = \begin{cases} \left|f(x^{(i)};\gamma) - y^{(i)} \right| \quad \Rightarrow \text{Manhattan Distance}\\ \quad \\ \left[f(x^{(i)};\gamma) - y^{(i)} \right]^2 \quad \Rightarrow \text{Euclidean Distance} \end{cases} L[f(x(i);γ),y(i)]= f(x(i);γ)y(i) Manhattan Distance[f(x(i);γ)y(i)]2Euclidean Distance

这里基于某数据集的回归任务,关于曼哈顿距离、欧式距离作为损失函数, J ( γ ) \mathcal J(\gamma) J(γ) γ \gamma γ之间的关联关系表示如下:
其中横坐标表示 γ \gamma γ的取值;纵坐标表示 J ( γ ) \mathcal J(\gamma) J(γ)的映射结果。
某回归任务的经验风险结果
其中蓝色点形状表示曼哈顿距离作为损失函数的图像结果;而橙色点形状表示欧几里得距离作为损失函数的图像结果。从图中可以看出:在相似位置可以得到目标函数的最小值
需要注意的是,两种函数无法相互比较,因为两者对应目标函数的值域不同。

个人想法

虽然通过统计的方式得到了 γ \gamma γ的最优解,但它可能并不准。或者说:基于当前数据集 P ^ d a t a \hat {\mathcal P}_{data} P^data,使用径向基核函数条件下的最准结果。其他优化的方式有:

  • 核函数的选择;
    一般情况下,线性核函数本身是够用的。
  • 扩充样本数据;
    • 在最早的概率与概率模型中介绍过,模型预测的不准的本质原因是预测模型与真实模型之间的差异性较大。而在 Nadaraya-Watson \text{Nadaraya-Watson} Nadaraya-Watson核回归中,并没有涉及到具体模型。因而反馈的结果是:当前训练集所描述的概率分布真实分布之间存在较大差距
    • 由于真实分布是客观存在的,也就是说训练集的样本越多,分布就越稳定。体现在参数 γ \gamma γ中的效果是:在样本数量较少时,不同的数据集对应的 γ \gamma γ差异性可能很大(波动较大);随着样本数量的增多, γ \gamma γ会逐渐趋于稳定

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

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

相关文章

自动化测试(三):接口自动化pytest测试框架

文章目录 1. 接口自动化的实现2. 知识要点及实践2.1 requests.post传递的参数本质2.2 pytest单元测试框架2.2.1 pytest框架简介2.2.2 pytest装饰器2.2.3 断言、allure测试报告2.2.4 接口关联、封装改进YAML动态传参(热加载) 2.3 pytest接口封装&#xff…

Android 绘制之文字测量

drawText() 绘制文字 绘制进度条:paint.strokeCap Paint.CAP.RONUD 线条两边样式 设置文字字体:paint.typeFace Resources.Compat.getFont(context,font) 设置加粗 paint.isFakeBoldText 设置居中: paint.setTextAlign Paint.Align.CENTER //居中, 并不是真正的居中 往…

农村农产品信息展示网站的设计与实现(论文+源码)_kaic

摘 要 随着软件技术的迅速发展,农产品信息展示的平台越来越多,传统的农产品显示方法将被计算机图形技术取代。这种网站技术主要把农产品的描述、农产品价格、农产品图片等内容,通过计算机网络的开发技术,在互联网上进行展示,然后通过计算机网…

Win11共享文件,能发现主机但无法访问,提示找不到网络路径

加密长度选择如下: 参考以下链接: Redirectinghttps://answers.microsoft.com/zh-hans/windows/forum/all/win11%E8%AE%BE%E7%BD%AE%E6%96%87%E4%BB%B6%E5%A4%B9/554343a9-d963-449a-aa59-ce1e6f7c8982?tabAllReplies#tabs

小研究 - Android 字节码动态分析分布式框架(五)

安卓平台是个多进程同时运行的系统,它还缺少合适的动态分析接口。因此,在安卓平台上进行全面的动态分析具有高难度和挑战性。已有的研究大多是针对一些安全问题的分析方法或者框架,无法为实现更加灵活、通用的动态分析工具的开发提供支持。此…

linux字符串处理

目录 1 C 截取字符串,截取两个子串中间的字符串2 获取该字符串后面的字符串用 strstr() 函数查找需要提取的特定字符串,然后通过指针运算获取该字符串后面的字符串用 strtok() 函数分割字符串,找到需要提取的特定字符串后,调用 strtok() 传入…

十四五双碳双控时代下的“低碳认证”

目录 前言 十四五双碳双控时代下的“低碳认证” 一、关于“低碳认证” 二、低碳认证优势 三、环境产品认证EPD 四、EPD相关运营机构 五、碳中和相关机构 六、EPD的认证流程 七、低碳产品认证认证流程和要求 八、相关机构认证证书样例 九、证书附件表 前言 通过本篇文…

DOCKER 部署 webman项目

# 设置基础镜像 FROM php:8.2-fpm# 安装必要的软件包和依赖项 RUN apt-get update && apt-get install -y \nginx \libzip-dev \libpng-dev \libjpeg-dev \libfreetype6-dev \&& rm -rf /var/lib/apt/lists/*# 安装 PHP 扩展 RUN docker-php-ext-configure gd …

探讨C#、C++和Java这三门语言在嵌入式的地位

我理解对于初入嵌入式领域的担忧。你是想选择一款通用性最广的语言专心学习,但是不知如何选择,视频后方提供了免费的嵌入式学习资源,内容涵盖入门到进阶,需要的到后方免费获取。因为我也曾是一名计算机专业毕业生。通过一段时间的…

无涯教程-Python机器学习 - Analysis of Silhouette Score函数

剪影得分的范围是[-1,1]。其分析如下- 1分数-接近1 剪影分数表示样本距离其邻近簇很远。 0分数-0 剪影分数表示样本在将两个相邻聚类分隔开的决策边界上或非常接近。 -1分数-1 剪影分数表示样本已分配给错误的聚类。 Silhouette得分的计算可以使用以下公式完成 $$剪影得…

计算机竞赛 基于大数据的股票量化分析与股价预测系统

文章目录 0 前言1 课题背景2 实现效果3 设计原理QTChartsarma模型预测K-means聚类算法算法实现关键问题说明 4 部分核心代码5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于大数据的股票量化分析与股价预测系统 该项目较为新颖…

执行jmeter端口不够用报错(Address not available)

执行jmeter端口不够用报错(Address not available) linux解决方案 // 增加本地端口范围 echo 1024 65000 > /proc/sys/net/ipv4/ip_local_port_range// 启用快速回收TIME_WAIT套接字 sudo sysctl -w net.ipv4.tcp_tw_recycle1// 启用套接字的重用 sudo sysctl -w net.ipv4.t…

LLM-Rec:基于提示大语言模型的个性化推荐

1. 基本信息 论文题目:LLM-Rec: Personalized Recommendation via Prompting Large Language Models 作者:Hanjia Lyu, Song Jiang, Hanqing Zeng, Yinglong Xia, Jiebo Luo 机构:University of Rochester, University of California Los Angeles, Meta AI, University of Ro…

STM32f103入门(4)对射式红外传感器计次(外部中断)

中断:在主程序运行过程中,出现了特定的中断触发条件 (中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序处理完成后又返回原来被暂停的位置继续运行中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进…

Oracle监听器启动出错:本地计算机上的OracleOraDb11g_home1TNSListener服务启动后又停止了解决方案

在启动oracle的服务OracleOraDb11g_home1TNSListener时,提示服务启动后又停止了。 解决方法: 修改oracle安装目录下的两个配置文件: 以上两个文件,对应的HOST的值,都改为127.0.0.1 然后再启动服务,启动成…

秒懂算法2

视频链接 : 希望下次秒懂的是算法题_哔哩哔哩_bilibili P1094 [NOIP2007 普及组] 纪念品分组 原题链接 : [NOIP2007 普及组] 纪念品分组 - 洛谷 思路 : 排序 贪心 双指针首先先对输入进来的数组进行排序(由小到大)运用贪心的思想 : 前后结合,令l1,rn,若a[l]a[r]<w…

Linux centos7 bash编程(小练习)

一、打印九九乘法口诀 这一个for循环嵌套的小练习&#xff0c;难度不大。提供一种写法&#xff0c;供参考&#xff1a; #!/bin/bash # 文件名&#xff1a;99table.sh # 打印输出九九乘法口诀表 for i in {1..9} do for ((j1;j<$i;j)) do …

⛳ Docker 安装 MySQL

&#x1f38d;目录 ⛳ Docker 安装 MySQL&#x1f69c; 一、搜索 mysql , 查看版本&#x1f3a8; 二、拉取mysql镜像&#x1f463; 三、建立容器的挂载文件&#x1f9f0; 四、创建mysql配置文件&#xff0c;my.conf&#x1f3ed; 五、根据镜像产生容器&#x1f381; 六、远程连…

2023MySQL+MyBatis知识点整理

文章目录 主键 外键 的区别&#xff1f;什么是范式&#xff1f;什么是反范式&#xff1f;什么是事务&#xff1f;MySQL事务隔离级别&#xff1f;MySQL事务默认提交模式&#xff1f;MySQL中int(1)和int(10)的区别MySQL 浮点数会丢失精度吗&#xff1f;MySQL支持哪几种时间类型&a…

线性数据结构:数组与链表的探索与应用

文章目录 1. 数组&#xff1a;连续存储的有序元素集合1.1 创建和访问数组1.2 数组的搜索与排序 2. 链表&#xff1a;非连续存储的动态数据结构2.1 单链表与双链表2.2 链表的操作与应用 3. 数组与链表的比较与应用3.1 数组与链表的比较3.2 数组与链表的应用 4. 总结与展望 &…
最新文章