机器学习,回归算法笔记(草履虫都能看懂),简单的一批

机器学习笔记系列

可以从上至下按顺序看喔

有监督学习

含义

  • 给算法一个数据集,其中包含了正确的答案,告诉算法啥是对的啥是错的

  • 我们想要在监督学习中,对于数据集中的每个样本,我们想要算法预测,并得出正确答案

回归

  • 目的是预测一个连续值输出
  • 如一件衣服卖多少钱,可以是100,可以是200或300等等

单元线性回归

含义
  • 给定的数据集为一一对应的数据集,一个x对应一个y,例:一元一次方程

  • 一个算法h(x)给定一个输入值x,能给出一个确定的输出值y,称之为单函数(元)线性回归。

代价函数
  • 代价函数被称为平方误差函数
  • 将预测值与真实值之间的误差取到最小的函数,且用另一个函数来封装他,这个里面的另一个函数就是代价函数
  • 过程如下:
    1. 假设函数: h θ ( x ) = θ 0 + θ 1 x h_\theta(x)=\theta_0+\theta_1x hθ(x)=θ0+θ1x
    2. 参数: θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1
    3. 代价参数: J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta_0,\theta_1)=\frac{1}{2m}\sum\limits_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^2 J(θ0,θ1)=2m1i=1m(hθ(x(i))y(i))2
    4. 目标: m i n i m i z e θ 0 , θ 1   J ( θ 0 , θ 1 ) \mathop{minimize}\limits_{\theta_0,\theta_1}\ J(\theta_0,\theta_1) θ0,θ1minimize J(θ0,θ1)
  • 如上步骤所示,先创建一个假设函数来构成一个线性函数,目的是通过调整参数来尽可能的减少假设函数所求的值和真实数据之间的差距,从而构成的一个代价函数
  • 此处的函数 J J J就是代价函数
  • 代价函数的作用就是其最小值点的参数就是假设函数与数据集所拟合的最好的一条线
梯度下降法
  • 公式: θ j : = θ j − α ∂ ∂ θ j J ( θ 0 , θ 1 ) \theta_j:=\theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1) θj:=θjαθjJ(θ0,θ1),此处j等于0和1(其中的阿尔法为学习速率,阿尔法越大,步子迈的就越大,反之亦然)
  • 同步更新 θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1的值
  • 更新步骤如下:
    1. t e m p 0 : = θ 0 − α ∂ ∂ θ 0 J ( θ 0 , θ 1 ) temp0:=\theta_0-\alpha\frac{\partial}{\partial\theta_0}J(\theta_0,\theta_1) temp0:=θ0αθ0J(θ0,θ1)
    2. t e m p 1 : = θ 1 − α ∂ ∂ θ 1 J ( θ 0 , θ 1 ) temp1:=\theta_1-\alpha\frac{\partial}{\partial\theta_1}J(\theta_0,\theta_1) temp1:=θ1αθ1J(θ0,θ1)
    3. θ 0 : = t e m p 0 \theta_0:=temp0 θ0:=temp0
    4. θ 1 : = t e m p 1 \theta_1:=temp1 θ1:=temp1
将梯度下降法与代数函数结合在一起
  • 先要知道导数项的值,如上述公式所示,利用求偏导求出 ∂ ∂ θ 0 J ( θ 0 , θ 1 ) \frac{\partial}{\partial\theta_0}J(\theta_0,\theta_1) θ0J(θ0,θ1) ∂ ∂ θ 1 J ( θ 0 , θ 1 ) \frac{\partial}{\partial\theta_1}J(\theta_0,\theta_1)
