【MAFA】机器学习part2

6. 神经网络

6.1 人工神经网络的实现

人工神经网络的构成

  • 人工神经元和连接:神经网络由人工神经元组成,这些神经元之间通过连接相互传递信息。人工神经元是对人脑神经元的简化模拟,它们可以处理和传递信息。

信息传递机制

  • 权重和影响强度:每个连接都有一个权重,这个权重代表了相应神经元对输出结果影响的强度。权重的大小决定了信号在网络中的传递强度。

  • 前馈过程(Feed Forward):信息在网络中从输入层通过隐藏层(如果有)最后传递到输出层的过程称为前馈。在这个阶段,输入数据通过加权求和(加上偏置项)后,通过一个非线性激活函数来产生输出。

权重优化过程

  • 反向传播(Backpropagation):这是一种权重优化过程,用于训练神经网络。在每次训练迭代中,反向传播会通过网络的各层反向传递,根据权重对网络误差的贡献来调整权重。

    1. 计算误差:首先,计算网络预测输出和实际目标值之间的误差。
    2. 误差反向传播:然后,这个误差会反向传播到网络中,根据误差对每个权重的影响程度来调整权重。
    3. 权重更新:权重根据预定的学习率和误差梯度来更新,目的是减少网络的总体误差。

使用训练好的网络进行预测

  • 新输入和预测:一旦神经网络通过训练数据学习到了相应的模式,我们就可以将新的输入数据(测试集)放入网络中,网络会根据训练过程中创建的函数来预测输出。

训练过程的总结

  1. 初始化:随机初始化网络权重。
  2. 前馈传播:将输入数据传递到网络中,计算输出。
  3. 计算误差:使用损失函数计算预测输出和真实值之间的误差。
  4. 反向传播:利用误差对权重进行更新,以减少预测误差。
  5. 迭代优化:重复上述步骤,直到网络在训练数据上达到满意的性能。

通过这种方式,神经网络能够学习到数据之间的关系,并能够对新的、未见过的数据做出准确的预测。这种能力使得神经网络在各种领域,如图像识别、自然语言处理、游戏玩法等领域得到广泛应用。

6.2 模拟布尔函数

这段内容讨论了数学中的布尔函数(Boolean Function),以及它们在计算机科学和逻辑学中的应用。以下是对这段内容的详细解释:

布尔函数的定义

  • 布尔函数:在数学中,布尔函数是一种特殊类型的函数,其输入(参数)和输出(结果)仅来自一个包含两个元素的集合。这个集合通常表示为 {true, false}、{0, 1} 或 {-1, 1},分别对应逻辑真、逻辑假以及二进制值。

布尔函数的其他名称

  • 开关函数(Switching Function):在计算机科学文献中,布尔函数有时被称为开关函数,特别是在讨论逻辑电路和数字电路时。
  • 真值函数(Truth Function)或逻辑函数(Logical Function):在逻辑学中,布尔函数也被称为真值函数或逻辑函数,因为它们与逻辑表达式的真值表有关。

常见的布尔函数

  • AND:逻辑与,当所有输入都为真时,输出为真。
  • OR:逻辑或,当至少有一个输入为真时,输出为真。
  • XOR:逻辑异或,当输入中恰好有一个为真时,输出为真(偶数个假输入和奇数个真输入时输出不同)。
  • NAND:逻辑与非,与AND门相反,只有当所有输入都为假时,输出为真。
  • NOR:逻辑或非,与OR门相反,只有当所有输入都为假时,输出为真。
  • XNOR:逻辑同或,与XOR门相反,当输入中所有位都相同时,输出为真(即两个输入都为假或都为真时输出为真)。
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

N输入的AND和OR门

  • N输入AND门:一个有N个输入的AND门在所有N个输入都为真(TRUE)时,输出为真(TRUE)。如果任何一个输入为假(FALSE),输出即为假(FALSE)。
  • N输入OR门:一个有N个输入的OR门在至少有一个输入为真(TRUE)时,输出为真(TRUE)。只有当所有N个输入都为假(FALSE)时,输出才为假(FALSE)。

布尔函数在设计逻辑电路、评估逻辑表达式、构建计算机算法以及处理数据和信息的许多其他领域中都非常重要。它们是数字逻辑和计算理论的基础。

7.建立神经网络

7.1 sequential模型

Sequential模型的特点:

  1. 层的线性堆叠:Sequential模型适用于一个简单的层的堆叠,每一层都恰好有一个输入张量和一个输出张量。

  2. tf.keras.model的封装keras.Sequential将线性堆叠的层组合成一个tf.keras.Model对象,这是一个更高级别的抽象,代表整个模型。

  3. 网络架构的构建:通过keras.Sequential定义网络的架构,用户可以一层接一层地添加神经网络层。

  4. 训练和推理功能keras.Sequential不仅提供了模型的构建方式,还提供了模型的训练(training)和推理(inference)功能。

Sequential模型的构建步骤:

  1. 初始化Sequential模型

    from tensorflow.keras.models import Sequential
    model = Sequential()
    
  2. 添加层:使用.add()方法向模型添加神经网络层。每一层都建立在前一层之上。

    model.add(Dense(12, input_shape=(8,), activation='relu'))  # 第一层,包含8个输入特征和12个神经元
    model.add(Dense(8, activation='relu'))  # 第二层,之前的层输出将成为这一层的输入
    model.add(Dense(1, activation='sigmoid'))  # 输出层
    
  3. 编译模型:在训练模型之前,需要编译模型并指定损失函数、优化器和评估指标。

    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
    
  4. 训练模型:使用.fit()方法训练模型,传入训练数据和标签。

    model.fit(x_train, y_train, epochs=150, batch_size=10)
    
  5. 评估模型:使用.evaluate()方法在测试集上评估模型性能。

    loss, accuracy = model.evaluate(x_test, y_test)
    
  6. 使用模型进行预测:使用.predict()方法进行推理和预测。

    predictions = model.predict(x_new)
    

