机器学习——聚类——距离聚类法——K-means

2023-10-27

理论部分

1.1 聚类概念
1.1.1 定义

定义: 对一批没有标出类别的模式样本集,按照样本之间的相似程度分类,相似的归为一类,不相似的归为另一类,这种分类称为聚类,也称为无监督分类。

一个通俗的例子如下:
在这里插入图片描述
如上图,现在有若干个样本点,事前我们并不知道每个样本所属的类别(也即不知道各样本的标签),但我们仍希望将这些样本按照某种指标进行相似度划分,将相似的归为一类,不相似的归为另一类,对于未知标签样本点的类别划分过程就称为聚类。

1.1.2 与分类的区别

注意聚类并不等于分类,分类问题中样本标签事前已知,而聚类问题中样本标签事前并不清楚。分类问题属于监督学习,聚类问题属于无监督学习。

在这里插入图片描述
如上图所示。

1.2 相似度测量

前面我们提到了聚类是根据样本间的相似性测度进行划分的,那么这里的相似性一般是以样本点间的距离来衡量的。具体来说:把整个模式样本集的特征向量看成是分布在特征空间中的一些点,点与点之间的距离即可作为模式相似性的测量依据。

通俗的解释如下:
现有两位学生A和B,希望根据他们的身高和体重进行相似度聚类。假设A的身高和体重分别为1.7m,70kg。B的身高和体重分别为1.8m,80kg。那么A和B这两个样本就称为模式 A = [ 1.7 , 70 ] T A=[1.7,70]^{T} A=[1.7,70]T B = [ 1.8 , 80 ] T B=[1.8,80]^{T} B=[1.8,80]T分别称为样本A与样本B的特征向量,特征向量所处的二维空间就称为特征空间衡量样本间的相似性就是通过衡量样本对应特征向量间的距离来决定的。

下面介绍几种常见的距离

1.2.1 欧式距离

定义:欧式距离又称欧几里得距离,是最常用的距离测度。假设两个样本 x , y x,y x,y的特征向量分别为 x = [ x 1 , x 2 , ⋯   , x n ] T x=[x_{1},x_{2},\cdots,x_{n}]^{T} x=[x1,x2,,xn]T, y = [ y 1 , y 2 , ⋯   , y n ] T y=[y_{1},y_{2},\cdots,y_{n}]^{T} y=[y1,y2,,yn]T。则它们的欧式距离定义如下:
在这里插入图片描述
欧式距离就是我们常说的两点间距离。
计算样本间欧式距离时要注意不同样本间的相同特征应该保持一致的物理量纲。例如上述例子,当身高以米为单位时,所有样本的身高都应该转换为以米为单位进行衡量。

1.2.2 马氏距离

马氏距离计算公式如下:
d = ( x − y ) T Σ − 1 ( x − y ) d=\sqrt{(x-y)^{T}\Sigma^{-1}(x-y)} d=(xy)TΣ1(xy)
• 马氏距离将协方差考虑进来,排除了样本之间的相关性。
• 马氏距离与欧氏距离相比,就中间多了一项。当协方差为单位矩阵时,马氏距离和欧氏距离相同。
• 欧式距离中,完全是各样本中对应分量相乘,再相加得到,如果某一项的值非常大,那么其值就会掩盖值小的一项所起到的作用,这是欧式距离的不足,当采用马氏距离,就可以屏蔽这一点。因为相关性强的一个分量,对应于协方差矩阵C中对角线上的那一项的值就会大一些。再将这一项取倒数,减小该影响。
• 马氏距离与原始数据的测量单位无关。

一个通俗的例子如下:

如果我们以厘米为单位来测量人的身高,以克(g)为单位测量人的体重。每个人被表示为一个两维向量,如一个人身高 173 c m 173cm 173cm,体重 50000 g 50000g 50000g,表示为 ( 173 , 50000 ) (173,50000) 173,50000,根据身高体重的信息来判断体型的相似程度。

