勘探开发人工智能技术:机器学习(3)

0 提纲

4.1 logistic回归
4.2 支持向量机(SVM)
4.3 PCA

1 logistic回归

用超平面分割正负样本, 考虑所有样本导致的损失.

1.1 线性分类器

logistic 回归是使用超平面将空间分开, 一边是正样本, 另一边是负样本. 因此, 它是一个线性分类器.
如图所示, 若干样本由两个特征描述, 对应于二维平面上的点.

  • 它们为正样本或负样本, 由不同颜色表示.
  • 现在需要使用一条直线将正、负样本分开. 这样, 对于新的样本, 就看它落在直线的哪一边, 由此判断正负.
  • 这条直线就是线性分类器. 显然, 对于更高维的数据, 其线性分类器就是一个超平面.

在这里插入图片描述

  • 输入:数据矩阵 X = ( x i j ) n × m ∈ R n × m \mathbf{X} = (x_{ij})_{n \times m} \in \mathbb{R}^{n \times m} X=(xij)n×mRn×m, 二分类标签向量 Y = ( y i ) n × 1 ∈ { 0 , 1 } n \mathbf{Y} = (y_i)_{n \times 1} \in \{0, 1\}^n Y=(yi)n×1{0,1}n.
  • 输出 m m m维空间上的一个超平面 w x = 0 \mathbf{w} \mathbf{x} = \mathbf{0} wx=0, 其中 w , x ∈ R m + 1 \mathbf{w}, \mathbf{x} \in \mathbb{R}^{m+1} w,xRm+1
  • 优化目标
    max ⁡ ∏ n h ( x i ) y i ( 1 − h ( x i ) ) 1 − y i \max \prod^n h(\mathbf{x}_i)^{y_i}(1- h(\mathbf{x}_i))^{1 - y_i} maxnh(xi)yi(1h(xi))1yi
    其中, x i = { x i 1 , x i 2 , … , x i m } \mathbf{x}_i = \{x_{i1}, x_{i2}, \dots, x_{im}\} xi={xi1,xi2,,xim}, R m + 1 \mathbb{R}^{m+1} Rm+1增加的一维用于处理常数偏移量,这与线性回归的方式相同; h ( x i ) = 1 1 + e − w T x i h(\mathbf{x}_i) = \frac{1}{1+ e^{-\mathbf{w}^\mathbf{T}\mathbf{x}_i}} h(xi)=1+ewTxi1为sigmoid函数,它将取值范围为 ( − ∞ , ∞ ) (-\infty, \infty) (,) w T x i \mathbf{w}^\mathbf{T}\mathbf{x}_i wTxi压缩到取值范围为 ( 0 , 1 ) (0, 1) (0,1) h ( x i ) h(\mathbf{x}_i) h(xi), 可以解释为正例的概率.

在这里插入图片描述
指数有巧妙的设置, 把两种情况统一起来了

  • y i = 0 y_i = 0 yi=0 (为负例) 时, 优化目标中的 ( 1 − h ( x i ) ) (1−h(x_i)) (1h(xi)) 起作用, 即预测值越小, 相应项越大;
  • y i = 1 y_i = 1 yi=1 (为正例) 时, 优化目标中的 h ( x i ) h(x_i) h(xi) 起作用, 即预测值越大, 相应项越大.
  • 连乘是通过极大似然估计推导出来的, 概率的乘积还是概率;
  • max ⁡ \max max 表示的是 极大似然估计.

1.2 方案说明

方案和问题定义相同. 这是因为问题定义成这样, 方案也就固定了.
使用 sigmoid 函数的原因, 以及极大似然估计的推导:https://blog.csdn.net/weixin_60737527/article/details/124141293
每个点对优化目标都有贡献 (后面讲到 SVM 会回顾这里).

  • 如果远离分割面而且分类正确, 则相应项接近 1;
  • 如果远离分割面而且分类错误, 则相应项接近 0.

极大似然估计, 在机器学习中频繁被用到. 其思想就是一个事件发生了,那么发生这个事件的概率就是最大的.

1.3 方案求解