<think>我们被要求详细解释PHP封装协议,从基础到精通,使用简单易懂的语言。根据引用[1]和[3],我们知道PHP在Web开发中用于处理动态内容,并且经常需要与文件系统或网络资源交互。封装协议(Wrapper)是PHP中一个重要的特性,它允许我们像操作普通文件一样操作各种资源(如HTTP、FTP、压缩文件等)。计划回答结构:1.什么是封装协议?(基础)2.内置的封装协议有哪些?(列举并简要说明)3.如何使用封装协议?(包括示例)4.自定义封装协议(进阶)5.封装协议的应用场景注意:引用中并没有直接提到封装协议,但提到了PHP处理数据、存储和读取,封装协议正是处理这些资源访问的一种机制。我们将按照上述结构进行解释,并尽量使用简单易懂的语言和示例。</think>### PHP封装协议详解:从入门到精通 #### 一、基础概念(什么是封装协议?) 封装协议(Wrapper)是PHP中用于**统一访问不同资源**的抽象层。它允许开发者使用标准文件函数(如`fopen()`, `file_get_contents()`)处理各种资源类型,包括: - 本地文件系统(`file://`) - HTTP/HTTPS网页(`http://`) - FTP服务器(`ftp://`) - 压缩文件(`zip://`) - 数据流(`php://`)等 核心原理:通过**协议前缀**(如`http://`)告诉PHP使用对应的协议处理器解析资源路径,实现**统一操作接口**[^1]。 --- #### 二、常用内置封装协议详解 1. **`file://` (默认协议)** 访问本地文件系统: ```php $content = file_get_contents('file:///var/www/data.txt'); // 等效于(默认省略协议): $content = file_get_contents('/var/www/data.txt'); ``` 2. **`http://` & `https://`** 获取网络资源: ```php $html = file_get_contents('https://www.example.com/api'); // 发送带参数的GET请求: $data = file_get_contents('http://api.com?user=john&page=2'); ``` 3. **`php://` (PHP流协议)** - `php://input`:读取原始POST数据 ```php $rawData = file_get_contents('php://input'); ``` - `php://output`:直接写入输出缓冲 ```php fwrite(fopen('php://output', 'w'), 'Hello World'); ``` - `php://temp`:临时数据存储(内存不足时转存磁盘) ```php $temp = fopen('php://temp', 'r+'); fwrite($temp, 'Temporary data'); ``` 4. **`zip://`** 直接读取压缩包内文件: ```php // 读取 archive.zip 中 config.ini 的内容 $content = file_get_contents('zip://archive.zip#config.ini'); ``` 5. **`data://`** 嵌入Base64或URL编码数据: ```php $img = file_get_contents('data:image/png;base64,iVBORw0KGgo...'); ``` --- #### 三、高级应用:自定义封装协议 通过`stream_wrapper_register()`创建自定义协议处理器: ```php class MyWrapper { public function stream_open($path, $mode, $options, &$opened_path) { // 解析路径并建立连接 $this->position = 0; return true; } public function stream_read($count) { // 返回自定义数据 $data = "Custom data chunk"; $this->position += strlen($data); return $data; } } // 注册 myproto:// 协议 stream_wrapper_register('myproto', 'MyWrapper'); // 使用自定义协议 $data = file_get_contents('myproto://example-data'); ``` **关键方法**: - `stream_open()`:打开资源 - `stream_read()`/`stream_write()`:读写数据 - `stream_close()`:关闭资源 - `stream_seek()`:随机访问 --- #### 四、封装协议的应用场景 1. **统一资源访问** 用相同代码处理本地文件和网络资源: ```php function getContent($path) { return file_get_contents($path); // 自动识别协议 } ``` 2. **安全控制** 通过`allow_url_fopen`和`allow_url_include`配置限制危险协议访问。 3. **数据处理管道** 结合`stream_filter_append()`实现实时数据转换: ```php $stream = fopen('http://example.com/data.csv', 'r'); stream_filter_append($stream, 'convert.iconv.UTF-8/ASCII'); // 字符编码转换 ``` --- #### 五、安全注意事项 1. **禁用危险协议** 在`php.ini`中设置: ```ini allow_url_include = Off // 禁止直接包含远程代码 allow_url_fopen = On // 按需开启网络访问 ``` 2. **验证用户输入路径** 防止路径注入攻击: ```php $userPath = $_GET['path']; if (!preg_match('/^[a-z0-9:\/\.\-]+$/i', $userPath)) { die('Invalid path!'); } ``` > **最佳实践**:优先使用PHP内置协议(如`php://input`),避免直接操作`$_POST`处理二进制数据[^3]。 --- ### 相关问题 1. PHP封装协议与cURL在处理HTTP请求时有何性能差异? 2. 如何通过`php://filter`实现文件内容实时加密? 3. 自定义封装协议时如何实现目录遍历功能? 4. 为什么`allow_url_include`默认关闭?它可能引发哪些安全问题? [^1]: PHP封装协议允许统一访问不同资源类型,简化开发流程。 [^3]: PHP内置协议如`php://input`能安全处理原始数据流。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值