我们已知小明 ( 160 , 60000 ) (160,60000) 160,60000;小王 ( 160 , 59000 ) (160,59000) 160,59000;小李 ( 170 , 60000 ) (170,60000) 170,60000。根据常识可以知道小明和小王体型相似。但是如果根据欧几里得距离来判断,小明和小王的距离要远远大于小明和小李之间的距离,即小明和小李体型相似。这是因为不同特征的度量标准之间存在差异而导致判断出错。

以克(g)为单位测量人的体重,数据分布比较分散,即方差大,而以厘米为单位来测量人的身高,数据分布就相对集中,方差小。马氏距离的目的就是把方差归一化,使得特征之间的关系更加符合实际情况。

下图(a)展示了三个数据集的初始分布,看起来竖直方向上的那两个集合比较接近。在我们根据数据的协方差归一化空间之后,如图(b),实际上水平方向上的两个集合比较接近。
在这里插入图片描述

1.3 聚类准则

聚类准则的选取通常有以下两种:

1.3.1 试探方法

依据经验选择测度和阈值来判别分类,并可以选择一定的训练样本来检验测度和阈值的可靠程度。凭直观感觉,针对实际问题定义一种相似性测度的阈值,然后按最近邻规则指定某些模式样本属于某一个聚类类别。

例如对欧氏距离,它反映了样本间的近邻性,但将一个样本分到不同类别中的哪一个时,还必须规定一个距离测度的阈值作为聚类的判别准则.

1.3.2 聚类准则法

定义一个聚类准则函数,使其转化为最优化问题,比如距离平方和:
J = ∑ i = 1 c ∑ x ∈ S i ∣ ∣ x − m i ∣ ∣ 2 J=\sum\limits_{i=1}^{c}\sum\limits_{x\in S_{i}}||x-m_{i}||^{2} J=i=1cxSixmi2

x {x} x:模式样本集
S i : i = 1 , 2 , 3 , ⋯   , c {S_{i}:i=1,2,3,\cdots,c} Si:i=1,2,3,,c: 模式类别
m i : m_{i}: mi:样本均值向量

定义如此的聚类函数,将聚类问题转换为求确定函数的最优化问题。

1.4 常见聚类方法

常见的聚类方法有分层聚类法,K-means聚类法,基于密度峰值的聚类方法,均值漂移聚类,凝聚层次聚类等。本篇主要介绍K-means聚类。

1.5 K均值聚类
1.5.1 K均值聚类思想

• 基本思想

1.首先选择若干个样本点作为聚类中心,再按某种聚
类准则(通常采用最小距离准则)使样本点向各中
心聚集,从而得到初始聚类

2.然后判断初始分类是否合理,若不合理,则修改分
类;

3.如此反复进行修改聚类的迭代算法,直至合理为止。

所用的聚类准则函数是聚类集中每一个样本点到该类中心的距离平方之和,并使其最小化。

1.5.2 K均值聚类流程
  1. 选择k个聚类中心 z 1 , … , z k {z _{1} ,…, z_{k}} z1,,zk
  2. 把样本点分配给最近聚类,即:
    x ∈ C i , i f    d ( x , C i ) < d ( x , C j )   j ≠ i x\in C_{i},if \ \ d(x,C_{i})<d(x,C_{j}) \ j\neq i xCi,if  d(x,Ci)<d(x,Cj) j=i
  3. 更新 z i {z_{i} } zi最小化代价函数,即:
    z i = 1 N ∑ C i x = m i z_{i}=\frac{1}{N}\sum\limits_{C_{i}}x=m_{i} zi=N1Cix=mi
  4. 根据新聚类中心更新样本类别
  5. 直到聚类中心无改变
1.5.3 实例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.5.4 K均值聚类优点

1.方法简单 方法简单。
2.如果 k 精确且聚类数据可分性好,很容易获得好的聚类效果。

1.5.5 K均值聚类缺点

