""" Day 5 - 隐马尔可夫模型 练习 任务:实现 隐马尔可夫模型 的核心算法 """ import numpy as np import matplotlib.pyplot as plt class HiddenMarkovModel: """隐马尔可夫模型 类""" 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 5 - 隐马尔可夫模型 可视化") plt.colorbar(scatter) plt.grid(True, alpha=0.3) plt.savefig("./plots/day5_concept.png", dpi=150) print(f"✅ 可视化已保存:plots/day5_concept.png") if __name__ == "__main__": plot_concept()