连乘用 log 变成连加, log 是一个单调函数, 不影响最大化目标. 这也是常用招数.
对式子取对数。原公式求最大值,可以取对数后乘以负1,之后求最小值。
L ( w ) = 1 n ∑ i = 1 n − y i ln ⁡ ( h ( x i ) ) − ( 1 − y i ) ln ⁡ ( ( 1 − h ( x i ) ) ) L(\mathbf{w}) = \frac{1}{n} \sum_{i = 1}^{n} -y_i \ln (h(\mathbf{x}_i)) - (1 - y_i)\ln((1- h(\mathbf{x}_i))) L(w)=n1i=1nyiln(h(xi))(1yi)ln((1h(xi)))
求最小值方法很多,机器学习中常用梯度下降系列方法。也可以采用牛顿法,或是求导数为零时 w \mathbf{w} w的数值等。

1.4 与线性回归的联系与区别

联系: 都是线性模型, logistic 回归还被称为广义线性模型.
区别: logistic 回归是分类, 要把两个类别的点尽可能分开. 直观上来看, logistic 回归比线性回归靠谱. 不过二分类任务的输出只有两个值, 而线性回归的输出是一个实数值, 后者更难把握.

2 支持向量机(SVM)

用 (核函数升维后的) 超平面分割正负样本, 仅考虑所有边界样本 (支持向量) 导致的距离.

2.1 线性分类器

支持向量机 (support vector machine, SVM) 有很多闪光点, 理论方面有 VC 维的支撑, 技术上有核函数将线性不可分变成线性可分, 实践上是小样本学习效果最好的算法.
如图所示, 基础的 SVM 仍然是一个线性二分类器, 这一点与 logistic 回归一致.
在这里插入图片描述
图 1 有 3 个分割线, 分别对应于一个分类器.

  • H1不能把正负样本分开, 拟合能力弱;
  • H2可以把正负样本分开 (拟合能力强), 但它与最近的正负样本距离小;
  • H3可以把正负样本分开, 而且与最近的正负样本距离达到了最大, 因此它有良好的泛化能力, 即对于新样本的预测能力.

使用下图来说明.
在这里插入图片描述

  • 输入:数据矩阵 X = ( x i j ) n × m ∈ R n × m \mathbf{X} = (x_{ij})_{n \times m} \in \mathbb{R}^{n \times m} X=(xij)n×mRn×m, 二分类标签向量 Y = ( y i ) n × 1 ∈ { − 1 , 1 } n \mathbf{Y} = (y_i)_{n \times 1} \in \{-1, 1\}^n Y=(yi)n×1{1,1}n.
  • 输出 m m m维空间上的一个超平面 w x + b = 0 \mathbf{w} \mathbf{x} + b = \mathbf{0} wx+b=0, 其中 w , x ∈ R m \mathbf{w}, \mathbf{x} \in \mathbb{R}^{m} w,xRm
  • 优化目标
    arg ⁡ max ⁡ w , b 1 ∣ ∣ w ∣ ∣ . ( 最大化实线到虚线的间隔 ) \arg \max_{\mathbf{w}, b} \frac{1}{||\mathbf{w}||}. (最大化实线到虚线的间隔) argw,bmax∣∣w∣∣1.(最大化实线到虚线的间隔)
  • 约束条件 y i ( w T ϕ ( x i ) + b ) ≥ 1 y_i (\mathbf{w}^{\mathbf{T}}\phi(\mathbf{x}_i)+b) \geq 1 yi(wTϕ(xi)+b)1.

其中:

  • 标签的取值范围为 { − 1 , + 1 } \{-1, +1\} {1,+1}, 和 logistic 回归的 { 0 , 1 } \{0, 1\} {0,1}不同. 这是为了表达相应的式子方便;
  • 优化目标是最大化实线到虚线的间隔;
  • 约束条件是每个样本点被正确分类 (为正数), 且到实线的加权距离不小于 1.

2.2 基本方案

实线对应的是线性分类器, 即分割超平面;
虚线上的点被称为支持向量 (support vector), 也就是关键样本的意思, 因为样本在空间用向量表示;
支持向量之外的样本, 最终没有为分类器作出贡献. 这是与 logistic 回归一个本质的区别.

2.3 核函数