1.如果k值的选取不正确,那么聚类错误。
2.高度依赖于初始值选取,如下图:
在这里插入图片描述

3.更适用“球形”分布的数据,难处理非球形聚类。

1.6 评估指标

聚类的性能评估指标有很多,这里我们着重介绍一种:轮廓系数

轮廓系数的公式如下:
S ( i ) = b ( i ) − a ( i ) m a x ( a ( i ) , b ( i ) ) S(i)=\frac{b(i)-a(i)}{max({a(i),b(i)})} S(i)=max(a(i),b(i))b(i)a(i)
其中, a ( i ) a(i) a(i)代表样本点的内聚度,公式如下:
a ( i ) = 1 N − 1 ∑ j ≠ i n d ( x i , x j ) a(i)=\frac{1}{N-1}\sum\limits_{j\neq i}^{n}d(x_{i},x_{j}) a(i)=N11j=ind(xi,xj)
即为样本i与其所属类内其它样本的距离平均值。

b ( i ) b(i) b(i)为样本i与除其所属类外其它类的样本间距离均值的最小值,即:
b ( i ) = m i n ( b 1 ( i ) , b 2 ( i ) , ⋯   , b m ( i ) ) b(i)=min(b_{1}(i),b_{2}(i),\cdots,b_{m}(i)) b(i)=min(b1(i),b2(i),,bm(i))

故有:
在这里插入图片描述
a ( i ) < b ( i ) a(i)<b(i) a(i)<b(i)时,即类内的距离小于类间距离,则聚类结果更紧凑。S的值会趋近于1。越趋近于1代表轮廓越明显。

相反,当 a ( i ) > b ( i ) a(i)>b(i) a(i)>b(i)时,类内的距离大于类间距离,说明聚类的结果很松散。S的值会趋近于-1,越趋近于-1则聚类的效果越差。

一般来说,轮廓系数可以用来选择最合适的类别数k,我们可以绘制横坐标为k取值,纵坐标为轮廓系数的折线图,而后根据这张图选择轮廓系数最接近1的对应k值作为类别数。

1.7 K的选取与肘部法则

1.根据1.6所述的轮廓系数曲线,我们可以画出图像进行选取。

2.除此之外,还可以利用肘部法则进行聚类类别数的选择。具体如下:

将每个簇的质点与簇内样本点的平方距离误差和称为畸变程度(distortions),那么,对于一个簇,它的畸变程度越低,代表簇内成员越紧密,畸变程度越高,代表簇内结构越松散。 畸变程度会随着类别的增加而降低,但对于有一定区分度的数据,在达到某个临界点时畸变程度会得到极大改善,之后缓慢下降,这个临界点就可以考虑为聚类性能较好的点。

在这里插入图片描述
例如上图,横坐标为k值,纵坐标为畸变程度,根据肘部法则,在k=2或3时畸变程度下降最快,而后速度减缓。所以上图所反应出的最佳聚类数应为2或3。

代码部分

2.1 K均值代码实现
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.io import loadmat

def load_data(path):
    data=loadmat(path)
    #读入数据,这里的数据是mat格式,所以使用loadmat函数
    x=data['X']
    return data,x
data,x=load_data('ex7data2.mat')
def view_data(x):
    fig,ax=plt.subplots(figsize=(6,6))
    ax.scatter(x[:,0],x[:,1],c='r')
    #画散点图
    ax.set_xlabel('X1')
    ax.set_ylabel('X2')
    ax.set_title('Training Example')
    plt.show()
#view_data(x)

def get_centroids(x,centroids):

    idx=[]
    max_distance=10000
    for i in range(len(x)):
        distance=((x[i]-centroids)[:,0])**2+((x[i]-centroids)[:,1])**2
        if distance.min()<max_distance:
            ci=np.argmin(distance)
            idx.append(ci)
    return np.array(idx)
init_cent=np.array([[3,3],[6,2],[8,5]])
idx=get_centroids(x,init_cent)
#返回每个样本所对应的类别
#print(idx,idx.shape)
#print(np.unique(idx))

