机器学习:基于Python实现人工神经网络训练过程

机器学习:基于Python实现人工神经网络训练过程

作者:i阿极

作者简介:数据分析领域优质创作者、多项比赛获奖者:博主个人首页

如果觉得文章不错或能帮助到你学习,可以点赞收藏评论+关注哦!

如果有小伙伴需要数据集和学习交流,文章下方有交流学习区!一起学习进步!


大家好,我i阿极。喜欢本专栏的小伙伴,请多多支持

专栏案例:机器学习案例
机器学习(一):线性回归之最小二乘法
机器学习(二):线性回归之梯度下降法
机器学习(三):基于线性回归对波士顿房价预测
机器学习(四):基于KNN算法对鸢尾花类别进行分类预测
机器学习(五):基于KNN模型对高炉发电量进行回归预测分析
机器学习(六):基于高斯贝叶斯对面部皮肤进行预测分析
机器学习(七):基于多项式贝叶斯对蘑菇毒性分类预测分析
机器学习(八):基于PCA对人脸识别数据降维并建立KNN模型检验
机器学习(十四):基于逻辑回归对超市销售活动预测分析
机器学习(十五):基于神经网络对用户评论情感分析预测
机器学习(十六):线性回归分析女性身高与体重之间的关系
机器学习(十七):基于支持向量机(SVM)进行人脸识别预测
机器学习(十八):基于逻辑回归对优惠券使用情况预测分析
机器学习(十九):基于逻辑回归对某银行客户违约预测分析
机器学习(二十):LightGBM算法原理(附案例实战)
机器学习(二十一):基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测
机器学习(二十二):基于逻辑回归(Logistic Regression)对股票客户流失预测分析

文章目录

  • 机器学习:基于Python实现人工神经网络训练过程
  • 1、人工神经网络简介
  • 2、举例讲解人工神经网络原理
  • 3、实验环境
  • 4、案例实现


1、人工神经网络简介

人工神经网络(ANN)是一种启发大脑的信息处理范例。人工神经网络与人一样,通过实例学习。ANN 通过学习过程配置用于特定应用,例如模式识别或数据分类。学习很大程度上涉及对神经元之间存在的突触连接的调整。
机器学习:基于Python实现人工神经网络训练过程_第1张图片

大脑由数千亿个称为神经元的细胞组成。这些神经元通过突触连接在一起,突触只不过是一个神经元可以向另一个神经元发送脉冲的连接。当一个神经元向另一个神经元发送兴奋信号时,该信号将被添加到该神经元的所有其他输入。如果它超过给定的阈值,那么它将导致目标神经元向前发出动作信号——这就是思维过程的内部工作原理。

在计算机科学中,我们通过使用矩阵在计算机上创建“网络”来模拟此过程。这些网络可以理解为神经元的抽象,而不考虑所有的生物复杂性。为了简单起见,我们将只建模一个简单的神经网络,其中有两层能够解决线性分类问题。
机器学习:基于Python实现人工神经网络训练过程_第2张图片

2、举例讲解人工神经网络原理

假设我们有一个问题,我们想要预测给定一组输入和输出作为训练示例的输出,如下所示:

机器学习:基于Python实现人工神经网络训练过程_第3张图片

请注意,输出与第三列直接相关,即输入 3 的值是图 3 中每个训练示例的输出。2.所以对于测试示例输出值应该是1。

训练过程包括以下步骤:

  • 前向传播:
    获取输入,乘以权重(只需使用随机数作为权重)
    令 Y = W i I i = W 1 I 1 +W 2 I 2 +W 3 I 3
    将结果通过 sigmoid 公式进行计算神经元的输出。Sigmoid 函数用于对 0 和 1 之间的结果进行归一化:
    1/1 + e -y
  • 反向传播
    计算误差,即实际输出与预期输出之间的差异。根据误差,通过将误差乘以输入并再次乘以 Sigmoid 曲线的梯度来调整权重:
    权重 += 误差输入输出(1-输出),这里输出(1-输出)是 Sigmoid 曲线的导数。
    注意:重复整个过程数千次迭代。

让我们用 Python 编写整个过程。我们将使用 Numpy 库来帮助我们轻松地完成矩阵的所有计算。

3、实验环境

Python 3.9

Anaconda

jupyter notebook

4、案例实现

rom joblib.numpy_pickle_utils import xrange
from numpy import *
  
  
class NeuralNet(object):
    def __init__(self):
        # Generate random numbers
        random.seed(1)
  
        # Assign random weights to a 3 x 1 matrix,
        self.synaptic_weights = 2 * random.random((3, 1)) - 1
  
    # The Sigmoid function
    def __sigmoid(self, x):
        return 1 / (1 + exp(-x))
  
    # The derivative of the Sigmoid function.
    # This is the gradient of the Sigmoid curve.
    def __sigmoid_derivative(self, x):
        return x * (1 - x)
  
    # Train the neural network and adjust the weights each time.
    def train(self, inputs, outputs, training_iterations):
        for iteration in xrange(training_iterations):
            # Pass the training set through the network.
            output = self.learn(inputs)
  
            # Calculate the error
            error = outputs - output
  
            # Adjust the weights by a factor
            factor = dot(inputs.T, error * self.__sigmoid_derivative(output))
            self.synaptic_weights += factor
  
        # The neural network thinks.
  
    def learn(self, inputs):
        return self.__sigmoid(dot(inputs, self.synaptic_weights))
  
  
if __name__ == "__main__":
    # Initialize
    neural_network = NeuralNet()
  
    # The training set.
    inputs = array([[0, 1, 1], [1, 0, 0], [1, 0, 1]])
    outputs = array([[1, 0, 1]]).T
  
    # Train the neural network
    neural_network.train(inputs, outputs, 10000)
  
    # Test the neural network with a test example.
    print(neural_network.learn(array([1, 0, 1])))

预期输出:
经过 10 次迭代后,我们的神经网络预测该值为 0.65980921。看起来不太好,因为答案实际上应该是 1。如果我们将迭代次数增加到 100,我们会得到 0.87680541。我们的网络变得越来越智能!随后,对于 10000 次迭代,我们得到 0.9897704,这非常接近,并且确实是令人满意的输出。


文章下方有交流学习区!一起学习进步!
首发CSDN博客,创作不易,如果觉得文章不错,可以点赞收藏评论
你的支持和鼓励是我创作的动力❗❗❗

你可能感兴趣的:(机器学习案例,机器学习,python,人工智能,ANN)