【人工智能原理自学】高维空间:机器如何面对越来越复杂的问题

news2024/11/13 22:55:03

😊你好,我是小航,一个正在变秃、变强的文艺倾年。
🔔笔记来自B站UP主Ele实验室的《小白也能听懂的人工智能原理》。
🔔本文讲解高维空间:机器如何面对越来越复杂的问题,一起卷起来叭!

目录

  • 一、“维度”
  • 二、代码实现

在这里插入图片描述

一、“维度”

如果我们判断一个人是否会打篮球,仅仅通过身高角度显然是不合理的,我们还需要从其他角度分析,比如体重、身体灵活性以及是否经常见到凌晨四点钟的太阳等等因素。
在这里插入图片描述
同样在豆豆的世界,豆豆的毒性不仅与大小有关,还可能与颜色深浅、软硬等有关

在这里插入图片描述
对于三维世界的我们,很难在四维空间作图,但是数学作为一种抽象的工具,在数学看来,这不过是在输入上增加了一个维度而已,输入数据有多少元素也就是所谓的特征维度,也叫数据维度。
也就是说我们从更多的维度观察豆豆的时候,也就能更好的预测它的毒性。


我们选择大小和颜色深浅两个维度为例:

此时预测函数的线性部分需要从一元一次函数变成二元一次函数
在这里插入图片描述
在这里插入图片描述
如果我们在三维坐标系中把这个函数画出来,很明显这是一个平面,正如一元一次函数中是一个线性函数
在这里插入图片描述
这个平面被非线性激活函数激活后,就被扭曲成了一个s型的曲面,正如一元一次函数的直线被激活函数激活后扭曲为一个s型曲线一样
在这里插入图片描述
此时我们可以通过调节参数,在俯视下可以使用一条直线将豆豆分割为有毒无毒,而这条线也称为等高线割线
在这里插入图片描述
但如果豆豆的分布是这样的情况,我们上述的方法也就无能为力了,这种问题也被称为:线性不可分问题
在这里插入图片描述
这个时候我们就需要增加隐藏层神经元,让这个直线“弯曲
在这里插入图片描述
在这里插入图片描述

💡思考:需要几个隐藏神经元可以让分割线形成一个圈

在这里插入图片描述

二、代码实现

我们对上述过程代码实现:

🔨豆豆数据集模拟:dataset.py

import numpy as np

def get_beans(counts):
	xs = np.random.rand(counts,2)*2
	ys = np.zeros(counts)
	for i in range(counts):
		x = xs[i]
		if (x[0]-0.5*x[1]-0.1)>0:
			ys[i] = 1
	return xs,ys

def get_beans2(counts):
	xs = np.random.rand(counts,2)*2
	ys = np.zeros(counts)
	for i in range(counts):
		x = xs[i]
		if (np.power(x[0]-1,2)+np.power(x[1]-0.3,2))<0.5:
			ys[i] = 1


	return xs,ys

🚩豆豆毒性分布如下:
在这里插入图片描述
🚩梯度下降前:
在这里插入图片描述

🔨绘图工具封装:plot_utils.py

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

def show_scatter(xs,y):
	x = xs[:,0]
	z = xs[:,1]
	fig = plt.figure()
	ax = Axes3D(fig)
	ax.scatter(x, z, y)
	plt.show()

def show_surface(x,z,forward_propgation):
	x = np.arange(np.min(x),np.max(x),0.1)
	z = np.arange(np.min(z),np.max(z),0.1)
	x,z = np.meshgrid(x,z)
	y = forward_propgation(x,z)
	fig = plt.figure()
	ax = Axes3D(fig)
	ax.plot_surface(x, z, y, cmap='rainbow')
	plt.show()



def show_scatter_surface(xs,y,forward_propgation):
	x = xs[:,0]
	z = xs[:,1]
	fig = plt.figure()
	ax = Axes3D(fig)
	ax.scatter(x, z, y)

	x = np.arange(np.min(x),np.max(x),0.01)
	z = np.arange(np.min(z),np.max(z),0.01)
	x,z = np.meshgrid(x,z)
	y = forward_propgation(x,z)
	
	ax.plot_surface(x, z, y, cmap='rainbow')
	plt.show()

🔨梯度下降:2_inputs_model.py

import numpy as np
import dataset
import plot_utils

m = 100
xs, ys = dataset.get_beans(m)
print(xs)
print(ys)

plot_utils.show_scatter(xs, ys)

w1 = 0.1
w2 = 0.2
b = 0.1

## [[a,b][c,d]]
## x1s[a,c]
## x2s[b,d]
## 逗号,区分的是维度,冒号:区分的是索引,省略号… 用来代替全索引长度
# 在所有的行上,把第0列切割下来形成一个新的数组
x1s = xs[:, 0]
x2s = xs[:, 1]