def computecentroids(x,idx):
    centroids=[]
    for i in range(len(np.unique(idx))):
        u_k=x[idx==i].mean(axis=0)
        centroids.append(u_k)
        #计算每类中心
    return np.array(centroids)
centroids=computecentroids(x,idx)
#print(centroids)
#print(sub,len(sub))
def plot_data(x,centroids,idx):
    sub=[]
    for i in range(centroids[0].shape[0]):
        x_i=x[idx==i]
        sub.append(x_i)
    colors=['black','g','salmon','black','salmon','yellow','orange','red','green','blue']
    fig,ax=plt.subplots(figsize=(6,6))
    for i in range(len(sub)):
        xx=sub[i]
        ax.scatter(xx[:,0],xx[:,1],c=colors[i],label='Cluster {}'.format(i))
    ax.set_xlabel('X1')
    ax.set_ylabel('X2')
    ax.set_title('Training Example')
    plt.legend()
    xx,yy=[],[]
    for i in centroids:
        xx.append(i[:,0])
        yy.append(i[:,1])
#    print(xx)
    plt.plot(xx,yy,'x--',c='r')
    plt.show()
#plot_data(x,[init_cent],idx)

def trainmodel(x,centroids,iters):
    K=len(centroids)
    centroids_fin=[]
    centroids_fin.append(centroids)
    centroids_temp=centroids
    for i in range(iters):
        idx=get_centroids(x,centroids_temp)
        centroids_temp=computecentroids(x,idx)
        centroids_fin.append(centroids_temp)
    return idx,centroids_fin
idx,centroids_fin=trainmodel(x,centroids,10)
#训练模型
#print(centroids_fin)
#plot_data(x,centroids_fin,idx)
def random_init(x,K):
    m,n=x.shape
    idx=np.random.choice(m,K)
    centroids=x[idx]
    return centroids
for i in range(1,10):
#尝试聚类簇数
    centroids=random_init(x,i)
    idx,centroids_fin=trainmodel(x,centroids,10)
    plot_data(x,centroids_fin,idx)
2.2 评估指标代码实现
from sklearn.metrics import silhouette_score
sc_score = silhouette_score(x,idx, metric='euclidean')

这里我们使用sklearn库中的现成评估函数

2.3 整体实现

整体代码如下:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.io import loadmat

from sklearn.metrics import silhouette_score

def load_data(path):
    data=loadmat(path)
    #读入数据,这里的数据是mat格式,所以使用loadmat函数
    x=data['X']
    return data,x
data,x=load_data('ex7data2.mat')
def view_data(x):
    fig,ax=plt.subplots(figsize=(6,6))
    ax.scatter(x[:,0],x[:,1],c='r')
    #画散点图
    ax.set_xlabel('X1')
    ax.set_ylabel('X2')
    ax.set_title('Training Example')
    plt.show()
#view_data(x)

def get_centroids(x,centroids):

    idx=[]
    max_distance=10000
    for i in range(len(x)):
        distance=((x[i]-centroids)[:,0])**2+((x[i]-centroids)[:,1])**2
        if distance.min()<max_distance:
            ci=np.argmin(distance)
            idx.append(ci)
    return np.array(idx)
init_cent=np.array([[3,3],[6,2],[8,5]])
idx=get_centroids(x,init_cent)
#返回每个样本所对应的类别
#print(idx,idx.shape)
#print(np.unique(idx))

def computecentroids(x,idx):
    centroids=[]
    for i in range(len(np.unique(idx))):
        u_k=x[idx==i].mean(axis=0)
        centroids.append(u_k)
        #计算每类中心
    return np.array(centroids)