用核函数将低维空间的数据映射到高维空间, 这样, 以前线性不可分的数据就变得线性可分.
这是一个神奇的想法, 因为机器学习很多时候致力于将高维数据降为低维 (如 PCA, 这个我们后面说), 而 SVM 反其道而行的.
在这里插入图片描述

  • 原始数据点是线性不可分的 (即二维平面上的任意直线都不可能把两种类别的数据点分开). 但使用高斯核将数据映射到三维就可以做到用二维平面分割.
  • 想像下某人脸上有痘痘, 如果脸部看作一个平面, 则去掉痘痘不可避免需要画一个圈, 它不是线性的. 现在逮住痘痘的中间往外面拉, 将脸部拉成一个曲面, 这时候, 用一把手术刀进行切割 (对应于一个平面), 就可以把痘痘切下来啦. 这真是一个不忍直视的画面 😦.

下图给出了更直观的画面.
在这里插入图片描述

常用的核函数有:线性核,多项式核,高斯核,Sigmoid核和复合核,傅立叶级数核,B样条核和张量积核等。还有很多核函数. 甚至有人将核技巧弄出来之后, 脱离了 SVM 进行使用. 这是 2000 年前后的研究热点.

2.4 软间隔

有时候某些正负样本实在无法从对方阵营里面分出来, 即 (2) 式所表达的约束条件无法得到满足, 就可以使用软间隔.
引入松弛变量 ξ i ≥ 0 \xi_i≥0 ξi0,允许SVM在一些样本上出错,约束条件改为:
y i ( w T ϕ ( x i ) + b ) ≥ 1 − ξ i y_i (\mathbf{w}^{\mathbf{T}}\phi(\mathbf{x}_i)+b) \geq 1 - \xi_i yi(wTϕ(xi)+b)1ξi
在这里插入图片描述

2.5 讨论

一个数据集应该使用什么核函数, 经常是试出来的. 这个和神经网络调参类似, 不是那么讲道理.
对于高维数据, 几十个支持向量很正常. 无论如何, 支持向量 (样本) 都只占训练集的一小部分.
支持向量机能很好地防止过拟合, 因为只要支持向量不改变, 其它样本的改变都不影响分类器. 当然, 这使得支持向量的选取 (与核函数的选取有关) 至关重要.

3 PCA

求特征值与特征向量, 以及相应的基向量, 进行空间的映射.

3.1 特征选择与特征提取

主成分分析 (principal component analysis, PCA) 是一种有理论依据的无监督特征提取的线性方法.
特征选择是指从已有的特征里面选择出一个子集. 例如: 身高、体重、性别、年龄、体温、血相等等, 如果要一个人是否患流感,身高、体重等不但没有作用, 反而还会让分类器效果变差. 回头想想 k k kNN, 在计算距离时考虑一些不相关的特征, 会使得相似的样本变得不相似.
在这里插入图片描述
特征提取则是指从已有特征中生成新的特征. 例如: 人们常说自己有多重, 然后表达想减肥的意愿. 但这种想法是错误的, 应该计算 BMI(体重÷身高²), 以此确定自己是否偏胖. 这里 “计算 BMI”, 就是一个特征提取的过程.
总的来说, 特征选择相对简单, 而特征提取有很大的想像空间. 后面将会介绍的神经网络, 其最本质的任务就是特征提取.
在这里插入图片描述

3.2 PCA 的基本思想

PCA 有两个特点:

  • 进行无监督的特征提取, 即它不考虑标签;
  • 是一个线性模型, 即新特征均为原始特征的线性组合.

如图 1 所示, 二维平面上有一系列数据点.
从它们的角度来看, x x x轴和 y y y轴两个特征的区分能力都差不多, 特征的取值范围都是[−4,+4].
在这里插入图片描述
如果我们将这些点围绕原点顺时针旋转 45 度, 就会发现新的 x x x 轴把样本分得比较开, 而新的 y y y 轴区分能力比较弱.
再想像一个极端的情况: 这些点全部在一条直线上, 经过旋转后 x x x 轴起到作用, 而 y y y 轴完全没有区分能力.

从高等数学的角度, 就是需要求一组正交基, 且排名靠前的基向量 (被称为 主成分) 区分能力更强. 这组正交基的个数有可能少于原始空间的维度, 这时就达到 特征提取 + 降维 的作用.