Sequential模型的适用场景:

  • 当模型的架构是简单的层叠结构时,Sequential模型非常方便。
  • 对于初学者来说,Sequential模型提供了一种简单直观的方式来构建和理解神经网络。

Sequential模型的局限性:

  • 如果模型需要更复杂的结构,如多输入、多输出或共享层(同一输入连接到多个层),Sequential模型可能不够灵活。
  • 对于更复杂的模型架构,可能需要使用tf.keras.Model或函数式API(Functional API)来构建模型。

Sequential模型是Keras中快速构建和原型设计深度学习模型的强大工具,特别适合初学者和简单的神经网络结构。随着对深度学习理解的深入,用户可能会探索更高级的模型构建方法。

8. clustering

特性K-Means聚类DBSCAN聚类
聚类方法分区聚类(Partition-based Clustering)密度聚类(Density-based Clustering)
聚类形状球形或类球形(Creates sphere-like shaped groups)任意形状(Creates arbitrary shaped groups)
聚类算法示例K-Means聚类、K-Median聚类等DBSCAN聚类
核心样本识别不直接识别核心样本有助于识别核心样本和离群点(Helpful to identify core samples and outliers)
应用场景高效且广泛使用,适用于球形或类球形数据集适用于任意形状的数据集,包括噪声和离群点
对噪声的敏感度对噪声敏感对噪声不敏感,能够识别离群点
聚类数量预先指定聚类数量聚类数量不固定,由数据密度决定
聚类中心有明确的聚类中心没有明确的聚类中心,通过密度连接点来形成聚类
计算复杂度相对较低,适合大规模数据集相对较高,尤其是当数据集很大或密度不均匀时
聚类稳定性较高可能较低,取决于参数设置和数据的局部密度
参数选择主要参数是聚类数量K主要参数是邻域半径ε和最小点数MinPts

8.1 K-Means

K-Means聚类算法是一种流行的聚类方法,它通过迭代过程将数据点分配到K个聚类中,每个聚类由一个质心(Centroid)代表。以下是K-Means算法的步骤解释:

  1. 随机初始化K个聚类质心:算法开始时,随机选择K个数据点作为初始的聚类质心,这些质心在数学上表示为向量 ( \mu_1, \mu_2, …, \mu_K \in \mathbb{R}^m ),其中m是数据的维度。

  2. 迭代过程:K-Means算法的核心是一个重复的过程,直到收敛(即质心的位置不再有显著变化)。

  3. 为每个数据点分配到最近的质心:对于数据集中的每个点 ( x_i )(i从1到N,N是数据点的总数),算法计算它到每个质心 ( \mu_k ) 的距离,并将其分配给最近的质心。距离通常是通过计算点和质心之间的欧几里得距离(即平方距离)来计算的,公式为 ( \min_k (x_i - \mu_k)^2 )。

  4. 更新质心:一旦所有数据点都被分配到最近的质心,算法将进入下一步,更新每个聚类的质心。新的质心是分配给该聚类的所有数据点的均值,即 ( \mu_k ) 更新为该聚类中所有点 ( x_i ) 的均值。

  5. 重复迭代:步骤3和4重复进行,直到质心的位置不再有显著变化,或者达到预设的迭代次数,这时算法收敛。

K-Means算法的优点在于它简单、快速,适合处理大型数据集。然而,它也有一些局限性:

  • 需要预先指定K值,即聚类的数量。
  • 对初始质心敏感,不同的初始质心可能导致不同的聚类结果。
  • 对噪声和离群点敏感。
  • 可能只能找到局部最优解,而不是全局最优解。

K-Means算法适用于球形或类球形的数据聚类,但对于任意形状的聚类,可能需要使用其他算法,如DBSCAN。

8.2 DBSCAN

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,它能够识别任意形状的聚类,并且可以识别并处理噪声点和离群点。下面是对您提供的内容的解释:

  1. DBSCAN:即密度基空间聚类,用于带噪声的应用程序。

  2. 基于密度的对象工作:DBSCAN算法的核心思想是,如果一个区域内的点的密度足够高,那么这个区域就可以被认为是一个聚类。

  3. R (邻域半径):这是一个参数,定义了在数据空间中考虑的邻域的范围。如果一个点的R范围内包含了足够多的点,那么这个区域就可以被认为是一个“密集”的区域。

  4. 密集区域的定义:在DBSCAN中,如果一个点的R邻域内包含的点数达到了一定的阈值(即M),那么这个点就被认为是处于一个密集区域。

  5. M (最小邻居数):这是另一个参数,定义了在R邻域内需要有多少个点才能认为该邻域是密集的。换句话说,M是定义一个聚类所需的最小数据点数。
    A cluster is formed by grouping the connected corepoints and all their borders together通过将连接的核心点及其所有边界组合在一起形成集群.

DBSCAN算法通过这两个参数来识别核心点(如果在R范围内有至少M个点,则该点是核心点),边界点(在核心点的R邻域内,但是自己的R邻域内没有M个点),以及噪声点(不在任何核心点的R邻域内,且数量少于M的点)。核心点和边界点共同组成聚类,而噪声点则被认为是离群点或不属于任何聚类。
在这里插入图片描述

DBSCAN的优点在于它不需要预先指定聚类的数量,并且可以有效地识别并处理噪声。然而,选择合适的R和M参数对于算法的性能至关重要。如果R过大或M过小,可能会导致过多的噪声点被错误地识别为聚类的一部分;如果R过小或M过大,可能会导致数据集中的许多小聚类被忽略。

  • 11
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值