centroids=computecentroids(x,idx)
#print(centroids)
#print(sub,len(sub))
def plot_data(x,centroids,idx):
    sub=[]
    for i in range(centroids[0].shape[0]):
        x_i=x[idx==i]
        sub.append(x_i)
    colors=['black','g','salmon','black','salmon','yellow','orange','red','green','blue']
    fig,ax=plt.subplots(figsize=(6,6))
    for i in range(len(sub)):
        xx=sub[i]
        ax.scatter(xx[:,0],xx[:,1],c=colors[i],label='Cluster {}'.format(i))
    ax.set_xlabel('X1')
    ax.set_ylabel('X2')
    ax.set_title('Training Example')
    plt.legend()
    xx,yy=[],[]
    for i in centroids:
        xx.append(i[:,0])
        yy.append(i[:,1])
#    print(xx)
    plt.plot(xx,yy,'x--',c='r')
    plt.show()
#plot_data(x,[init_cent],idx)

def trainmodel(x,centroids,iters):
    K=len(centroids)
    centroids_fin=[]
    centroids_fin.append(centroids)
    centroids_temp=centroids
    for i in range(iters):
        idx=get_centroids(x,centroids_temp)
        centroids_temp=computecentroids(x,idx)
        centroids_fin.append(centroids_temp)
    return idx,centroids_fin
idx,centroids_fin=trainmodel(x,centroids,10)
#训练模型
#print(centroids_fin)
#plot_data(x,centroids_fin,idx)
def random_init(x,K):
    m,n=x.shape
    idx=np.random.choice(m,K)
    centroids=x[idx]
    return centroids
sc_scores=[]
for i in range(2,10):
#尝试聚类簇数
    centroids=random_init(x,i)
    idx,centroids_fin=trainmodel(x,centroids,10)
    #print(idx)
    plot_data(x,centroids_fin,idx)
    sc_score = silhouette_score(x,idx, metric='euclidean')
    sc_scores.append(sc_score)
fig,ax=plt.subplots(figsize=(6,6))
ax.plot(np.arange(2,10),sc_scores)
ax.grid(True)
ax.set_xlabel('Number of Cluster')
ax.set_ylabel('Silhouette_score')
ax.set_title('Silhouette score for different numer of clusters of k means')

结果如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
轮廓曲线如下:
在这里插入图片描述
可知,这种情况下,K=3最合适。

需要数据集的朋友请私聊我。

未经允许,请勿转载。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