# 前端传播
def forward_propgation(x1s, x2s):
    z = w1 * x1s + w2 * x2s + b
    a = 1 / (1 + np.exp(-z))
    return a

plot_utils.show_scatter_surface(xs, ys, forward_propgation)

for _ in range(500):
    for i in range(m):
        x = xs[i] ## 豆豆特征
        y = ys[i] ## 豆豆是否有毒
        x1 = x[0]
        x2 = x[1]

        a = forward_propgation(x1, x2)

        e = (y - a) ** 2

        deda = -2 * (y - a)
        dadz = a * (1 - a)
        dzdw1 = x1
        dzdw2 = x2
        dzdb = 1

        dedw1 = deda * dadz * dzdw1
        dedw2 = deda * dadz * dzdw2
        dedb = deda * dadz * dzdb

        alpha = 0.01
        w1 = w1 - alpha * dedw1
        w2 = w2 - alpha * dedw2
        b = b - alpha * dedb

plot_utils.show_scatter_surface(xs, ys, forward_propgation)

🚩梯度下降后:
在这里插入图片描述

📌 [ 笔者 ]   文艺倾年
📃 [ 更新 ]   2023.1.18
❌ [ 勘误 ]   /* 暂无 */
📜 [ 声明 ]   由于作者水平有限,本文有错误和不准确之处在所难免,
              本人也很想知道这些错误,恳望读者批评指正!
🔍 [ 代码 ]   https://github.com/itxaiohanglover/ai_lesson

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/171821.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用TortoiseGit同步项目到GitHub简单教程

1.TortoiseGit简介与安装 TortoiseGit是Git的Windows桌面可视化工具&#xff0c;通过软件的操作来实现git命令的效果&#xff0c;对git小白较友好。TortoiseGit可以通过官网https://tortoisegit.org/下载&#xff0c;下载之后即可按照普通软件的方式进行安装&#xff0c;每一步…

Could not find a version that satisfies the requriement xxx

Could not find a version that satisfies the requriement xxx1. 场景描述2. 解决办法2.1 升级pip2.2 更换镜像源2.3 查询所有安装的模块3.Awakening1. 场景描述 使用python自带的pip安装一些包时&#xff0c;总是会报以下错误 使用yum也会报一些错&#xff0c;反正就是装不上…

Windows10彻底关闭自动更新

文章目录前言无赖步骤关闭自动更新服务关闭自动更新策略效果总结前言 在写这篇总结之前&#xff0c;我已经尝试过多次关闭Win10的自动更新了&#xff0c;一般来说更新之后可以使操作系统更加健壮&#xff0c;但总会有一些原因让我们不想更新&#xff0c;比如我最近总是需要远程…

110、【树与二叉树】leetcode ——669. 修剪二叉搜索树:递归法(C++版本)

题目描述 解题思路 大题思路类似于 450.删除二叉搜索树中的节点&#xff08;递归法迭代法&#xff09; &#xff0c;区别在于删除的是某一区域的节点值&#xff0c;并且要保留区域内部的节点值。 对于第一次找到结点值小于low的情况&#xff0c;有两种&#xff1a;&#xff08…

【JavaWeb】HTML零基础入门

✨哈喽&#xff0c;进来的小伙伴们&#xff0c;你们好耶&#xff01;✨ &#x1f6f0;️&#x1f6f0;️系列专栏:【JavaWeb】 ✈️✈️本篇内容:HTML基础语法详解&#xff0c;附带综合案例。 &#x1f680;&#x1f680;代码托管平台github&#xff1a;JavaWeb代码存放仓库&am…

Python实战项目2——自动获取酷狗音乐工具

&#x1f935;‍♂️ 个人主页老虎也淘气 个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f44d;&#x1f3fb; 收藏…

vueJs中readonly与shallowReadonly函数的使用比较

01readonly()函数让一个响应式数据变为只读的,接收一个响应式数据,经过readonly加工处理一下,那么新赋值的数据都不允许修改接受一个对象 (不论是响应式还是普通的) 或是一个 ref&#xff0c;返回一个原值的只读代理页面没有更新有两种情况[1]. 数据修改了,但数据不是响应式,vu…

自主可控!万应低代码通过华为鲲鹏、麒麟等多项国产化认证及国家信息安全等级保护三级备案证明

01 万应低代码通过信息系统安全等级保护三级备案证明 凭借过硬的技术能力及完善的信息安全管理体系&#xff0c;万应低代码顺利通过“信息系统安全等级保护三级测评”&#xff08;简称&#xff1a;等保三级&#xff09;&#xff0c;正式获得由公安部核准颁发的“信息系统安全等…

Probabilistic Volumetric Fusion for Dense Monocular SLAM

