|
| 1 | +<!-- |
| 2 | + * @Author: jiangyangcreate [email protected] |
| 3 | + * @Date: 2025-03-27 17:13:15 |
| 4 | + * @LastEditors: jiangyangcreate [email protected] |
| 5 | + * @LastEditTime: 2025-04-22 08:43:38 |
| 6 | + * @FilePath: \jiangyangcreate.github.io\docs\docs\机器学习\index.md |
| 7 | + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE |
| 8 | +--> |
1 | 9 | --- |
2 | 10 | sidebar_position: 7 |
3 | 11 | title: 🚧机器学习 |
4 | 12 | --- |
5 | 13 |
|
6 | 14 | 机器学习是当前发展最热门的方向之一,可以称之为计算机科学的明珠。 |
7 | 15 |
|
| 16 | +机器学习的原理其实很简单,创建一个复杂函数,猜测其中的权重的值。然后根据结果来更新这个值。 |
| 17 | + |
| 18 | +具体的内容我们可以尝试编写一个求某个数的平方根的例子: |
| 19 | + |
| 20 | +```python showLineNumbers |
| 21 | + |
| 22 | +import numpy as np |
| 23 | +import matplotlib.pyplot as plt |
| 24 | + |
| 25 | +# 我们要求解的数 |
| 26 | +target_number = 17.0 |
| 27 | + |
| 28 | +# 初始化权重(我们的猜测值) |
| 29 | +weight = 1 |
| 30 | +print(f"初始随机猜测值: {weight}") |
| 31 | + |
| 32 | +# 超参数 |
| 33 | +learning_rate = 0.01 # 学习率 |
| 34 | +epochs = 1000 # 训练轮数 |
| 35 | + |
| 36 | +# 存储训练过程 |
| 37 | +weights_history = [] |
| 38 | +loss_history = [] |
| 39 | + |
| 40 | +# 训练过程 |
| 41 | +for epoch in range(epochs): |
| 42 | + # 前向传播: 计算预测值 (weight * weight 应该等于 target_number) |
| 43 | + prediction = weight * weight |
| 44 | + |
| 45 | + # 计算损失: 均方误差 (MSE) |
| 46 | + loss = (prediction - target_number) ** 2 |
| 47 | + |
| 48 | + # 反向传播: 计算梯度 |
| 49 | + gradient = 2 * (prediction - target_number) * 2 * weight |
| 50 | + |
| 51 | + # 更新权重 (梯度下降) |
| 52 | + weight = weight - learning_rate * gradient |
| 53 | + |
| 54 | + # 记录历史 |
| 55 | + weights_history.append(weight) |
| 56 | + loss_history.append(loss) |
| 57 | + |
| 58 | + # 每隔100轮打印一次结果 |
| 59 | + if epoch % 100 == 0 or epoch == epochs - 1: |
| 60 | + print(f"轮次 {epoch}, 当前估计值: {weight}, 预测值的平方: {prediction}, 损失: {loss}") |
| 61 | + |
| 62 | +# 最终结果 |
| 63 | +print(f"\n训练后的平方根估计值: {weight}") |
| 64 | +print(f"误差: {target_number - prediction}") |
| 65 | +``` |
| 66 | + |
| 67 | +上述代码展示了机器学习的核心概念: |
| 68 | +1. **学习率**:控制每次参数更新的步长 |
| 69 | +2. **前向传播**:使用当前权重进行预测 |
| 70 | +3. **损失计算**:衡量预测值与目标值之间的差距 |
| 71 | +4. **反向传播**:计算损失对权重的梯度 |
| 72 | +5. **梯度下降**:沿梯度方向更新权重,最小化损失函数 |
| 73 | + |
| 74 | +这个简单的例子虽然不是典型的神经网络,但展示了机器学习的基本原理:通过不断调整参数,使模型输出逐渐接近目标值。 |
| 75 | + |
8 | 76 | <DocCardList /> |
0 commit comments