机器学习常用算法和模型
= Clustering Analysis,聚类分析
一种无监督学习(Unsupervised Learning)方法,用于将数据集中的对象划分为若干组(称为簇,Cluster),使得同一簇内的对象彼此相似,而不同簇之间的对象差异较大。聚类分析的目标是发现数据中的内在结构,而不需要预先标记的类别信息。聚类目标:最大化簇内相似性,最小化簇间相似性。
- 相似性常用度量方法:
- 欧几里得距离(Euclidean Distance)
- 曼哈顿距离(Manhattan Distance)
- 余弦相似度(Cosine Similarity)
- Jaccard相似系数(Jaccard Similarity)
常见聚类算法
1、基于划分的聚类
- K-Means,K均值算法:将数据划分为 KK 个簇,每个簇由其质心(Centroid)表示。优点:简单、高效,缺点:需要预先指定 KK 值,对初始质心敏感,不适合非凸形状的簇。
- K-Medoids:类似于K-Means,但使用实际数据点作为簇中心(Medoid),而不是质心,对噪声和异常值更鲁棒
2、基于层次的聚类
- 凝聚层次聚类(Agglomerative Hierarchical Clustering):自底向上:将每个数据点视为一个簇,逐步合并最相似的簇,直到满足停止条件。有单链、全链和平均链三种合并策略。优点:不需要预先指定簇数,可以生成层次结构。缺点:计算复杂度高,不适合大规模数据。
- 分裂层次聚类(Divisive Hierarchical Clustering):自顶向下:将所有数据点视为一个簇,逐步分裂为更小的簇。
3、基于密度的聚类
- DBSCAN(Density-Based Spatial Clustering of Applications with Noise):基于数据点的密度分布,将高密度区域划分为簇,低密度区域视为噪声。优点:不需要预先指定簇数,能识别任意形状的簇,对噪声鲁棒。缺点:对参数 \epsilonϵ(邻域半径)和 \text{minPts}minPts 敏感。
- OPTICS(Ordering Points To Identify the Clustering Structure):改进版DBSCAN,通过生成可达图(Reachability Plot)来识别不同密度的簇。
4、基于模型的聚类
- 高斯混合模型(Gaussian Mixture Model, GMM):假设数据由多个高斯分布混合生成,通过最大化似然函数来估计模型参数。优点:可以生成概率簇,适合复杂分布。缺点:计算复杂度高,对初始值敏感。
5、基于网格的聚类
- STING(Statistical Information Grid):将数据空间划分为网格单元,基于统计信息进行聚类。优点:适合大规模数据,计算效率高。缺点:对网格粒度敏感。
6、基于图的聚类
- 谱聚类(Spectral Clustering):基于图的拉普拉斯矩阵进行聚类,适合非凸形状的簇。优点:能处理复杂结构。缺点:计算复杂度高。
聚类分析是一种强大的数据分析工具,能够从无标签数据中发现潜在的结构和模式,以下应用场景:
- 市场细分:将客户划分为不同的群体,以便制定个性化营销策略。
- 图像分割:将图像中的像素划分为不同区域。
- 生物信息学:基因表达数据分析,蛋白质功能分类。
- 社交网络分析:发现社区结构。
- 异常检测:识别异常数据点。
* Mean Shift,均值漂移算法,不需要提前确定K值,但数据量大时,计算速度缓慢
* AGNES,集聚分层聚类算法
= ANN,神经网络算法
是一种模拟生物神经网络结构和功能的计算模型,广泛应用于机器学习、数据挖掘、图像识别、自然语言处理等领域。
基本原理:ANN中的神经元接收输入信号,经过加权求和、激活函数处理后产生输出。
- 输入层(Input Layer):接收外部输入数据。
- 隐藏层(Hidden Layer):对输入数据进行特征提取和转换。
- 输出层(Output Layer):产生最终的预测结果。
神经元工作原理:神经元是ANN的基本计算单元,其工作过程如下:
加权求和:每个输入信号乘以一个权重(Weight),然后将所有加权输入相加,再加上一个偏置项(Bias)。
其中,wi 是权重,xi 是输入,b 是偏置。
激活函数:将加权求和的结果通过一个非线性函数(如Sigmoid、ReLU、Tanh等)进行处理,以引入非线性能力。
y=f(z)
训练过程:ANN通过训练过程学习输入数据与输出结果之间的映射关系。训练过程主要包括以下步骤:
前向传播(Forward Propagation):输入数据从输入层传递到输出层,经过每一层的加权求和和激活函数处理,最终得到预测输出。
损失函数(Loss Function):用于衡量预测输出与真实标签之间的差异。常见的损失函数包括均方误差(MSE)、交叉熵损失(Cross-Entropy)等。
反向传播(Backpropagation):通过计算损失函数对每个权重的梯度,从输出层向输入层反向传播,更新权重以最小化损失函数。
优化算法:使用优化算法(如梯度下降、Adam、SGD等)根据梯度更新权重。
应用场景:
- 图像识别:通过CNN识别图像中的物体、人脸等。
- 自然语言处理:通过RNN或Transformer架构处理文本数据,如机器翻译、情感分析。
- 时间序列预测:用于股票价格预测、天气预报等。
- 医疗诊断:通过DNN分析医学影像或病历数据,辅助医生诊断疾病。
优点:
- 能够自动学习数据中的复杂模式。
- 对噪声和不完整数据具有一定的鲁棒性。
- 可以处理多种类型的数据(如图像、文本、时间序列)。
缺点:
- 训练过程需要大量数据和计算资源。
- 模型结构复杂,难以解释。
- 容易过拟合,需要通过正则化等方法进行控制。
= CNN,卷积神经网络
一种深度学习模型,专门用于处理具有网格结构的数据,如图像(二维网格)和时间序列(一维网格)。CNN通过卷积层(Convolutional Layer)提取数据的局部特征,并利用池化层(Pooling Layer)降低特征维度,从而实现高效的数据处理和特征学习。CNN在计算机视觉、自然语言处理等领域取得了巨大成功,尤其是图像识别、目标检测和图像分割等任务。
卷积操作通过一个小的滤波器(Filter,也称为卷积核)在输入数据上滑动,计算滤波器与局部区域的加权和,从而生成新的特征图(Feature Map)。这种操作能够捕捉数据中的局部模式(如边缘、纹理等),并且对数据的平移具有不变性(Translation Invariance)。CNN的另一个重要特性是参数共享(Parameter Sharing)。在卷积操作中,同一个滤波器的权重在输入数据的不同位置共享,这大大减少了模型的参数数量,提高了计算效率。
1、CNN的主要组成部分
卷积层(Convolutional Layer):负责提取输入数据的局部特征
- 滤波器(Filter/Kernel):一个小型的二维矩阵,用于在输入数据上滑动并计算卷积。
- 卷积操作:滤波器在输入数据上滑动(步长为stride),计算滤波器与局部区域的逐元素乘积,并将结果求和,生成新的特征图。
- 填充(Padding):为了保持特征图的尺寸,可以在输入数据的边缘添加零值(Zero-Padding),从而允许滤波器在边缘位置进行卷积。
- 激活函数:卷积操作的结果通常通过非线性激活函数(如ReLU)处理,以引入非线性能力。
例如,假设输入是一个大小为 7×7 的图像,滤波器大小为 3×3,步长为1,没有填充(No Padding)。那么输出特征图的大小为5x5:
池化层(Pooling Layer):用于降低特征图的维度,减少计算量,同时保留重要特征
- 最大池化(Max Pooling):在局部区域内取最大值。
- 平均池化(Average Pooling):在局部区域内取平均值。
全连接层(Fully Connected Layer):全连接层位于CNN的末端,将卷积层和池化层提取的二维特征图展平为一维向量,并通过多层全连接网络进行分类或回归。全连接层的每个神经元与前一层的所有神经元相连,负责将局部特征组合成全局特征,最终输出预测结果。
激活函数(Activation Function):CNN中常用的激活函数包括ReLU(Rectified Linear Unit)、Sigmoid和Tanh。ReLU是最常用的激活函数,因为它能够有效缓解梯度消失问题,并且计算效率高:
损失函数(Loss Function):CNN的训练过程通过损失函数衡量预测结果与真实标签之间的差异。常见的损失函数包括
- 交叉熵损失(Cross-Entropy Loss):用于分类任务。
- 均方误差(MSE):用于回归任务。
优化算法(Optimization Algorithm):CNN的训练通过反向传播算法(Backpropagation)和优化算法(如SGD、Adam)更新网络参数,以最小化损失函数。
2、CNN的工作流程
- 前向传播(Forward Propagation)
- 输入数据(如图像)进入网络。
- 通过卷积层和激活函数提取局部特征。
- 使用池化层降低特征图的维度。
- 将特征图展平为一维向量。
- 通过全连接层进行分类或回归,得到预测结果。
- 反向传播(Backpropagation)
- 计算损失函数的值。
- 通过链式法则计算损失函数对每个参数的梯度。
- 使用优化算法更新网络参数。
3、CNN的典型架构
- LeNet-5:最早的CNN之一,由Yann LeCun提出,主要用于手写数字识别(MNIST数据集)
- AlexNet:2012年的ImageNet竞赛中取得了突破性成果,奠定了CNN在图像识别领域的地位
- VGGNet:由牛津大学的Visual Geometry Group提出,其特点是使用多个小卷积核(如 3×3)代替大卷积核
- ResNet(残差网络):ResNet通过引入残差连接(Residual Connection)解决了深度网络训练中的梯度消失和梯度爆炸问题。ResNet的核心思想是通过跳跃连接(Skip Connection)将输入直接传递到后面的层,从而简化网络的训练。ResNet可以构建非常深的网络(如ResNet-50、ResNet-101等)
- Inception(GoogLeNet):Inception网络通过使用Inception模块(包含多个不同尺寸的卷积核和池化操作)提高了网络的宽度和深度,同时减少了参数数量。Inception网络在计算效率和性能之间取得了良好的平衡。
4、CNN的应用场景
- 图像识别与分类:如识别物体、场景、人脸等。
- 目标检测:通过CNN检测图像中的多个目标及其位置(如YOLO、SSD等)。
- 图像分割:将图像分割为多个区域,用于医学影像分析等。
- 自然语言处理:通过一维卷积处理文本数据(如文本分类、情感分析)。
- 视频分析:将CNN应用于视频帧的处理,用于动作识别等。
5、CNN的优点
- 强大的特征提取能力:能够自动学习数据中的局部特征,无需手动设计特征。
- 对平移不变性:卷积操作对输入数据的平移具有一定的鲁棒性。
- 计算效率高:通过参数共享和卷积操作减少了参数数量。
- 适应性强:适用于多种类型的数据(如图像、文本、视频)。
6、CNN的i缺点
- 需要大量数据:CNN的训练需要大量的标注数据。
- 计算资源需求高:虽然计算效率高,但训练和推理过程仍然需要强大的计算设备(如GPU)。
- 模型复杂:网络结构复杂,难以解释模型的决策过程。
- 过拟合风险:在数据量不足或网络过深时,容易出现过拟合。