Zing 论坛

正文

从零构建人工神经网络:乳腺癌预测模型实践

一个从零开始构建的人工神经网络项目,用于预测乳腺癌患病风险,展示了深度学习在医疗诊断领域的应用潜力。

人工神经网络乳腺癌预测深度学习医疗AI机器学习二分类反向传播神经网络实现Python
发布时间 2026/06/09 18:03最近活动 2026/06/09 18:31预计阅读 19 分钟
从零构建人工神经网络:乳腺癌预测模型实践
1

章节 01

导读 / 主楼:从零构建人工神经网络:乳腺癌预测模型实践

一个从零开始构建的人工神经网络项目,用于预测乳腺癌患病风险,展示了深度学习在医疗诊断领域的应用潜力。

2

章节 02

原作者与来源

从零构建人工神经网络:乳腺癌预测模型实践\n\n## 原作者与来源\n\n- 原作者/维护者: ZestyClose25\n- 来源平台: GitHub\n- 原始标题: BreastCancerPrediction-UsingANN\n- 原始链接: https://github.com/ZestyClose25/BreastCancerPrediction-UsingANN\n- 发布时间: 2026-06-09\n\n## 项目背景与意义\n\n乳腺癌是全球女性最常见的恶性肿瘤之一,早期诊断对于提高治愈率至关重要。传统的诊断方法依赖于医生的经验和病理学检查,而人工智能技术的引入为乳腺癌筛查提供了新的可能性。\n\n本项目展示了如何从零开始构建一个完整的人工神经网络(ANN),不依赖现成的深度学习框架(如TensorFlow或PyTorch)的高级API,而是深入理解神经网络的底层原理。这种"从零构建"的方法对于学习深度学习原理和算法实现具有重要价值。\n\n## 人工神经网络基础\n\n### 什么是人工神经网络?\n\n人工神经网络是一种受生物神经系统启发的计算模型,由大量相互连接的人工神经元组成。每个神经元接收输入信号,经过加权求和和激活函数处理后输出信号。\n\n### 神经网络的核心组件\n\n#### 1. 神经元(Neuron)\n\n神经元是神经网络的基本计算单元,其数学表达为:\n\n\nz = Σ(w_i × x_i) + b\na = activation(z)\n\n\n其中:\n- x_i:输入特征\n- w_i:权重参数\n- b:偏置项\n- activation:激活函数\n- a:输出激活值\n\n#### 2. 层(Layer)\n\n神经网络由多个层组成:\n\n- 输入层:接收原始数据特征\n- 隐藏层:进行特征变换和抽象表示\n- 输出层:产生最终预测结果\n\n#### 3. 激活函数\n\n激活函数引入非线性,使神经网络能够学习复杂的模式:\n\n- Sigmoid:输出范围(0,1),适合二分类问题\n- ReLU:f(x) = max(0,x),计算高效,缓解梯度消失\n- Tanh:输出范围(-1,1),均值为0\n\n#### 4. 损失函数\n\n衡量预测值与真实值之间的差距:\n\n- 均方误差(MSE):用于回归问题\n- 交叉熵损失:用于分类问题\n\n#### 5. 反向传播算法\n\n反向传播是训练神经网络的核心算法,通过链式法则计算损失函数对各参数的梯度,然后使用梯度下降更新参数:\n\n\nW_new = W_old - learning_rate × gradient\n\n\n## 乳腺癌预测问题分析\n\n### 数据集特征\n\n乳腺癌预测通常使用威斯康星乳腺癌数据集(Wisconsin Breast Cancer Dataset),包含以下特征:\n\n#### 细胞核形态学特征\n\n对每个细胞核计算以下10个特征的均值、标准差和最差值(共30个特征):\n\n1. 半径(Radius):从中心到边界的平均距离\n2. 纹理(Texture):灰度值的标准差\n3. 周长(Perimeter):细胞核边界的周长\n4. 面积(Area):细胞核的面积\n5. 光滑度(Smoothness):半径长度的局部变化\n6. 紧凑度(Compactness):(周长² / 面积 - 1)\n7. 凹度(Concavity):轮廓凹部的严重程度\n8. 凹点(Concave Points):轮廓凹部的数量\n9. 对称性(Symmetry):细胞核的对称性\n10. 分形维数(Fractal Dimension):边界复杂度的度量\n\n### 问题类型\n\n这是一个二分类问题:\n- 类别M(Malignant):恶性(癌症)\n- 类别B(Benign):良性(非癌症)\n\n### 评估指标\n\n医疗诊断模型需要特别关注:\n\n- 准确率(Accuracy):总体预测正确率\n- 精确率(Precision):预测为癌症中真正癌症的比例\n- 召回率(Recall):真正癌症患者中被正确识别的比例\n- F1分数:精确率和召回率的调和平均\n- AUC-ROC:ROC曲线下面积\n- 混淆矩阵:详细展示预测结果分布\n\n## 从零实现神经网络\n\n### 实现步骤概览\n\n#### 步骤1:数据预处理\n\npython\n# 数据加载和探索\nimport pandas as pd\ndata = pd.read_csv('breast_cancer_data.csv')\n\n# 处理缺失值\ndata = data.dropna()\n\n# 特征缩放(标准化)\nfrom sklearn.preprocessing import StandardScaler\nscaler = StandardScaler()\nX_scaled = scaler.fit_transform(X)\n\n# 标签编码\n# M -> 1 (恶性), B -> 0 (良性)\n\n\n#### 步骤2:网络架构设计\n\n对于乳腺癌预测任务,一个典型的网络架构:\n\n\n输入层:30个神经元(对应30个特征)\n ↓\n隐藏层1:16个神经元,ReLU激活\n ↓\n隐藏层2:8个神经元,ReLU激活\n ↓\n输出层:1个神经元,Sigmoid激活\n\n\n#### 步骤3:核心类实现\n\npython\nclass NeuralNetwork:\n def __init__(self, layer_sizes):\n # 初始化权重和偏置\n self.weights = [...]\n self.biases = [...]\n \n def forward_propagation(self, X):\n # 前向传播计算\n ...\n \n def backward_propagation(self, X, y, output):\n # 反向传播计算梯度\n ...\n \n def update_parameters(self, learning_rate):\n # 使用梯度下降更新参数\n ...\n \n def train(self, X, y, epochs, learning_rate):\n # 训练循环\n ...\n \n def predict(self, X):\n # 预测新样本\n ...\n\n\n#### 步骤4:激活函数实现\n\npython\ndef sigmoid(z):\n return 1 / (1 + np.exp(-z))\n\ndef sigmoid_derivative(a):\n return a * (1 - a)\n\ndef relu(z):\n return np.maximum(0, z)\n\ndef relu_derivative(z):\n return (z > 0).astype(float)\n\n\n#### 步骤5:损失函数实现\n\npython\ndef binary_cross_entropy(y_true, y_pred):\n # 添加epsilon防止log(0)\n epsilon = 1e-15\n y_pred = np.clip(y_pred, epsilon, 1 - epsilon)\n return -np.mean(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred))\n\n\n#### 步骤6:训练与评估\n\npython\n# 划分训练集和测试集\nfrom sklearn.model_selection import train_test_split\nX_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2)\n\n# 创建并训练模型\nnn = NeuralNetwork([30, 16, 8, 1])\nnn.train(X_train, y_train, epochs=1000, learning_rate=0.01)\n\n# 评估模型\npredictions = nn.predict(X_test)\naccuracy = np.mean(predictions == y_test)\n\n\n## 从零构建 vs 使用框架\n\n### 从零构建的优势\n\n1. 深入理解原理:亲手实现每个组件,真正理解神经网络的工作原理\n\n2. 调试能力提升:当使用框架遇到问题时,能够定位到具体环节\n\n3. 定制化灵活:可以根据需求自由修改任何部分\n\n4. 面试准备:许多技术面试会要求手写神经网络实现\n\n### 使用框架的优势\n\n1. 开发效率:成熟的框架提供优化过的实现\n\n2. 功能丰富:自动求导、GPU加速、分布式训练等\n\n3. 社区支持:丰富的文档和社区资源\n\n4. 生产就绪:经过大量测试和优化,适合生产环境\n\n### 学习建议\n\n对于初学者,建议:\n\n1. 先从零实现:至少完成一个完整的项目,理解底层原理\n2. 再使用框架:掌握PyTorch或TensorFlow等主流框架\n3. 对比学习:用框架复现自己的实现,对比差异\n4. 阅读源码:深入阅读框架的底层实现\n\n## 项目技术亮点\n\n### 亮点1:完整的端到端实现\n\n项目涵盖了从数据预处理到模型评估的完整流程,是一个完整的机器学习项目实践。\n\n### 亮点2:清晰的代码结构\n\n模块化设计使得代码易于理解和扩展:\n\n- network.py:神经网络核心实现\n- utils.py:工具函数\n- train.py:训练脚本\n- evaluate.py:评估脚本\n\n### 亮点3:详细的注释和文档\n\n代码中包含丰富的注释,解释每个步骤的原理和目的,适合作为学习材料。\n\n### 亮点4:可视化支持\n\n包含训练过程的损失曲线、准确率曲线等可视化,帮助理解模型学习过程。\n\n## 实际应用与改进方向\n\n### 当前局限\n\n1. 数据规模:使用公开数据集,规模相对较小\n\n2. 特征工程:主要使用原始特征,未进行深入的特征工程\n\n3. 模型复杂度:相对简单的全连接网络,未使用更先进的架构\n\n4. 超参数调优:超参数选择可能不是最优\n\n### 改进方向\n\n1. 数据增强:收集更多数据或使用数据增强技术\n\n2. 特征工程:\n - 提取新的组合特征\n - 使用领域知识筛选重要特征\n - 尝试不同的特征缩放方法\n\n3. 模型改进:\n - 尝试不同的网络架构(更多层、不同宽度)\n - 添加正则化(Dropout、L2正则化)\n - 使用更先进的优化器(Adam、RMSprop)\n\n4. 集成学习:\n - 训练多个模型并集成预测\n - 使用交叉验证提高稳定性\n\n5. 可解释性:\n - 分析特征重要性\n - 可视化隐藏层表示\n - 使用SHAP等解释工具\n\n## 对医疗AI的启示\n\n### 启示1:AI辅助而非替代\n\n神经网络模型应该作为医生的辅助工具,而非替代医生的判断。最终的诊断决策应由专业医生做出。\n\n### 启示2:可解释性的重要性\n\n医疗AI需要具备一定的可解释性,让医生理解模型为什么做出某个预测。\n\n### 启示3:数据质量至关重要\n\n医疗数据的准确性、完整性和代表性直接影响模型的可靠性和泛化能力。\n\n### 启示4:伦理和隐私考量\n\n医疗AI的开发和使用需要考虑患者隐私保护、算法公平性等伦理问题。\n\n## 结语\n\n从零构建人工神经网络是一个极具价值的学习实践。它不仅帮助理解深度学习的核心原理,也为后续使用高级框架打下坚实基础。\n\n乳腺癌预测项目展示了神经网络在医疗诊断领域的应用潜力。虽然当前实现相对基础,但它为进一步的改进和扩展提供了良好的起点。\n\n对于希望深入学习深度学习的读者,建议:\n\n1. 复现本项目,确保完全理解每个组件\n2. 尝试改进网络架构和超参数\n3. 探索其他医疗数据集和应用场景\n4. 逐步过渡到使用PyTorch或TensorFlow等生产级框架\n\n深度学习是一个快速发展的领域,掌握底层原理是跟上技术发展的关键。

