聚类算法 | Kmeans:肘方法、Kmeans++、轮廓系数 | DBSCAN

目录

  • 一. 聚类算法划分方式
    • 1. 划分式
    • 2. 层次式
    • 3. 基于密度
    • 4. 基于网络
    • 5. 基于模型
  • 二. K-means算法
    • 1. K-means算法公式表达
    • 2. K-means算法流程
    • 3. Kmeans算法缺点
      • 3.1 肘方法
      • 3.2 k-means++ 算法
        • 3.2.1 k-means|| 算法
      • 3.3 Mini Batch K-Means 算法
    • 4. 聚类评估
  • 三. DBSCAN算法
    • 1. DBSCAN算法组成
      • 1.1 核心点
      • 1.2 边界点
      • 1.3 噪声点
    • 2. DBSCAN算法原理
    • 3. DBSCAN算法流程
    • 4. DBSCAN 超参数选择

本篇文章我们来讲机器学习篇章中的最后一个专题:聚类算法

那么,什么是聚类呢?

	聚类(Clustering):
	按照某个特定标准(如距离),把一个数据集分割成不同的类或簇
		使同一个簇内的数据对象相似性尽可能大
		不在同一个簇中的数据对象差异性也尽可能地大
	即聚类后同一类的数据尽可能聚集到一起,不同类数据尽量分离

简单说,聚类算法就是物以类聚,人以群分

注意:聚类算法是机器学习篇中接触到的第二个无监督算法(前面讲过PCA)

一. 聚类算法划分方式

1. 划分式

  • K-Means算法(均值)
  • K-medoids算法(中值)
  • K-modes算法(众数)
  • K-prototypes算法
  • CLARANS(基于选择)
  • K-Means++
  • bi-KMeans

2. 层次式

  • BIRCH算法(平衡迭代规约)
  • CURE算法(点聚类)
  • CHAMELEON(动态模型)
  • Agglomerative(凝聚式)
  • Divisive(分裂式)

3. 基于密度

  • DBSCAN(基于密度连接区域)
  • DENCLUE(密度分布函数)
  • OPTICS(对象排序识别)

4. 基于网络

  • STING(统计信息网络)
  • CLIOUE(聚类高维空间)
  • WAVE-CLUSTER(小波变换)

5. 基于模型

  • 统计学方法(比如GMM)
  • 神经网络(比如SOM(Self Organized Maps))

二. K-means算法

牧师村民模型:

有四位牧师前往乡村布道。起初,他们随意选择了几个布道点,并向乡村所有村民公布了这些点的情况。于是,每位村民都前往离家最近的布道点听课

听完课后,大家觉得距离太远了。于是每位牧师统计了自己所有听课村民的地址,并搬到了这些地址的中心地带。他们在海报上更新了自己的布道点位置

每次移动后,牧师不可能让所有人都更近。有些人发现A牧师搬迁后,去B牧师那听课反而更近。于是每位村民又选择了离自己最近的布道点

牧师每周更新位置,村民根据情况选择布道点,最终实现了稳定

上述过程我们用图像描述如下:
在这里插入图片描述

这里补充:【Kmeans聚类的可视化演示

1. K-means算法公式表达

算法评价:算法简单,聚类效果好,即使是在巨大的数据集上也非常容易部署实施

	K-Means算法有大量的变体
		包括:初始化优化K-Means++ 以及大数据应用背景下的 k-means|| 和 Mini Batch K-Mean
  • K-Means算法操作:按照样本之间的距离大小,将样本集划分为 K 个簇
  • 目的:让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大。

用数学表达式表示,假设簇划分为 ( C 1 , C 2 , … C k ) \left(C_{1}, C_{2}, \ldots C_{k}\right) (C1,C2,Ck) ,则我们的目标是最小化平方误差 E \mathrm{E} E :

E = ∑ i = 1 k ∑ x ∈ C i ∥ x − μ i ∥ 2 2 E=\sum_{i=1}^{k} \sum_{x \in C_{i}}\left\|x-\mu_{i}\right\|_{2}^{2} E=i=1kxCixμi22

其中 μ i \mu_{i} μi 是簇 C i C_{i} Ci 的均值向量,有时也称为质心,表达式为:

μ i = 1 ∣ C i ∣ ∑ x ∈ C i x \mu_{i}=\frac{1}{\left|C_{i}\right|} \sum_{x \in C_{i}} x μi=Ci1xCix

2. K-means算法流程

输入:样本集 D = { x 1 , x 2 , … . x N } D=\left\{x_{1}, x_{2}, \ldots . x_{N}\right\} D={x1,x2,.xN} , 聚类的簇数 k k k ,最大迭代次数 T T T
输出:簇划分 C = { C 1 , C 2 , … C k } C=\left\{C_{1}, C_{2}, \ldots C_{k}\right\} C={C1,C2,Ck}

具体操作:

  1. 从数据集 D \mathrm{D} D 中随机选择 k \mathrm{k} k 个样本作为初始的质心向量,即 { μ 1 , μ 2 , … , μ k } \left\{\mu_{1}, \mu_{2}, \ldots, \mu_{\mathrm{k}}\right\} {μ1,μ2,,μk} ,将每个簇初始化为空集

  2. 当迭代次数 t = 1 , 2 , … , T ) t=1,2, \ldots, \mathrm{T} ) t=1,2,,T)
    a):计算样本 x i x_{i} xi 到各个质心向量 μ j \mu_{j} μj 的欧式距离
    b):将 x i x_{i} xi 划分到最近的簇中,即更新 C j = C j ∪ { x i } C_{\mathrm{j}}=\mathrm{C}_{\mathrm{j}} \cup\left\{\mathrm{x}_{\mathrm{i}}\right\} Cj=Cj{xi}
    c):重新计算 C j C_{j} Cj 中所有样本点的质心
    μ j = 1 ∣ C j ∣ ∑ x ∈ C j x \mu_{j}=\frac{1}{\left|C_{j}\right|} \sum_{x \in C_{j}} x μj=Cj1xCjx

    d):只有当 k \mathrm{k} k 个质心向量都没有发生变化,则转到步骤3

  3. 输出簇划分 C = { C 1 , C 2 , … C k } C=\left\{C_{1}, C_{2}, \ldots C_{k}\right\} C={C1,C2,Ck}

3. Kmeans算法缺点

  • 聚类中心的个数K需要事先给定
    但实际中K值的选定是非常困难的,很多时候我们并不知道给定的数据集应该聚成多少个类别才最合适

  • Kmeans算法需要随机地确定初始聚类中心
    不同的初始聚类中心可能导致完全不同的聚类结果,有时会导致算法收敛很慢甚至出现聚类出错的情况

3.1 肘方法

针对第一个缺点,通常我们会根据先前的经验选择一个合适的k值,如果没有先验知识,则可以使用“肘方法”来选择一个合适的k值

	肘方法,也称为手肘法或Knee of SSE,是用于确定聚类算法中最优聚类数(K值)的一种启发式方法
	
		核心概念:在聚类分析中,特别是在K-means聚类算法中,我们需要预先指定簇的数量K。为了找到最佳的K值,通常会使用误差平方和(SSE)作为评估标准
		操作方式:随着聚类数量K的增加,样本会被划分得越来越精细,每个簇内的紧密程度提高,因此SSE会逐渐减小
		     		当K值小于实际的聚类数量时,增加K会显著降低SSE
		     		当K值达到实际聚类数量后,再增加K,SSE的下降速度会突然减慢
		实际应用:在实践中,通过计算不同K值对应的SSE,并将这些点绘制在图表上,寻找“肘部”出现的点
			 		即:SSE下降速度减缓的转折点,该点的K值通常被认为是数据集中真实的聚类数量

讲该方法抽象为数学公式:
S S E = ∑ i = 1 k ∑ p ∈ C i ∣ p − m i ∣ 2 SSE=\sum_{i=1}^{k} \sum_{p \in C_{i}}\left|p-m_{i}\right|^{2} SSE=i=1kpCipmi2

其中 C i C_{i} Ci 为第 i i i 个簇, m i m_{i} mi 为第 i i i 个质心, p p p 为属于 C i C_{i} Ci 的数据点,SSE代表了聚类效果

3.2 k-means++ 算法

