| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- """
- Day 1 - 感知机 练习
- 任务:实现 感知机 的核心算法
- """
- import numpy as np
- import matplotlib.pyplot as plt
- class 感知机:
- """感知机 类"""
-
- def __init__(self, learning_rate: float = 0.01):
- self.learning_rate = learning_rate
- self.weights = None
- self.bias = None
-
- def forward(self, X: np.ndarray) -> np.ndarray:
- """前向传播
-
- Args:
- X: 输入数据,shape: [n_samples, n_features]
-
- Returns:
- 预测结果,shape: [n_samples]
- """
- # TODO: 实现 f(x) = sign(w · x + b)
- raise NotImplementedError
-
- def compute_loss(self, X: np.ndarray, y: np.ndarray) -> float:
- """计算损失"""
- # TODO: 实现损失函数
- raise NotImplementedError
-
- def update(self, X_i: np.ndarray, y_i: int):
- """更新参数
-
- Args:
- X_i: 单个样本,shape: [n_features]
- y_i: 标签,值域 (-1, 1)
- """
- # TODO: 实现梯度下降更新
- raise NotImplementedError
-
- def fit(self, X: np.ndarray, y: np.ndarray, max_iter: int = 100):
- """训练模型"""
- # TODO: 实现训练循环
- raise NotImplementedError
- def plot_concept():
- """可视化概念"""
- # 生成二维数据
- np.random.seed(42)
- X = np.random.randn(100, 2)
- y = np.sign(X[:, 0] + X[:, 1] - 0.5) * 1
-
- # 绘制散点图
- plt.figure(figsize=(8, 6))
- scatter = plt.scatter(X[:, 0], X[:, 1], c=y, cmap="bwr", s=100, edgecolors="black")
- plt.xlabel("x1")
- plt.ylabel("x2")
- plt.title("Day 1 - 感知机 可视化")
- plt.colorbar(scatter)
- plt.grid(True, alpha=0.3)
- plt.savefig("./plots/day1_concept.png", dpi=150)
- print(f"✅ 可视化已保存:plots/day1_concept.png")
- if __name__ == "__main__":
- plot_concept()
|