3

章节 03

补充观点 1

原作者与来源

  • 原作者/维护者:ZestyClose25
  • 来源平台:github
  • 原始标题:BreastCancerPrediction-UsingANN
  • 原始链接:https://github.com/ZestyClose25/BreastCancerPrediction-UsingANN
  • 来源发布时间/更新时间:2026-06-09T10:03:22Z 从零构建人工神经网络:乳腺癌预测模型实践\n\n原作者与来源\n\n- 原作者/维护者: ZestyClose25\n- 来源平台: GitHub\n- 原始标题: BreastCancerPrediction-UsingANN\n- 原始链接: https://github.com/ZestyClose25/BreastCancerPrediction-UsingANN\n- 发布时间: 2026-06-09\n\n项目背景与意义\n\n乳腺癌是全球女性最常见的恶性肿瘤之一,早期诊断对于提高治愈率至关重要。传统的诊断方法依赖于医生的经验和病理学检查,而人工智能技术的引入为乳腺癌筛查提供了新的可能性。\n\n本项目展示了如何从零开始构建一个完整的人工神经网络(ANN),不依赖现成的深度学习框架(如TensorFlow或PyTorch)的高级API,而是深入理解神经网络的底层原理。这种"从零构建"的方法对于学习深度学习原理和算法实现具有重要价值。\n\n人工神经网络基础\n\n什么是人工神经网络?\n\n人工神经网络是一种受生物神经系统启发的计算模型,由大量相互连接的人工神经元组成。每个神经元接收输入信号,经过加权求和和激活函数处理后输出信号。\n\n神经网络的核心组件\n\n1. 神经元(Neuron)\n\n神经元是神经网络的基本计算单元,其数学表达为:\n\n\nz = Σ(w_i × x_i) + b\na = activation(z)\n\n\n其中:\n- x_i:输入特征\n- w_i:权重参数\n- b:偏置项\n- activation:激活函数\n- a:输出激活值\n\n2. 层(Layer)\n\n神经网络由多个层组成:\n\n- 输入层:接收原始数据特征\n- 隐藏层:进行特征变换和抽象表示\n- 输出层:产生最终预测结果\n\n3. 激活函数\n\n激活函数引入非线性,使神经网络能够学习复杂的模式:\n\n- Sigmoid:输出范围(0,1),适合二分类问题\n- ReLU:f(x) = max(0,x),计算高效,缓解梯度消失\n- Tanh:输出范围(-1,1),均值为0\n\n4. 损失函数\n\n衡量预测值与真实值之间的差距:\n\n- 均方误差(MSE):用于回归问题\n- 交叉熵损失:用于分类问题\n\n5. 反向传播算法\n\n反向传播是训练神经网络的核心算法,通过链式法则计算损失函数对各参数的梯度,然后使用梯度下降更新参数:\n\n\nW_new = W_old - learning_rate × gradient\n\n\n乳腺癌预测问题分析\n\n数据集特征\n\n乳腺癌预测通常使用威斯康星乳腺癌数据集(Wisconsin Breast Cancer Dataset),包含以下特征:\n\n细胞核形态学特征\n\n对每个细胞核计算以下10个特征的均值、标准差和最差值(共30个特征):\n\n1. 半径(Radius):从中心到边界的平均距离\n2. 纹理(Texture):灰度值的标准差\n3. 周长(Perimeter):细胞核边界的周长\n4. 面积(Area):细胞核的面积\n5. 光滑度(Smoothness):半径长度的局部变化\n6. 紧凑度(Compactness):(周长² / 面积 - 1)\n7. 凹度(Concavity):轮廓凹部的严重程度\n8. 凹点(Concave Points):轮廓凹部的数量\n9. 对称性(Symmetry):细胞核的对称性\n10. 分形维数(Fractal Dimension):边界复杂度的度量\n\n问题类型\n\n这是一个二分类问题:\n- 类别M(Malignant):恶性(癌症)\n- 类别B(Benign):良性(非癌症)\n\n评估指标\n\n医疗诊断模型需要特别关注:\n\n- 准确率(Accuracy):总体预测正确率\n- 精确率(Precision):预测为癌症中真正癌症的比例\n- 召回率(Recall):真正癌症患者中被正确识别的比例\n- F1分数:精确率和召回率的调和平均\n- AUC-ROC:ROC曲线下面积\n- 混淆矩阵:详细展示预测结果分布\n\n从零实现神经网络\n\n实现步骤概览\n\n步骤1:数据预处理\n\npython\n数据加载和探索\nimport pandas as pd\ndata = pd.read_csv('breast_cancer_data.csv')\n\n处理缺失值\ndata = data.dropna()\n\n特征缩放(标准化)\nfrom sklearn.preprocessing import StandardScaler\nscaler = StandardScaler()\nX_scaled = scaler.fit_transform(X)\n\n标签编码\nM -> 1 (恶性), B -> 0 (良性)\n\n\n步骤2:网络架构设计\n\n对于乳腺癌预测任务,一个典型的网络架构:\n\n\n输入层:30个神经元(对应30个特征)\n ↓\n隐藏层1:16个神经元,ReLU激活\n ↓\n隐藏层2:8个神经元,ReLU激活\n ↓\n输出层:1个神经元,Sigmoid激活\n\n\n步骤3:核心类实现\n\npython\nclass NeuralNetwork:\n def __init__(self, layer_sizes):\n 初始化权重和偏置\n self.weights = [...]\n self.biases = [...]\n \n def forward_propagation(self, X):\n 前向传播计算\n ...\n \n def backward_propagation(self, X, y, output):\n 反向传播计算梯度\n ...\n \n def update_parameters(self, learning_rate):\n 使用梯度下降更新参数\n ...\n \n def train(self, X, y, epochs, learning_rate):\n 训练循环\n ...\n \n def predict(self, X):\n 预测新样本\n ...\n\n\n步骤4:激活函数实现\n\npython\ndef sigmoid(z):\n return 1 / (1 + np.exp(-z))\n\ndef sigmoid_derivative(a):\n return a * (1 - a)\n\ndef relu(z):\n return np.maximum(0, z)\n\ndef relu_derivative(z):\n return (z > 0).astype(float)\n\n\n步骤5:损失函数实现\n\npython\ndef binary_cross_entropy(y_true, y_pred):\n 添加epsilon防止log(0)\n epsilon = 1e-15\n y_pred = np.clip(y_pred, epsilon, 1 - epsilon)\n return -np.mean(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred))\n\n\n步骤6:训练与评估\n\npython\n划分训练集和测试集\nfrom sklearn.model_selection import train_test_split\nX_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2)\n\n创建并训练模型\nnn = NeuralNetwork([30, 16, 8, 1])\nnn.train(X_train, y_train, epochs=1000, learning_rate=0.01)\n\n评估模型\npredictions = nn.predict(X_test)\naccuracy = np.mean(predictions == y_test)\n\n\n从零构建 vs 使用框架\n\n从零构建的优势\n\n1. 深入理解原理:亲手实现每个组件,真正理解神经网络的工作原理\n\n2. 调试能力提升:当使用框架遇到问题时,能够定位到具体环节\n\n3. 定制化灵活:可以根据需求自由修改任何部分\n\n4. 面试准备:许多技术面试会要求手写神经网络实现\n\n使用框架的优势\n\n1. 开发效率:成熟的框架提供优化过的实现\n\n2. 功能丰富:自动求导、GPU加速、分布式训练等\n\n3. 社区支持:丰富的文档和社区资源\n\n4. 生产就绪:经过大量测试和优化,适合生产环境\n\n学习建议\n\n对于初学者,建议:\n\n1. 先从零实现:至少完成一个完整的项目,理解底层原理\n2. 再使用框架:掌握PyTorch或TensorFlow等主流框架\n3. 对比学习:用框架复现自己的实现,对比差异\n4. 阅读源码:深入阅读框架的底层实现\n\n项目技术亮点\n\n亮点1:完整的端到端实现\n\n项目涵盖了从数据预处理到模型评估的完整流程,是一个完整的机器学习项目实践。\n\n亮点2:清晰的代码结构\n\n模块化设计使得代码易于理解和扩展:\n\n- network.py:神经网络核心实现\n- utils.py:工具函数\n- train.py:训练脚本\n- evaluate.py:评估脚本\n\n亮点3:详细的注释和文档\n\n代码中包含丰富的注释,解释每个步骤的原理和目的,适合作为学习材料。\n\n亮点4:可视化支持\n\n包含训练过程的损失曲线、准确率曲线等可视化,帮助理解模型学习过程。\n\n实际应用与改进方向\n\n当前局限\n\n1. 数据规模:使用公开数据集,规模相对较小\n\n2. 特征工程:主要使用原始特征,未进行深入的特征工程\n\n3. 模型复杂度:相对简单的全连接网络,未使用更先进的架构\n\n4. 超参数调优:超参数选择可能不是最优\n\n改进方向\n\n1. 数据增强:收集更多数据或使用数据增强技术\n\n2. 特征工程:\n - 提取新的组合特征\n - 使用领域知识筛选重要特征\n - 尝试不同的特征缩放方法\n\n3. 模型改进:\n - 尝试不同的网络架构(更多层、不同宽度)\n - 添加正则化(Dropout、L2正则化)\n - 使用更先进的优化器(Adam、RMSprop)\n\n4. 集成学习:\n - 训练多个模型并集成预测\n - 使用交叉验证提高稳定性\n\n5. 可解释性:\n - 分析特征重要性\n - 可视化隐藏层表示\n - 使用SHAP等解释工具\n\n对医疗AI的启示\n\n启示1:AI辅助而非替代\n\n神经网络模型应该作为医生的辅助工具,而非替代医生的判断。最终的诊断决策应由专业医生做出。\n\n启示2:可解释性的重要性\n\n医疗AI需要具备一定的可解释性,让医生理解模型为什么做出某个预测。\n\n启示3:数据质量至关重要\n\n医疗数据的准确性、完整性和代表性直接影响模型的可靠性和泛化能力。\n\n启示4:伦理和隐私考量\n\n医疗AI的开发和使用需要考虑患者隐私保护、算法公平性等伦理问题。\n\n结语\n\n从零构建人工神经网络是一个极具价值的学习实践。它不仅帮助理解深度学习的核心原理,也为后续使用高级框架打下坚实基础。\n\n乳腺癌预测项目展示了神经网络在医疗诊断领域的应用潜力。虽然当前实现相对基础,但它为进一步的改进和扩展提供了良好的起点。\n\n对于希望深入学习深度学习的读者,建议:\n\n1. 复现本项目,确保完全理解每个组件\n2. 尝试改进网络架构和超参数\n3. 探索其他医疗数据集和应用场景\n4. 逐步过渡到使用PyTorch或TensorFlow等生产级框架\n\n深度学习是一个快速发展的领域,掌握底层原理是跟上技术发展的关键。