利用BP神经网络+k折交叉验证分析中医药“瘀血阻络证”数据

该博客通过BP神经网络和k折交叉验证方法,对664条中医药瘀血阻络证数据进行分析。实验包括将所有数据作为训练集评估分类指标,以及7:3划分训练验证集和5折交叉验证。内容涉及数据加载、参数设置、神经网络框架构建等步骤,并展示了每次交叉验证的结果。
摘要由CSDN通过智能技术生成

实验要求

数据中总共有664条数据,每条数据分别是多个症状对应一个症候,本质上是一个简单的二分类问题,即根据症状分类是否属于瘀血阻络证。
具体要求:
(1)全部数据作为训练集:得出相应的分类指标准确率accuracy,精确率precision,召回率recall,F1-score,并画出最终的ROC曲线,得出AUC值。
(2)把数据集分为训练集、验证集和测试集,再进行分类,并得出准确率等。
(3)运用5-fold Cross-validation方法进行验证,与前两种方法对比。

数据展示

症状(部分):
在这里插入图片描述
症候(标黄):
在这里插入图片描述

代码

导包
from sklearn import preprocessing
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import train_test_split, cross_val_score, cross_val_predict, KFold
from sklearn.metrics import precision_score, recall_score, f1_score, roc_auc_score, roc_curve
import pandas as pd
import random
import numpy as np
import math
import time
import matplotlib.pyplot as plt
import warnings
from tqdm import tqdm
import pickle  # 保存模型
定义函数
def standardization(np_array):
    """ 离差标准化,(Xi-min(X))/(max(X)-min(X)) """
    min_max_scaler = preprocessing.MinMaxScaler()
    ret = min_max_scaler.fit_transform(np_array)
    return ret


def make_matrix(m, n, fill=0.0):
    a = []
    for i in range(m):
        a.append([fill] * n)
    return a


def rand(min, max):
    """生成区间[min,max]内的随机数"""
    return (max - min) * random.random() + min


def sigmoid(x):
    """激活函数"""
    return 1.0 / (1.0 + math.exp(-x))


def derived_sigmoid(x):
    """激活函数的导数"""
    return x * (1 - x)
定义BP神经网络框架
class BP:
    """
    反向传播类
    """

    def __init__(self, input_n, hidden_n, output_n):
        self.input_n = input_n  # 初始化结点数
        self.hidden_n = hidden_n
        self.output_n = output_n
        self.input_values = [1.0] * self.input_n  # 输入层神经元输出
        self.hidden_values = [1.0] * self.hidden_n  # 中间层神经元输出
        self.output_values = [1.0] * self.output_n  # 隐藏层神经元输出
        self.input_weights = make_matrix(self.input_n, self.hidden_n)  # 权重
        self.output_weights = make_matrix(self.hidden_n, self.output_n)
        self.input_correction = []  # 权重修正
        self.output_correction = []
        self.input_bias = []  # 偏置
        self.output_bias = []

        # 权重矩阵赋初值
        for i in range(self.input_n):
            for j in range(self.hidden_n):
                self.
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Re:从零开始的代码生活

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值