机器学习——聚类——距离聚类法——K-means 的相关文章

  • 人工智能知识表示与推理:构建智能系统的认知引擎

    导言 人工智能知识表示与推理是构建智能系统认知引擎的关键组成部分 本文将深入研究知识表示的方法和推理技术 以及它们在解决现实问题和提升智能系统智能水平中的作用 1 知识表示方法 符号表示法 使用符号和逻辑关系来表示知识 例如谓词逻辑 连接主
  • 【数学证明 笔记01】证明常见的逻辑方法有哪些?

    文章目录 一 声明 二 直接证明 三 反证法 四 数学归纳法 五 对证法 六 构造法 七 分情况讨论 一 声明 本帖持续更新中 如有纰漏 望指正 二 直接证明 原理 通过一系列逻辑推理和推断来证明目标命
  • 【YOLO算法训练数据集处理】缩放训练图片的大小,同时对图片的标签txt文件中目标的坐标进行同等的转换

    背景 在训练一个自己的yolo模型目标检测模型时 使用公共数据集时 通常要将图片缩放处理 而此时图片对应的标签文件中目标的坐标也应进行同等的变换 这样才能保证模型的正确训练 当然 如果是自建的数据集 则将图片进行缩放后 使用Labelimg
  • 机器学习---决策树

    介绍 决策树和随机森林都是非线性有监督的分类模型 决策树是一种树形结构 树内部每个节点表示一个属性上的测试 每个分支代表一个测试输出 每个叶子节点代表一个分类类别 通过训练数据构建决策树 可以对未知数据进行分类 随机森林是由多个决策树组成
  • 机器学习 项目结构 数据预测 实验报告

    需求 我经过处理得到了测试值 然后进一步得到预测和真实值的比较 然后再把之前的所有相关的参数 评估指标 预测值 比较结果都存入excel 另外我还打算做测试报告模板 包括敏感性分析等 您建议我这些功能如何封装这些功能 哪些功能放到一个文件中
  • 机器学习之迁移学习(Transfer Learning)

    概念 迁移学习 Transfer Learning 是一种机器学习方法 其核心思想是将从一个任务中学到的知识应用到另一个相关任务中 传统的机器学习模型通常是从头开始训练 使用特定于任务的数据集 而迁移学习则通过利用已经在一个任务上学到的知识
  • 机器学习 项目结构 数据预测 实验报告

    需求 我经过处理得到了测试值 然后进一步得到预测和真实值的比较 然后再把之前的所有相关的参数 评估指标 预测值 比较结果都存入excel 另外我还打算做测试报告模板 包括敏感性分析等 您建议我这些功能如何封装这些功能 哪些功能放到一个文件中
  • 【提示工程】Chain-of-Thought Prompting Elicits Reasoning in Large Language Models

    解决问题 探索大语言模型解决推理问题的能力 从头训练或微调模型 需要创建大量的高质量含中间步骤的数据集 成本过大 相关工作 1 使用中间步骤来解决推理问题 1 使用自然语言通过一系列中间步骤解决数学应用题 2 通过创建更大的数据集微调语言模
  • 澳鹏干货解答!“关于机器学习的十大常见问题”

    探索机器学习的常见问题 了解机器学习和人工智能的基本概念 原理 发展趋势 用途 方法和所需的数据要求从而发掘潜在的商机 什么是机器学习 机器学习即教授机器如何学习的过程 为机器提供指导 帮助它们自己开发逻辑 访问您希望它们访问的数据 机器学
  • 详解数据科学自动化与机器学习自动化

    过去十年里 人工智能 AI 构建自动化发展迅速并取得了多项成就 在关于AI未来的讨论中 您可能会经常听到人们交替使用数据科学自动化与机器学习自动化这两个术语 事实上 这些术语有着不同的定义 如今的自动化机器学习 即 AutoML 特指模型构
  • Python机器学习实战:用Python构建10个有趣的应用

    机器学习是一门强大的工具 可以用于解决各种各样的问题 通过学习机器学习 您可以开发出能够自动化任务 做出预测甚至创造艺术的应用程序 如果您是一名 Python 开发人员 那么您将很高兴知道 有许多可以用 Python 构建的有趣机器学习应用
  • 时间序列平稳性相关检验方法

    理解平稳性 一般来说 平稳时间序列是指随着时间的推移具有相当稳定的统计特性的时间序列 特别是在均值和方差方面 平稳性可能是一个比较模糊的概念 将序列排除为不平稳可能比说序列是平稳的更容易 通常不平稳序列有几个特征 平均值随时间推移发生变化
  • 山西电力市场日前价格预测【2024-01-05】

    日前价格预测 预测说明 如上图所示 预测明日 2024 01 05 山西电力市场全天平均日前电价为259 10元 MWh 其中 最高日前电价为363 99元 MWh 预计出现在18 00 最低日前电价为0 00元 MWh 预计出现在11 1
  • 蒙牛×每日互动合作获评中国信通院2023“数据+”行业应用优秀案例

    当前在数字营销领域 品牌广告主越来越追求品效协同 针对品牌主更注重营销转化的切实需求 数据智能上市企业每日互动 股票代码 300766 发挥自身数据和技术能力优势 为垂直行业的品牌客户提供专业的数字化营销解决方案 颇受行业认可 就在不久前举
  • 自动驾驶轨迹预测

    目录 神经网络轨迹预测综述 比较新的轨迹预测网络 Uber LaneRCNN 5 Google VectorNet 6 Huawei HOME 7 Waymo TNT 8 Aptive Covernet 9 NEC R2P2 10 商汤 T
  • 【需求响应】改进连续时间控制方法用于分散式需求响应的恒温负荷研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python代码及文章
  • 毕业设计-基于深度学习的细菌微生物目标检测系统系统 YOLO python 目标检测 人工智能 卷积神经网络 机器学习

    目录 前言 设计思路 一 课题背景与意义 二 算法理论原理 2 1 CBAM模块 2 2 损失函数 三 检测的实现 3 1 数据集 3 2 实验环境搭建 3 3 实验及结果分析 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一
  • 3D点云检测神技 | UFO来了!让PointPillars、PV-RCNN统统涨点!

    作者 AI驾驶员 编辑 智驾实验室 点击下方 卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 3D目标检测 技术交流群 本文只做学术分享 如有侵权 联系删文 在这篇论文中提出了一个关于在3D点云中检测未
  • GPT4+Python近红外光谱数据分析及机器学习与深度学习建模

    详情点击链接 GPT4 Python近红外光谱数据分析及机器学习与深度学习建模 第一 GPT4 入门基础 1 ChatGPT概述 GPT 1 GPT 2 GPT 3 GPT 3 5 GPT 4模型的演变 2 ChatGPT对话初体验 注册与
  • 自动驾驶离不开的仿真!Carla-Autoware联合仿真全栈教程

    随着自动驾驶技术的不断发展 研发技术人员开始面对一系列复杂挑战 特别是在确保系统安全性 处理复杂交通场景以及优化算法性能等方面 这些挑战中 尤其突出的是所谓的 长尾问题 即那些在实际道路测试中难以遇到的罕见或异常驾驶情况 这些问题暴露了实车

