热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

机器学习——神经网络(三):线性神经网络

文章目录线性神经网络(LMS)1.基础理论2.简单的线性神经网络例子:3.使用线性神经网络解决异或问题:线性神经网络(LMS

文章目录

    • 线性神经网络(LMS)
        • 1.基础理论
        • 2. 简单的线性神经网络例子:
        • 3.使用线性神经网络解决异或问题:


线性神经网络(LMS)


1.基础理论


  • 对比理解:
感知器LMS
只有两种输出(1或者-1)输出可以是任意的值
激活函数可以是sign、sigmod等函数激活函数是线性函数
解决不了异或等问题只能解决线性可分问题,但是可以解决异或问题


  • 网络结构:
公式1
X是指输入神经元
v是指输出神经元


公式推导2
在这里插入图片描述


2. 简单的线性神经网络例子:


说明

  1. 数据点为(3,3)、(4,3)、(1,1),其中(3,3)和(4,3)为正样本(1,1)为负样本
  2. 初始化权值的范围在[-1,1]

import numpy as np
import matplotlib.pyplot as plt
# 载入数据
x_data = np.array([[1,3,3],[1,4,3],[1,1,1]])
y_data = np.array([[1,1,-1]])# 设置权值
w = (np.random.random(3)-0.5)*2
print(w)# 设置学习率
lr = 0.11
# 神经网络的输出
out_data = 0
# 统计迭代次数
n = 0def update():global x_data,y_data,w,lr,nn += 1out_data = np.dot(x_data,w.T) # x_data是4*3矩阵,w是3*1矩阵,输出4*1矩阵w_c = lr*((y_data-out_data.T).dot(x_data))/int(x_data.shape[0])# 分母求得误差的总合,分子表示sample的数量,结果表示平均误差w = w+w_cfor i in range(100):update() # 权值更新out_data = np.sign(np.dot(x_data,w.T)) # 计算当前输出print("epoch:",i)print("w:",w)if(out_data==y_data.T).all(): # 如果当前输出与实际输出相当,模型收敛,循环结束(。all是全部相等的意思)print("#####################")print("finished")print("epoch:",i)print("#####################")break
# 正样本
x1 = [3,4]
y1 = [3,3]
# 负样本
x2 = [1]
y2 = [1]# 计算分界线的斜率以及截距
k = -w[0,1]/w[0,2]
b = -w[0,0]/w[0,2]
print("k = ",k)
print("b = ",b)xdata =np.linspace(0,5)
plt.figure()
plt.plot(xdata,xdata*k+b,'r')
plt.scatter(x1,y1,c='b')
plt.scatter(x2,y2,c='y')
plt.show()

结果:

结果


3.使用线性神经网络解决异或问题:


用一种简介的方式解决线性不可分的问题:用多个线性函数对区域进行划分,然后对各个神经元的输出做逻辑运算
解决异或问题需要利用曲线,所以构建跟多的输入属性即

(1,x1,x2,x12,x22,2x1x2)(1,x_1,x_2,x_1^2,x_2^2,2x_1x_2)(1,x1,x2,x12,x22,2x1x2)

import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures
# 载入数据(直接构建)
x_data = np.array([[1,0,0,0,0,0],[1,0,1,0,0,1],[1,1,0,1,0,0],[1,1,1,1,1,1]])
y_data = np.array([[-1,1,1,-1]])# 使用sklearn中的PolynomialFeatures函数生成
poly_reg = PolynomialFeatures(degree=2)
x_poly = poly_reg.fit_transform([[0,0],[0,1],[1,0],[1,1]])
print(x_poly)
# 标签
y_data = np.array([[-1,1,1,-1]])
# 设置权值
w = (np.random.random(6)-0.5)*2
print(w)
# 设置学习率
lr = 0.11
# 神经网络的输出
out_data = 0
# 统计迭代次数
n = 0def update():global x_data,y_data,w,lr,nn += 1out_data = np.dot(x_data,w.T) # x_data是4*3矩阵,w是3*1矩阵,输出4*1矩阵w_c = lr*((y_data-out_data.T).dot(x_data))/int(x_data.shape[0])# 分母求得误差的总合,分子表示sample的数量,结果表示平均误差w = w+w_c
for i in range(1000):update() # 权值更新
# 正样本
x1 = [0,1]
y1 = [1,0]
# 负样本
x2 = [1,0]
y2 = [1,0]def calculate(x,root):"""进行公式推导,确定二次方程的解得到a/b/c返回函数的解"""a = w[0,5]b = w[0,2]+x*w[0,4]c = w[0,0]+x*w[0,1]+x*x*w[0,3]if root ==1:return(-b+np.sqrt(b*b-4*a*c))/(2*a)if root == 2:return(-b-np.sqrt(b*b-4*a*c))/(2*a)
# 绘图
xdata =np.linspace(-1,2) # linspace是线性划分区间,生成一系列的点
plt.figure()
plt.plot(xdata,calculate(xdata,1),'r')
plt.plot(xdata,calculate(xdata,2),'r')
plt.plot(x1,y1,'bo') # 注意这里的plot并非是scatter
plt.plot(x2,y2,'yo')
plt.show()

结果视图:


在这里插入图片描述


进击的巨人——三笠.阿克曼



推荐阅读
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 很多时候在注册一些比较重要的帐号,或者使用一些比较重要的接口的时候,需要使用到随机字符串,为了方便,我们设计这个脚本需要注意 ... [详细]
  • 关于如何快速定义自己的数据集,可以参考我的前一篇文章PyTorch中快速加载自定义数据(入门)_晨曦473的博客-CSDN博客刚开始学习P ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 本文介绍了在Python张量流中使用make_merged_spec()方法合并设备规格对象的方法和语法,以及参数和返回值的说明,并提供了一个示例代码。 ... [详细]
  • Python使用Pillow包生成验证码图片的方法
    本文介绍了使用Python中的Pillow包生成验证码图片的方法。通过随机生成数字和符号,并添加干扰象素,生成一幅验证码图片。需要配置好Python环境,并安装Pillow库。代码实现包括导入Pillow包和随机模块,定义随机生成字母、数字和字体颜色的函数。 ... [详细]
  • 本文介绍了贝叶斯垃圾邮件分类的机器学习代码,代码来源于https://www.cnblogs.com/huangyc/p/10327209.html,并对代码进行了简介。朴素贝叶斯分类器训练函数包括求p(Ci)和基于词汇表的p(w|Ci)。 ... [详细]
  • Python教学练习二Python1-12练习二一、判断季节用户输入月份,判断这个月是哪个季节?3,4,5月----春 ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
author-avatar
Y死一般的痛过
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有