为了进一步地降维, 设置一个阈值, 将基向量的区分度低于该域值时, 就可以把它抛弃.

3.3 PCA计算过程

参考:https://www.cnblogs.com/hadoop2015/p/7419087.html
问题: 真实的训练数据总是存在各种各样的问题, 比如拿到一个汽车的样本,里面既有以“千米/每小时”度量的最大速度特征,也有“英里/小时”的最大速度特征,显然这两个特征有一个多余。.
PCA的思想是将 n n n维特征映射到 k k k维上( k < n k<n k<n),这 k k k维是全新的正交特征。这k维特征称为主元,是重新构造出来的 k k k维特征,而不是简单地从 n n n维特征中去除其余 n − k n-k nk维特征。
假设我们得到的2维数据。
有10个样例,每个样例两个特征。可以这样认为,有10篇文档, x x x是10篇文档中“learn”出现的TF-IDF, y y y是10篇文档中“study”出现的TF-IDF。也可以认为有10辆汽车, x x x是千米/小时的速度, y y y是英里/小时的速度
在这里插入图片描述

  • 第一步分别求x和y的平均值,然后对于所有的样例,都减去对应的均值。这里x的均值是1.81,y的均值是1.91,那么一个样例减去均值后即为(0.69,0.49),得到:
    在这里插入图片描述
  • 第二步,求特征协方差矩阵,如果数据是3维,那么协方差矩阵是:
    在这里插入图片描述

这里只有 x x x y y y,求解得:
在这里插入图片描述
对角线上分别是 x x x y y y的方差,非对角线上是协方差。

  • 协方差大于0表示 x x x y y y若有一个增,另一个也增;小于0表示一个增,一个减;协方差为0时,两者独立。

  • 协方差绝对值越大,两者对彼此的影响越大,反之越小。

  • 第三步,利用矩阵的知识,求协方差矩阵 C \mathbf{C} C的特征值 λ λ λ 和相对应的特征向量 $\mathbf{u} $每一个特征值对应一个特征向量)
    C u = λ u \mathbf{C}\mathbf{u} = \lambda \mathbf{u} Cu=λu
    在这里插入图片描述
    上面是两个特征值,下面是对应的特征向量,特征值0.0490833989对应特征向量为 ( − 0.735148656 , 0.677873399 ) (-0.735148656, 0.677873399) (0.735148656,0.677873399),这里的特征向量都归一化为单位向量。

  • 第四步,将特征值按照从大到小的顺序排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵。
    这里特征值只有两个,我们选择其中最大的那个,这里是1.28402771,对应的特征向量是(-0.677873399, -0.735148656).
    -第五步,将样本点投影到选取的特征向量上。假设样例数为m,特征数为n,减去均值后的样本矩阵为DataAdjust(mn),协方差矩阵是nn,选取的k个特征向量组成的矩阵为EigenVectors(nk)。那么投影后的数据FinalData为:
    F i n a l D a t a ( m ∗ k ) = D a t a A d j u s t ( m ∗ n ) × E i g e n V e c t o r s ( n ∗ k ) FinalData(m * k) = DataAdjust(m*n) \times EigenVectors(n*k) FinalData(mk)=DataAdjust(mn)×EigenVectors(nk)
    FinalData(10
    1) = DataAdjust(10*2矩阵)×特征向量(-0.677873399, -0.735148656), 得到结果是:
    在这里插入图片描述
    这样,就将原始样例的n维特征变成了k维,这k维就是原始特征在k维上的投影。
    上面的数据可以认为是learn和study特征融合为一个新的特征叫做LS特征,该特征基本上代表了这两个特征。
    上述过程有个图描述:
    在这里插入图片描述
    正号表示预处理后的样本点,斜着的两条线就分别是正交的特征向量(由于协方差矩阵是对称的,因此其特征向量正交),最后一步的矩阵乘法就是将原始样本点分别往特征向量对应的轴上做投影。

3.4 最大方差理论