针对第二个缺点:可以通过k-means++算法来解决,即对于初始化质心的优化策略

  1. 从输入的数据点集合中随机选择一个点作为第一个聚类中心 μ 1 μ1 μ1
  2. 对于数据集中的每一个点 x i x_{i} xi,计算到已选择中心点的最近聚类中心的距离D
  3. 选择一个新的数据点作为新的聚类中心,选择的原则是:
         D较大的点,被选取作为聚类中心的概率较大
  4. 重复2和3,直到选择出k个聚类质心
  5. 利用这k个质心来作为初始化质心,运行标准的K-Means算法

这里对下一个聚类中心点的选举方式做解释:

  1. 对于距离最远的样本点,可能是离群点
  2. 对于单个最远距离的离群点,其概率或许很大;但整体看待一个簇的概率时,单个离群点的概率就很小
3.2.1 k-means|| 算法

k-means||是k-means++的变体,k-means||在初始化中心点时对kmeans++的缺点做了
规避,主要体现在:

	不需要根据k的个数严格地寻找k个点
	
	主要思路:
	改变每次遍历时的取样规则
	每次获取 K个样本,重复该取样操作O(logn)次
	将这些抽样出来的样本聚类出K个点

使用这K个点作为K-Means算法的初始聚簇中心点(实践证明:一般5次重复采用就可以保证一个比较好的聚簇中心点)

相关参考论文

3.3 Mini Batch K-Means 算法

在传统的K-Means算法中,要计算所有的样本点到所有的质心的距离,如果样本量非常大,算法非常耗时;因此,在海量数据面前,Mini Batch K-Means应运而生

  • Mini Batch操作:
    用样本集中的一部分的样本来做传统的K-Means,避免样本量太大时的计算难题,同时算法收敛速度也大大加快

     	选择一个合适的批样本大小batch size,用batch size个样本来做K-Means聚类
     	
     	对于batch size:一般是通过无放回的随机采样得到的
    
  • Mini Batch代价:
    聚类的精确度会有一些降低,一般来说这个降低的幅度在可以接受的范围之内

4. 聚类评估

  • 簇内不相似度:计算样本 i i i到同簇其它样本的平均距离为 a i a_{i} ai
                      a i a_{i} ai越小,表示样本 i i i 越应该被聚类到该簇

C C C 中的所有样本的 a i a_{i} ai均值被称为簇 C C C的凝聚度

  • 簇间不相似度:计算样本 i i i到最近簇 C j C_{j} Cj(非自身所在簇)所有样本的平均距离 b i b_{i} bi
                      具体:计算所有簇中样本到样本 i i i的平均距离,取距离最小的簇

                       b i b_{i} bi越大,表示样本 i i i越不属于其它簇

  • 轮廓系数: s i s_{i} si 取值范围为 [ − 1 , 1 ] [-1,1] [1,1]
                越接近1表示样本 i i i聚类越合理
                越接近-1,表示样本 i i i应该分类到另外的簇中
                近似为0,表示样本 i i i应该在边界上

所有样本 s i s_{i} si的均值被称为聚类结果的轮廓系数

s ( i ) = b ( i ) − a ( i ) max ⁡ { 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)