论文标题&#xff1a;Probabilistic Volumetric Fusion for Dense Monocular SLAM 论文链接&#xff1a;https://arxiv.org/pdf/2210.01276.pdf 论文思想 提出了一种新的方法&#xff0c;通过利用深度密集的单眼SLAM和快速不确定性传播&#xff0c;从图像中重建三维场景 所提…

Vue如何高效通过JSX动态渲染组件

一、明确需求 如何渲染动态组件呢&#xff1f; 有一组数组结构如下&#xff1a; const arr [ { tag: van-field },// 输入框{ tag: van-cell }, // 弹出层{ tag: van-stepper } // 步进器 ] 想通过循环arr&#xff0c;拿到tag渲染对应的组件。 下面我们分析如何写才是最优。…

高校数据可视化(智慧校园)

教育数据可视化大屏有哪些内容&#xff1f; 教育数据可视化大屏能够展示和分析很多数据&#xff0c;比如&#xff1a;在校生数据分析、招生数据分析、就业数据分析、教职工数据分析&#xff0c;科研数据分析等综合数据分析。 跟传统的教学不同&#xff0c;现代教育对效果的要求…

03.字符函数和字符串函数

C语言中对字符和字符串的处理很是频繁&#xff0c;但是C语言本身是没有字符串类型的&#xff0c;字符串通常放在 常量字符串中或者字符数组中。字符串常量适用于那些对它不做修改的字符串函数。 1. 函数介绍 1.1 strlen size_t strlen ( const char * str ); ✳字符串以 \0 作…

python虚拟机集锦(2)-垃圾收集算法(2)

目录识别参考循环为什么移动无法访问的对象更好正在销毁无法访问的对象优化&#xff1a;世代收集最古老的一代识别参考循环 当GC启动时&#xff0c;它在第一个链接列表中拥有所有要扫描的容器对象。目标是移动所有无法到达的对象。由于大多数对象都是可访问的&#xff0c;因此…

【回首2022,展望2023,兔年你好!】

兔年到&#xff0c;新年好&#xff01;提前祝各位程序猿新年好&#xff01;新的一年&#xff0c;意味着新的开始。回顾2022&#xff0c;我学习从0基础萌新&#xff0c;蜕变成学习完c语言&#xff0c;有了基础代码能力的新手。从第一个printf出来hello world&#xff0c;打印到屏…

jpg图片损坏怎么修复?可以试试这个方法

生活中&#xff0c;相信不少小伙伴在使用电脑或手机时&#xff0c;难免会遇到这样的问题&#xff0c;就是保存的图片损坏了&#xff0c;看不到图像了。在出现图像损坏后&#xff0c;我们经常问自己的第一个问题是&#xff0c;有什么办法可以修复它们&#xff0c;之前小编也是遇…

回收租赁商城系统功能拆解11讲-会员分组

回收租赁系统适用于物品回收、物品租赁、二手买卖交易等三大场景。 可以快速帮助企业搭建类似闲鱼回收/爱回收/爱租机/人人租等回收租赁商城。 回收租赁系统支持智能评估回收价格&#xff0c;后台调整最终回收价&#xff0c;用户同意回收后系统即刻放款&#xff0c;用户微信零…

MySQL监控(三):Grafana入门

1.官方文档 Grafana 安装包下载地址 基于Prometheus、Grafana的可视化监控实践 grafana安装部署、自定义主题、dashboard模板导入 Grafana Dashboard下载 2.安装 我是通过压缩包的方式安装的&#xff0c;官网也有给出yum的安装方式。 wget https://dl.grafana.com/enterpri…

【Javascript】面向对象编程,this,原型与原型链,类与实例,class,Maps

❤️ Author&#xff1a; 老九 ☕️ 个人博客&#xff1a;老九的CSDN博客 &#x1f64f; 个人名言&#xff1a;不可控之事 乐观面对 &#x1f60d; 系列专栏&#xff1a; 文章目录对象中的方法/thisthis使用bind函数原型原型链类与实例classclass语法补充Map对象中的方法/this …

【设计模式】结构型模式·代理模式

学习汇总入口【23种设计模式】学习汇总(数万字讲解体系思维导图) 写作不易&#xff0c;如果您觉得写的不错&#xff0c;欢迎给博主来一波点赞、收藏~让博主更有动力吧&#xff01; 一.概念 由于某些原因访问对象不适合或者不能直接引用目标对象&#xff0c;这时可以为目标对象…

可视化VIT中的注意力

2022年&#xff0c; Vision Transformer (ViT)成为卷积神经网络(cnn)的有力竞争对手&#xff0c;卷积神经网络目前是计算机视觉领域的最先进技术&#xff0c;广泛应用于许多图像识别应用。在计算效率和精度方面&#xff0c;ViT模型超过了目前最先进的(CNN)几乎四倍。 ViT是如何…