要解释为什么协方差矩阵的特征向量就是k维理想特征,需要了解最大方差理论。
在信号处理中认为信号具有较大的方差,噪声有较小的方差,信噪比就是信号与噪声的方差比,越大越好。
如前面的图,样本在横轴上的投影方差较大,在纵轴上的投影方差较小,那么认为纵轴上的投影是由噪声引起的。
因此我们认为,最好的k维特征是将n维样本点转换为k维后,每一维上的样本方差都很大
比如下图有5个样本点:(已经做过预处理,均值为0,特征方差归一化),下面将样本投影到某一维上,这里用一条过原点的直线表示。
在这里插入图片描述
假设我们选择两条不同的直线做投影,那么左右两条中哪个好呢?根据我们之前的方差最大化理论,左边的好,因为投影后的样本点之间方差最大。
在这里插入图片描述

3.5 PCA优缺点

优点

  • 有良好的数学基础;
  • 有良好的应用.
    缺点:
  • 只是一个线性模型;
  • 只能做简单的数据预处理;
  • 无监督模型, 不一定适用于有监督数据.

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

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

相关文章

FPGA应用学习-----FIFO双口ram解决时钟域+asic样机的时钟选通

60m写入异步ram&#xff0c;再用100M从ram中读出 写地址转换为格雷码后&#xff0c;打两拍和读地址判断是否空产生。相反读地址来判断是否满产生。 分割同步模块 asic时钟的门控时钟&#xff0c;fpga是不推荐采用门控时钟的&#xff0c;有很多方法移除fpga的时钟选通。 如果是a…

天花板级,Python接口自动化测试-接口关联封装调用(实例)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 流程相关的接口&a…

docker基本使用方法

docker使用 1. Docker 介绍 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。Docker 使您能够将应用程序与基础架构分开&#xff0c;从而可以快速交付软件。通过利用 …

MySQL_多表查询

多表查询 概述&#xff1a;多表查询就是多张表之间的查询。 回顾&#xff1a;SELECT * FROM table_name 多表查询 from 后面就得跟多张表。如&#xff1a;select * from emp,dept 笛卡尔积&#xff1a;笛卡尔积在数学中&#xff0c;表示两个集合&#xff0c;集合 A 和集合 …

Django实现音乐网站 ⑽

使用Python Django框架制作一个音乐网站&#xff0c; 本篇主要是后台对歌曲类型、歌单功能原有功能进行部分功能实现和显示优化。 目录 歌曲类型功能优化 新增编辑 优化输入项标题显示 父类型显示改为下拉菜单 列表显示 父类型显示名称 过滤器增加父类型 歌单表功能优化…

# X11、Xlib、XFree86、Xorg、GTK、Qt、Gnome和KDE之间的关系

X11、Xlib、XFree86、Xorg、GTK、Qt、Gnome和KDE之间的关系 很多人对于他们是啥是傻傻分不清的&#xff0c;我做了个表格供大家参考。 摘抄&#xff1a; X11是X Window System Protocol, Version 11&#xff08;RFC1013&#xff09;&#xff0c;是X server和X client之间的通…

Android多渠道打包+自动签名工具 [原创]

多渠道打包自动签名工具 [原创] github源码&#xff1a;github.com/G452/apk-packer 如果觉得有帮助可以点个小星星支持一下&#xff0c;万分感谢&#xff01; 使用步骤&#xff1a; 1、在apk-packer.exe目录内放入打包需要的配置&#xff1a; 1&#xff09;签名文件.jks2&am…

flutter开发实战-just_audio实现播放音频暂停音频设置音量等

flutter开发实战-just_audio实现播放音频暂停音频设置音量等 最近开发过程中遇到需要播放背景音等音频播放&#xff0c;这里使用just_audio来实现播放音频暂停音频设置音量等 一、引入just_audio 在pubspec.yaml引入just_audio just_audio: ^2.7.0在iOS上&#xff0c;video_p…

Michael.W基于Foundry精读Openzeppelin第23期——ERC165Checker.sol