s ( i ) = { 1 − a ( i ) b ( i ) , a ( i ) < b ( i ) 0 , a ( i ) = b ( i ) b ( i ) a ( i ) − 1 , a ( i ) > b ( i ) s(i)=\left\{\begin{array}{ll} 1-\frac{a(i)}{b(i)}, & a(i)<b(i) \\ \\ 0, & a(i)=b(i) \\ \\ \frac{b(i)}{a(i)}-1, & a(i)>b(i) \end{array}\right. s(i)= 1b(i)a(i),0,a(i)b(i)1,a(i)<b(i)a(i)=b(i)a(i)>b(i)


补充:当簇中存在异常点时,使用K-Mediods聚类(K中值聚类)的效果优于Kmeans

三. DBSCAN算法

基于距离的聚类算法对于球状簇的聚类效果并不好

而对于基于密度的聚类算法,聚类形状可以为任意形状:

	通过在数据集中寻找被低密度区域分离的高密度区域,将分离出的高密度区域作为一个独立的类别

在这里插入图片描述
DBSCAN,即Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法,是基于密度空间的聚类算法

	具体原理:
		每个簇类的密度高于该簇类周围的密度
		噪声的密度小于任一簇类的密度

		因此DBSCAN算法也能用于异常点检测

在这里插入图片描述

1. DBSCAN算法组成

DBSCAN算法处理后的聚类样本点分为:

  • 核心点(core points)
  • 边界点(border points)
  • 噪声点(noise)

超参数:距离 Ɛ Ɛ Ɛ 和 邻居数目 M i n P t s MinPts MinPts

1.1 核心点

对某一数据集 D D D,若样本 p p p ε \varepsilon ε - 邻域内至少包含MinPts个样本(包括样本 p p p),那么样本 p p p称核心点。即:

N ε ( p ) ≥ MinPts ⁡ N_{\varepsilon}(p) \geq \operatorname{MinPts} Nε(p)MinPts

其中 ε \varepsilon ε - 邻域 N ε ( p ) N_{\varepsilon}(\mathrm{p}) Nε(p) 的表达式为:

N ε ( p ) = { q ∈ D ∣ dist ⁡ ( p , q ) ≤ ε } N_{\varepsilon}(p)=\{q \in D \mid \operatorname{dist}(p, q) \leq \varepsilon\} Nε(p)={qDdist(p,q)ε}

1.2 边界点

若样本 b b b 在任意核心点 p p p Ɛ Ɛ Ɛ- 邻域内,但是它的 Ɛ Ɛ Ɛ- 邻域内的样本数少于 M i n P t s MinPts MinPts(包括样本p),那么样本b称为边界点

1.3 噪声点

如果样本n既不是核心点,也不是边界点,则称为噪声点

在这里插入图片描述

假设 M i n P t s = 4 MinPts = 4 MinPts=4
红色:核心点
黄色:边界点
蓝色:噪声点

2. DBSCAN算法原理

  • 密度直达(directly density-reachable)
    p p p为核心点, q q q处于 p p p Ɛ Ɛ Ɛ- 邻域内,则称 q q q p p p密度直达

  • 密度可达(density-reachable)
    p 1 , p 2 , . . . , p n p_{1},p_{2},...,p_{n} p1p2...pn 均为核心点,且 p i p_{i} pi p i + 1 p_{i+1} pi+1密度直达(因此
    p i + 1 p_{i+1} pi+1 p i p_{i} pi密度直达),则称 p 1 , p 2 , . . . , p n p_{1},p_{2},...,p_{n} p1p2...pn两两之间均密度可达

  • 密度相连(density-connected)
    p p p q q q密度可达,则 p p p Ɛ Ɛ Ɛ-邻域内的任何点与 q q q Ɛ Ɛ Ɛ-邻域内的任何点都密度相连
    在这里插入图片描述

     假设MinPts=5
     
     		红色:核心点
     		黑色:不是核心点
     	所有由核心点密度直达的点,都在以该核心点为中心的超球体内
     	反之,如果某个点不能密度直达,则不在超球体内
     	
     	绿色箭头连接起来的核心点组成了密度可达的样本序列
    
     	在密度可达的样本序列的 Ɛ- 邻域内,所有的样本相互都是密度相连的
    

只要两个样本点是密度相连的关系,那么该两个样本点归为同一簇类

3. DBSCAN算法流程

	从数据集D中随机选择一个核心点作为“种子”,由该种子出发确定相应的聚类簇,当遍历完与之密度可达的所有核心点时,一次聚类结束
  1. 任意选取一个点:
    以该点为中心,找到与这个点距离 ≤ Ɛ \leƐ Ɛ 的所有的点

        如果数据点个数 < < < MinPts,那么这个点被标记为噪声 / 边界点
        如果数据点个数 ≥ \ge MinPts,那么这个点被标记为核心样本,并被分配一个新的簇标签

  2. 访问该点在 Ɛ Ɛ Ɛ内的所有邻居:

        如果样本点还没有被分配一个簇,那么就将刚刚创建的新簇标签分配给它们
        如果它们是核心样本,那么就依次访问其邻居,以此类推
        簇逐渐增大,直到在簇的 Ɛ Ɛ Ɛ 距离内没有更多的核心样本为止

  3. 选取另一个尚未被访问过的点,并重复相同的过程

4. DBSCAN 超参数选择

	Ɛ 设置得非常小,则意味着没有点是核心样本,可能会导致所有点被标记为噪声
	Ɛ 设置得非常大,可能会导致所有点形成单个簇
	Ɛ 可以隐式地控制簇的个数
	
	使用 StandarScaler 或 MinMaxScaler 对数据进行缩放,有时更容易找到 Ɛ 的较好取值;因为使用缩放技术将确保所有特征具有相似的范围

感谢阅读🌼
如果喜欢这篇文章,记得点赞👍和转发🔄哦!
有任何想法或问题,欢迎留言交流💬,我们下次见!
本文相关代码存放位置
    【聚类算法

祝愉快🌟!


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

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

相关文章

秋招学习数据库LeetCode刷题

数据库基本知识以前学过次数较多&#xff0c;今天看完一遍后都是可以理解的。直接刷Leetcode题吧 牛客上题库刷基础&#xff0c;Leetcode刷 写语句题(争取坚持每日2个sql语句题) 牛客&#xff1a;https://www.nowcoder.com/exam/intelligent?questionJobId10&tagId21015 L…

C#速览入门

C# & .NET C# 程序在 .NET 上运行&#xff0c;而 .NET 是名为公共语言运行时 (CLR) 的虚执行系统和一组类库。 CLR 是 Microsoft 对公共语言基础结构 (CLI) 国际标准的实现。 CLI 是创建执行和开发环境的基础&#xff0c;语言和库可以在其中无缝地协同工作。 用 C# 编写的…

私域必备神器来袭!朋友圈转发一键搞定!

在私域运营中&#xff0c;朋友圈的转发和管理是至关重要的环节。为了能够更好的管理和运营多个微信号的朋友圈&#xff0c;很多人都开始使用微信管理系统来辅助自己开展管理和运营工作。 接下来&#xff0c;就一起来看看微信管理系统的朋友圈管理功能吧&#xff01; 首先&…

π162U31 增强ESD功能,3.0kVrms隔离电压150kbps 六通道数字隔离器 可提高工业应用系统性能

π162U31产品概述&#xff1a; π162U31是一款数字隔离器&#xff0c;π162U31数字隔离器具有出色的性能特 征和可靠性&#xff0c;整体性能优于光耦和基于其他原理的数字隔离器 产品。 智能分压技术(iDivider技术)利用电容分压原理&#xff0c; 在不需要调制和解调的情况下&a…

【测试开发学习历程】python流程控制

前言&#xff1a;写到这里也许自己真的有些疲惫了&#xff0c;但是人生不就是像西西弗斯推石上山一样的枯燥乏味吗&#xff1f; 在python当中的流程控制主要包含以下两部分的内容&#xff1a; 条件判断 循环 1 条件判断 条件判断用if语句实现&#xff0c;if语句的几种格式…

【研发管理】产品经理知识体系-数字化战略

导读: 数字化战略对于企业的长期发展具有重要意义。实施数字化战略需要企业从多个方面进行数字化转型和优化&#xff0c;以提高效率和创新能力&#xff0c;并实现长期竞争力和增长。 目录 1、定义 2、数字化战略必要性 3、数字战略框架 4、数字化转型对产品和服务设计的影响…

京东云轻量云主机8核16G配置租用价格1198元1年、4688元三年

京东云轻量云主机8核16G服务器租用优惠价格1198元1年、4688元三年&#xff0c;配置为8C16G-270G SSD系统盘-5M带宽-500G月流量&#xff0c;华北-北京地域。京东云8核16G服务器活动页面 yunfuwuqiba.com/go/jd 活动链接打开如下图&#xff1a; 京东云8核16G服务器优惠价格 京东云…

截稿倒计时 CCF-B 推荐会议EGSR’24论文摘要4月9日提交

会议之眼 快讯 第35届EGSR 2024 (Eurographics Symposium on Rendering)即欧洲图形学渲染专题讨论会将于 2024 年 7月3日-5日在英国伦敦帝国理工学院举行&#xff01;在EGSR之前&#xff0c;将有一个全新的联合研讨会&#xff0c;即材料外观建模&#xff08;MAM&#xff09;和…

非机构化解析【包含PDF、word、PPT】

此项目是针对PDF、docx、doc、PPT四种非结构化数据进行解析&#xff0c;识别里面的文本和图片。 代码结构 ├── Dockerfile ├── requirements ├── resluts ├── test_data │ ├── 20151202033304658.pdf │ ├── 2020_World_Energy_Data.pdf │ ├── …

JVM字节码与类的加载——class文件结构

文章目录 1、概述1.1、class文件的跨平台性1.2、编译器分类1.3、透过字节码指令看代码细节 2、虚拟机的基石&#xff1a;class文件2.1、字节码指令2.2、解读字节码方式 3、class文件结构3.1、魔数&#xff1a;class文件的标识3.2、class文件版本号3.3、常量池&#xff1a;存放所…

【MATLAB源码-第181期】基于matlab的32QAM调制解调系统频偏估计及补偿算法仿真,对比补偿前后的星座图误码率。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 在通信系统中&#xff0c;频率偏移是一种常见的问题&#xff0c;它会导致接收到的信号频率与发送信号的频率不完全匹配&#xff0c;进而影响通信质量。在调制技术中&#xff0c;QPSK&#xff08;Quadrature Phase Shift Keyi…

python打印杨辉三角形

杨辉三角形&#xff0c;这个在国外被叫做帕斯卡三角形&#xff0c;中华文明为何立于世界之颠&#xff0c;这个就是最好的证明&#xff0c;古人的杨辉至少是这个帕斯卡的鼻祖辈&#xff0c;比帕某早了393年发现&#xff0c;那时候可没有知识产权概率&#xff0c;不然就是妥妥的侵…

[尚硅谷 flink] 基于时间的合流——双流联结(Join)

文章目录 8.1 窗口联结&#xff08;Window Join&#xff09;8.2 **间隔联结&#xff08;Interval Join&#xff09;** 8.1 窗口联结&#xff08;Window Join&#xff09; Flink为基于一段时间的双流合并专门提供了一个窗口联结算子&#xff0c;可以定义时间窗口&#xff0c;并…

鲸鱼优化算法(Whale Optimization Algorithm)

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 算法背景 鲸鱼优化算法&#xff08;Whale Optimization Algorithm, WOA&#xff09;是一种模拟鲸鱼捕食行为的优化算法。想象一下&#xff0c;你…

一文学会Semaphore(信号量)

// 空出来椅子 semaphore.release(count); } } catch (Exception e){ } } }; t.setName("Thread --> " i); t.start(); } } 程序将一直执行下去&#xff0c;不会漏单&#xff0c;也不会出现椅子占用数量大于20的情况。 AQS基础 Semaphore是一种共享锁&#xf…

若依框架mysql 搜索中文等于不生效

背景&#xff0c;字段存储的是中文 不生效代码如下 <if test"constellation ! null and constellation ! ">AND u.constellation #{constellation}</if> 正确生效的代码如下 <if test"constellation ! null and constellation ! ">A…

kubernetes集群添加到jumpserver堡垒机里管理

第一步、在kubernetes集群中获取一个永久的token。 jumpserver堡垒机用api的来管理kubernetes&#xff0c;所以需要kubernetes的token&#xff0c;这个token还需要是一个永久的token&#xff0c;版本变更&#xff1a;Kubernetes 1.24基于安全方面的考虑&#xff08;特性门控Le…

C语言自定义类型变量——结构体(二)

前言&#xff1a;上一篇内容中我们概述了结构体的基本内容&#xff0c;包括结构体的定义&#xff0c;声明&#xff0c;创建和初始化&#xff0c;内存对齐等问题&#xff0c;本篇将进一步深入结构体相关内容&#xff0c;包括为什么会存在内存对齐&#xff0c;结构体如何传参&…

【JavaWeb】Day35.MySQL概述——数据库设计-DDL(二)

表操作 关于表结构的操作也是包含四个部分&#xff1a;创建表、查询表、修改表、删除表。 1.创建 语法 create table 表名( 字段1 字段1类型 [约束] [comment 字段1注释 ], 字段2 字段2类型 [约束] [comment 字段2注释 ], ...... 字段n 字段n类型 [约束] [comment …

Matlab应用层生成简述

基础软件层 目前接触到的几款控制器&#xff0c;其厂商并没有提供simulink的基础软件库一般为底层文件被封装为lib&#xff0c;留有供调用API接口虽然能根据API接口开发基础软件库&#xff0c;但耗费时间过长得不偿失 应用层 所以可以将应用层封装为一个子系统&#xff0c;其…