随机推荐

  • XSS靶场第三关秘籍

    查看页面源代码 直接插入我们的代码进行尝试 没有弹窗 查看页面源代码 发现我们的 被实体编码了 这里把 改成
  • DBUtils工具类的使用方法详解

    DBUtils使用方法详解 目录 DBUtils使用方法详解 一 前言 二 JDBC介绍 1 基本概念 2 JDBC访问数据库的流程 三 DBUtils介绍 1 基本概念 2 配置文件 3 创建JDBCUtils类 4 实现对数据表的增删改
  • springboot整合knife4j,从此告别手写接口文档

    关于knife4j Knife4j的前身是swagger bootstrap ui 前身swagger bootstrap ui是一个纯swagger ui的ui皮肤项目 一开始项目初衷是为了写一个增强版本的swagger的前端ui 但是随
  • 递归求和

    用阶乘求1到100的和 思路 递归结束条件 n 1 递归公式 n sum n 1 include
  • 泛型T E K V ?

    Java泛型中E T K V等的含义 Java泛型中的标记符含义 E Element 在集合中使用 因为集合中存放的是元素 T Type Java 类 K Key 键 V Value 值 N Number 数值类型 表示不确定的java类型
  • 蓝牙模块调试总结(BLE\HC-05\HC-06\HC-01\MLT-BT05)

    最近在使用蓝牙模块与手机进行联合调试 遇到了一些问题 在此总结一下 1 蓝牙模块分类 MLT BT05 4 0蓝牙模块 指令集详细说明 MLT BT05 4 0 蓝牙串口模块指令为 Command 指令集 注 发 AT 指令时必须回车换行
  • 针对三角形问题,使用边界值分析法设计测试用例

    一 测试问题描述 输入三个整数a b c 分别作为三角形的三条边 通过程序判断这三条边是否能构成三角形 如果能构成三角形 则判断三角形的类型 等边三角形 等腰三角形 一般三角形 要求输入三个整数a b c 必须满足以下条件 1 a 200
  • Satck与Queue要点

    Satck Stack定义 核心接口 stack源码 栈的实现 静态数组实现栈 动态数组实现栈 链表实现栈 queue queue与stack queue的实现 Satck Stack定义 stack的特点是先进先出 与queue正好相反
  • 一个局域网中,不同网段的服务器能通信吗?

    文章目录 起步 环境说明 B ping A A ping B 子网的误判 感谢 起步 在一个局域网中存在两台服务器 A B A IP 192 168 211 110 NETMASK 255 255 255 0 B IP 192 168 21
  • QT 新手小白USBCAN 学习

    一 介绍CAN总线 CAN总线介绍 二 USBCAN总线 2 1 产品介绍 USBCAN 转换器模块实现了将 CAN 总线接口与 USB 接口进行相互转换 可以 简单方便的通过电脑监视 CAN 总线网络 同时可以实现工业现场数据稳定的双 向
  • php xml数据类型,PHP实现XML与数据格式进行转换类实例

    xml2array will convert the given XML text to an array in the XML structure Link http www bin co com php scripts xml2arra
  • Java架构师成长升级历程

    目录 前言 一 学习途径整理 目录 前言 一 学习途径整理 二 如何高效的学习 三 书籍推荐 MQ相关 云原生相关 Redis相关 架构相关 Mybaits 四 优秀博文整理 五 极客时间 六 硬核公众号推荐 七 宝藏学习网站 八 架构设计
  • just4fun:神奇的代码生成好看的图片

    原文链接 用三段 140 字符以内的代码生成一张 1024 1024 的图片 在VS2015下 试了一下生成下图的代码 生成ppm格式图片的代码如下 include
  • 论文笔记:TIMESNET: TEMPORAL 2D-VARIATION MODELINGFOR GENERAL TIME SERIES ANALYSIS

    ICLR 2023 1 intro 时间序列一般是连续记录的 每个时刻只会记录一些标量 之前的很多工作着眼于时间维度的变化 以捕捉时间依赖关系 gt 可以反映出 提取出时间序列的很多内在特征 比如连续性 趋势 周期性等 但是现实时间序列数据
  • 服务器运行tomcat报错误java.security.UnrecoverableKeyException: Cannot recover key

    问题 项目部署在阿里云服务器上 一直都是正常运行 因业务需要重启服务器 之后就启动tomcat 然后就发现启动不了了 报错 java security UnrecoverableKeyException Cannot recover key
  • MVS、SFM的区别和联系

    文章目录 一 双目相机重建步骤 二 SFM重建步骤 三 MVS重建步骤 四 SFM 和MVS 各自的目的 五 传统MVS和深度学习MVS对比 一 双目三维重建 binocular stereo 输入左右两张图片 二 SFM Structur
  • 法律法规

    法律体系 我国法律体系基本框架 由宪法和宪法相关法 民法商法 行政法 经济法 社会法 刑法 诉讼及非诉讼程序法构成 法的形式 法的形式的4个含义 1 法律规范的创制机关的性质及级别 2 法律规范的外部表现形式 3 法律规范的效力等级 4 法
  • 平时都用Python绘制二维图,如果用来绘制三维图会有什么效果?

    前言 本文的文字及图片来源于网络 仅供学习 交流使用 不具有任何商业用途 版权归原作者所有 如有问题请及时联系我们以作处理 通常我们用 Python 绘制的都是二维平面图 但有时也需要绘制三维场景图 比如像下面这样的 这些图怎么做出来呢 今
  • 备赛电赛学习STM32篇(九):ADC

    目录 一 ADC的简介 二 逐次逼近型ADC 2 1 逐次逼近型ADC框图 2 2 STM32 ADC内部介绍 2 2 1 STM32ADC的通道以及存储数据的寄存器 2 2 2 触发方式 2 2 3 STM32ADC时钟部分 2 2 4
  • 机器学习——聚类——距离聚类法——K-means

    目录 理论部分 1 1 聚类概念 1 1 1 定义 1 1 2 与分类的区别 1 2 相似度测量 1 2 1 欧式距离 1 2 2 马氏距离 1 3 聚类准则 1 3 1 试探方法 1 3 2 聚类准则法 1 4 常见聚类方法 1 5 K均