Michael.W基于Foundry精读Openzeppelin第23期——ERC165Checker.sol 0. 版本0.1 ERC165Checker.sol 1. 目标合约2. 代码精读2.1 supportsERC165InterfaceUnchecked(address account, bytes4 interfaceId)2.2 supportsERC165(address account)2.3 supportsInterface(address acc…

springboot整合JMH做优化实战

这段时间接手项目出现各种问题&#xff0c;令人不胜烦扰。吐槽下公司做项目完全靠人堆&#xff0c;大上快上风格注定留下一地鸡毛&#xff0c;修修补补不如想如何提升同事代码水准免得背锅。偶然看到关于JMH对于优化java代码的直观性&#xff0c;于是有了这篇文章&#xff0c;希…

11款UML/SysML建模工具更新(2023.7)Papyrus、UModel……

DDD领域驱动设计批评文集 欢迎加入“软件方法建模师”群 《软件方法》各章合集 最近一段时间更新的工具有&#xff1a; 工具最新版本&#xff1a;drawio-desktop 21.6.5 更新时间&#xff1a;2023年7月22日 工具简介 开源绘图工具&#xff0c;用Electron编写&#xff0c;…

uniapp文件下载并预览

大概就是这样的咯&#xff0c;文件展示到页面上&#xff0c;点击文件下载并预览该文件&#xff1b; 通过点击事件handleDownLoad(file.path)&#xff0c;file.path为文件的地址&#xff1b; <view class"files"><view class"cont" v-for"(…

PPO和文本生成

策略梯度 策略梯度&#xff08;Policy Gradient&#xff09;方法梯度的计算如下&#xff1a; E ( a t , s t ) ∈ π θ [ A ^ t ∇ θ log ⁡ π θ ( a t ∣ s t ) ] \mathbb E_{(a_t,s_t) \in \pi_\theta}[\hat A_t \nabla_ \theta \log \pi_\theta(a_t | s_t)] E(at​,st…

Nginx的重定向

URI&#xff1a;统一资源标识符&#xff0c;是一种字符串标识&#xff0c;主要是用于标识抽象的或者是物理资源&#xff08;主要是指一些文件视频等等&#xff09; 常用的Nginx正则表达式 ^ 匹配输入字符串的起始位置&#xff08;以......开头&#xff09; $ 匹配输入…

FreeRTOS( 任务与中断优先级,临界保护)

资料来源于硬件家园&#xff1a;资料汇总 - FreeRTOS实时操作系统课程(多任务管理) 目录 一、中断优先级 1、NVIC基础知识 2、FreeRTOS配置NVIC 3、SVC、PendSV、Systick中断 4、不受FreeRTOS管理的中断 5、STM32CubeMX配置 二、任务优先级 1、任务优先级说明 2、任务…

【LeetCode】144. 二叉树的前序遍历、94. 二叉树的中序遍历、145. 二叉树的后序遍历

作者&#xff1a;小卢 专栏&#xff1a;《Leetcode》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 144. 二叉树的前序遍历 144. 二叉树的前序遍历 题目&#xff1a; 给你二叉树的根节点 root &…

保姆级Arcgis安装图文安装教程

参考视频&#xff1a;【钟老师arcGIS从放弃到入门】02软件下载与安装_哔哩哔哩_bilibili 安装包在视频简介中有 注释&#xff1a;安装过程中有犯错误&#xff0c;请耐心看完一遍再跟着操作 &#xff08;一&#xff09;安装包下载 下载视频中分享的压缩包(压缩包密码&#x…

window下部署Yapi接口管理系统部署总结

window下部署Yapi接口管理系统部署总结 YApi 是高效、易用、功能强大的 api 管理平台&#xff0c;旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发者轻松创建、发布、维护 API&#xff0c;YApi 还为用户提供了优秀的交互体验&#xff0c;开发人员只需利用平…

后端开发8.品牌模块

概述 简介 效果图 数据库设计 DROP TABLE IF EXISTS `goods_brand`;CREATE TABLE `goods_brand` ( `goodsBrandId` int(11) NOT NULL AUTO_IN

04-4_Qt 5.9 C++开发指南_时间日期与定时器

文章目录 1. 时间日期相关的类2. 源码2.1 可视化UI设计2.2 dialog.h2.3 dialog.cpp 1. 时间日期相关的类 时间日期是经常遇到的数据类型&#xff0c;Qt 中时间日期类型的类如下。 QTime:时间数据类型&#xff0c;仅表示时间&#xff0c;如 15:23:13。 QDate:日期数据类型&…