tnblog
首页
视频
资源
登录

python 高维空间:机器如何面对越来越复杂的问题(学习笔记)

3159人阅读 2023/4/23 11:17 总访问:3467390 评论:0 收藏:0 手机
分类: AI

python 高维空间:机器如何面对越来越复杂的问题(学习笔记)

机器如何面对越来越复杂的问题?


当我们豆豆的毒性不仅与大小有关,还与颜色有关的时候我们就需要三维坐标系,来显示各不相同的豆豆和毒性的关系。


而只有满足某些大小和颜色深浅的豆豆才有毒,红色的豆豆有毒的概率是1,其他无毒的是0。


由于多了一项颜色的树突输入,预测函数的线性部分也从一元一次函数变成二元一次函数,这个函数通过三维画出来就是一个平面,再通过Sigmoid函数画出来就是一个曲面。


当我们找到预测曲面上预测值为0.5的点,连接在一起用地理里的概念来讲就是为0.5的等高线,连接起来是一条直线。
这条直线大于0.5表示有毒,小于0.5表示无毒。


当我们从上往下看俯视图效果的时候,这个0.5的等高线也就是类型分割线


在之前的sigmoid中,也有等高线,只是在二维平面化成了一个点称为等高点


通过不断调节权重参数w1,w2以及偏置项b,可以让预测模型的登高线顺利分割出有毒和无毒两类豆豆。


而当有毒的豆豆是一个曲面时,这时候就需要多个神经元来进行扭曲才行。


在三维空间中的等高线是一个曲线,而从二维的视角这两个点被称为直点。


当我们考虑的输入数据越多,特征维度就越多。


如果一个一个去写它们的表达式就太麻烦了,到后面我们可以使用向量和矩阵来进行计算。

编程实践


接下来的编程实验,我们将一个输入编程两个输入的神经元,豆豆预测的维度为二。


张量与数组的关系


首先我们导入豆豆的取值。

  1. import numpy as np
  2. def get_beans7(counts):
  3. xs = np.random.rand(counts,2)*2
  4. ys = np.zeros(counts)
  5. for i in range(counts):
  6. x = xs[i]
  7. if (x[0]-0.5*x[1]-0.1)>0:
  8. ys[i] = 1
  9. return xs,ys


然后添加绘图工具的代码plot_utils.py

  1. import matplotlib.pyplot as plt
  2. from mpl_toolkits.mplot3d import Axes3D
  3. import numpy as np
  4. def show_scatter(xs,y):
  5. x = xs[:,0]
  6. z = xs[:,1]
  7. fig = plt.figure()
  8. # 创建3D对象
  9. ax = fig.add_subplot(111,projection='3d')
  10. ax.scatter(x, z, y)
  11. plt.show()
  12. def show_surface(x,z,forward_propgation):
  13. x = np.arange(np.min(x),np.max(x),0.1)
  14. z = np.arange(np.min(z),np.max(z),0.1)
  15. x,z = np.meshgrid(x,z)
  16. y = forward_propgation(x,z)
  17. fig = plt.figure()
  18. ax = fig.add_subplot(111,projection='3d')
  19. ax.plot_surface(x, z, y, cmap='rainbow')
  20. plt.show()
  21. def show_scatter_surface(xs,y,forward_propgation):
  22. x = xs[:,0]
  23. z = xs[:,1]
  24. fig = plt.figure()
  25. ax = fig.add_subplot(111,projection='3d')
  26. ax.scatter(x, z, y)
  27. x = np.arange(np.min(x),np.max(x),0.01)
  28. z = np.arange(np.min(z),np.max(z),0.01)
  29. x,z = np.meshgrid(x,z)
  30. y = forward_propgation(x,z)
  31. ax.plot_surface(x, z, y, cmap='rainbow')
  32. plt.show()


先编写几行简单的代码,来生成豆豆,第一列是大小,第二列是颜色值。

  1. import dataset
  2. import numpy as np
  3. import plot_utils
  4. m = 100
  5. xs,ys = dataset.get_beans7(m)
  6. print(xs)
  7. print(ys)


这个ys表示毒性,0表示无毒,1表示有毒。


接下来我们通过调用plot_utils类的show_scatter方法来绘制散点图。

  1. import dataset
  2. import numpy as np
  3. import plot_utils
  4. m = 100
  5. xs,ys = dataset.get_beans7(m)
  6. print(xs)
  7. print(ys)
  8. # 三维散点图
  9. plot_utils.show_scatter(xs,ys)

  1. w1 = 0.1
  2. w2 = 0.1
  3. b = 0.1
  4. # 大小
  5. x1s = xs[:,0]
  6. # 深浅
  7. x2s = xs[:,1]
  8. # 前向传播
  9. def forward_propgation(x1s,x2s):
  10. # 预测函数
  11. z = w1 * x1s + w2 * x2s + b
  12. # sigmoid函数求导
  13. a = 1/(1+np.exp(-z))
  14. return a
  15. # 绘制一次求导的过程
  16. plot_utils.show_scatter_surface(xs,ys,forward_propgation)

  1. import dataset
  2. import numpy as np
  3. import plot_utils
  4. m = 100
  5. xs,ys = dataset.get_beans7(m)
  6. print(xs)
  7. print(ys)
  8. # 三维散点图
  9. plot_utils.show_scatter(xs,ys)
  10. w1 = 0.1
  11. w2 = 0.1
  12. b = 0.1
  13. # 大小
  14. x1s = xs[:,0]
  15. # 深浅
  16. x2s = xs[:,1]
  17. # 前向传播
  18. def forward_propgation(x1s,x2s):
  19. # 预测函数
  20. z = w1 * x1s + w2 * x2s + b
  21. # sigmoid函数求导
  22. a = 1/(1+np.exp(-z))
  23. return a
  24. # 绘制一次求导的过程
  25. plot_utils.show_scatter_surface(xs,ys,forward_propgation)
  26. # 梯度下降 500 * 100
  27. for _ in range(500):
  28. for i in range(m):
  29. x = xs[i]
  30. y = ys[i]
  31. # 单个大小
  32. x1 = x[0]
  33. # 单个颜色值
  34. x2 = x[1]
  35. # 进行前向传播一次
  36. a = forward_propgation(x1,x2)
  37. # 平方差
  38. e = (y - a) ** 2
  39. # e对a的求导
  40. deda = -2*(y-a)
  41. # a对z的求导
  42. dadz = a*(1-a)
  43. # z对w1的求导
  44. dzdw1 = x1
  45. # z对w2的求导
  46. dzdw2 = x2
  47. # z对b的求导
  48. dzdb = 1
  49. # 获取de对dw1求导
  50. dedw1 = deda * dadz * dzdw1
  51. # 获取de对dw2求导
  52. dedw2 = deda * dadz * dzdw2
  53. # 获取de对db求导
  54. dedb = deda * dadz * dzdb
  55. # 设置阿尔法的弧度为0.01
  56. alpha = 0.01
  57. # 计算误差
  58. w1 = w1 - alpha * dedw1
  59. w2 = w2 - alpha * dedw2
  60. b = b - alpha * dedb
  61. # 绘制
  62. plot_utils.show_scatter_surface(xs,ys,forward_propgation)


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

python学习 1-安装

Ptyhon非常简单易用的面向对象的脚本语言,跨平台 入门简单python分2个版本 Python2、Python3。Python 2.7 将于 2020 年结...

python学习 2-基本语法

基础:python脚本语言,不需要编译(像C#、Java、PHP、C++需要编译成机器可识别的语言), 而直接由解释器解释,很多地方类似...

python学习 3-爬虫基本介绍 及简单实例

爬虫爬虫就是一只猪,蜘蛛。。 网络蜘蛛。互联网是一个网由各个网站组成。无数的蜘蛛就在网上到处爬,根据网址从一个网站爬...

python实例 1-日志抓取处理 补错(附日志小技巧)

有时候数据出了问题,可以从日志中恢复数据(如果你没记日志..没备份..→_→..)一、日志展示介绍个平常自己用的小方法,如...

python实例 2-12306抢票(一) 登陆

开坑年关将近,终于对12306下手了,,平安夜撸代码,攻克了12306的登陆 2018-12-24 22:16:00没错 这篇博客就写从零开始的异...

python安装pip以及使用pip安装requests等模块

pip很简单的介绍pip 是一个现代的,通用的 Python 包管理工具。提供了对 Python 包的查找、下载、安装、卸载的功能。如果想...

python数据集合区别

列表(list):可读写,值可以重复,有序排列,初始化语法:['tom',‘jerry’]元组(tuple):只读,值可以重复,...

python实例 2-12306抢票(二) 下单

第二篇 刷票与下单1.记住登陆上一篇写了登陆:http://www.tnblog.net/cz/article/details/162 为了方便调试 不让每次登陆都...

使用VS Code开发python

Vs Code开发Python可以很好的支持代码调试、智能提示、代码对齐等1:下载VS Codehttps://code.visualstudio.com/Downloadvs ...

python变量与命名

Python使用等号 ( = ) 作为赋值运算符,例如a = 66 就是一条赋值语句,作用就是将66赋值给变量a。Python是弱类型语言,弱类...

python关键字和内置函数

Python中包含了如下所示的关键字:上面这些关键字都不能作为变量名。另外,Python 3还提供了如下表所示的内置函数:也不能...

python基础输入和输出

Python使用print()函数向打印程序输出,采用input()函数接收程序输入。print()函数的语法格式如下:print(value,...,sep=&#...

python基本数据类型

Python包含两大类基本数据类型:数值类型、字符串类型,三大类组合数据类型:集合类型、序列类型和字典类型.数值类型:整型...

python中通过fake_useragent生成随机UserAgent

fake_useragent第三方库,来实现随机请求头的设置;GitHub ---> https://github.com/hellysmile/fake-useragent安...

python 升级pip

一条命令即可: python -m pip install --upgrade pip 安装成功后,一般是在python目录下面的Scripts里边的

python html编码解码

使用方法:html.escape(s)与html.unescape即可 import html s="<div>jsdlfjsl</div>" #html编...
这一世以无限游戏为使命!
排名
2
文章
634
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术