IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 中风预测:贝叶斯 -> 正文阅读

[人工智能]中风预测:贝叶斯

  1. 作业要求:
    中风预测:根据世界卫生组织(WHO)的数据,中风是全球第二大死亡原因,约占总死亡人数的11%。该数据集用于根据输入参数(例如性别,年龄,各种疾病和吸烟状况)预测患者是否可能中风。数据中的每一行都提供有关患者的相关信息。 数据下载网址为:https://mp.weixin.qq.com/s/QobTa9eN0snb9u2lXxX_iQ
    使用数据集中70%训练贝叶斯模型,30%预测。
  2. 数据理解(字段描述):
    在这里插入图片描述
  3. 实现思路
    首先对数据集进行预处理,去除数量极少的性别异常值数据条目,使用均值填补体重指数(bmi)缺失值等。随机选取数据集的70%进行贝叶斯模型的训练,剩下30%进行模型测试,将模型测试结果与原切分测试数据集数据进行比对计数,计算该模型预测准确度。
    贝叶斯公式:
    在这里插入图片描述
    在这里插入图片描述
    最大似然函数:(分别求取是否中风的似然函数值进行大小比较)
    在这里插入图片描述
  4. 运行结果截图
    贝叶斯模型测试集测试结果(三次运行结果截图如下):
    几次运行结果显示模型预测准确率:94%-96%
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  5. 完整代码
# 导入基本库
import numpy as np
import pandas as pd
import random
import warnings
warnings.filterwarnings('ignore')
# 不限制最大显示列数
pd.set_option('display.max_columns', None)
# 不限制最大显示行数
pd.set_option('display.max_rows', None)

# 数据预处理
def dataProcessing(df):
    # 查看数据整体信息
    df.info()
    # 对数据特征进行统计描述
    # print(df.describe())
    # 查看缺失值
    print(df.isnull().sum())

    # 删除重复值
    df = df.drop_duplicates()
    # print(df.shape)

    # 异常值处理
    # 查看性别异常值的数量
    print(df.gender.value_counts())
    # 性别为其他的数据只有一条,可考虑删除
    df = df.drop(df[df["gender"]=="Other"].index)
    print(df.gender.value_counts())

    # 填充缺失值bmi
    df["bmi"].fillna(df["bmi"].mean(),inplace=True)
    df.index = range(df.shape[0])
    df.info()
    return df

# 随机分配按比例切分数据集
def randSplit(df,rate):
    # 获取数据条目的索引
    extract=list(df.index)
    # 将数据的索引随机打乱顺序
    random.shuffle(extract)
    df.index=extract
    # 总数据条目数
    n=df.shape[0]
    # 按比例计算出切分的数据条目数
    m=int(n * rate)
    # 0-m为训练集
    train=df.loc[range(m),:]
    # m-n为测试集
    test=df.loc[range(m,n),:]
    # 将训练集和测试集数据重新编号
    df.index=range(df.shape[0])
    test.index=range(test.shape[0])
    # print(train)
    return train,test

# 获取概率模型,输入测试集
def trainPbmodel_X(feats):
    # 获取数据集的行数(条目数)和列数(维度)
    N,D=np.shape(feats)
    model={}
    # 对每个维度的属性进行概率统计
    for i in range(D):
        # 将数据转换为列表格式
        data=feats[:,i].tolist()
        # 创建一个无序不重复元素集,取出不重复的值
        keys=set(data)
        # 获取数据长度
        N=len(data)
        model[i]={}
        # 计算各个维度中各个类别对应的概率
        for key in keys:
            # 计算第i维的某个值对应的概率
            model[i][key]=float(data.count(key)/N)
    return model

# datas: list格式,每个元素表示1个特征序列
# labs: list格式,每个元素表示一个标签
def trainPbmodel(datas,labs):
    #定义模型
    model={}
    # 最后一列,获取分类的类别(0 or 1)
    keys=set(labs)
    for key in keys:
        # 获得P(Y)
        Pbmodel_Y=labs.count(key)/len(labs)

        # 收集类别为0,1(不中风,中风)的数据位号
        index=np.where(np.array(labs)==key)[0].tolist()
        # 根据位号分别得到类别为0,1的数据
        feats=np.array(datas)[index]

        # 获得 P(X|Y)
        Pbmodel_X=trainPbmodel_X(feats)

        # 字典,模型保存
        model[key]={}
        model[key]["PY"]=Pbmodel_Y
        model[key]["PX"]=Pbmodel_X
    return model

# 测试
# feat: list格式,一条输入特征
# model: 训练的概率模型
# keys: 考察标签的种类
def getPbfromModel(feat,model,keys):
    results={}
    # 用一个极小值代替0,使用似然函数计算时不至于溢出
    eps=0.00001
    for key in keys:
        # 从model中获取 P(Y)
        # 使用get函数,当查找不到当前key值时,返回eps
        PY=model.get(key,eps).get("PY")

        # 从model中分别获取 P(X|Y)
        model_X=model.get(key,eps).get("PX")
        # 定义数组存储每个维度特征的概率
        list_px=[]
        for i in range(len(feat)):
            # 获取每个维度特征的概率
            pb=model_X.get(i,eps).get(feat[i],eps)
            # 存入list_px数组
            list_px.append(pb)

        # 通过最大似然函数分别求得0,1类别的可能值
        result= np.log(PY) + np.sum(np.log(list_px))
        # 将获得结果对应0,1类别存储
        results[key]=result

    return results

if __name__== '__main__':
    # 存储0,1两个类别的似然值,键值对
    result=[]
    # 用于存储预测的0,1类别值
    judge=[]
    # 用于计数测试集中预测正确的条目
    count=0
    # 读取数据集
    df = pd.read_csv("C:\\Users\\31998\\Downloads\\中风预测数据集.csv")
    # 数据预处理
    df=dataProcessing(df)
    # 删除数据集中的第一列无用数据id
    charges = df.drop(["id"], axis=1)
    # 获取数据各属性标签
    labels = list(charges.columns.values)
    # 按照7:3的比例切分数据集
    train,test=randSplit(df,0.7)
    # 将测试集数据转换为列表格式
    dataSet = train.values.tolist()
    # 数据区域进行训练
    datas= [i[:-1] for i in dataSet]
    # stroke类别数据
    labs=[i[-1] for i in dataSet]
    # print(datas)
    # print(labs)
    # 使用数据和标签训练模型
    model = trainPbmodel(datas,labs)
    # print(model)

    # 获取测试集的中风,不中风类别值,与后面计算结果进行对比
    x=test[['stroke']]
    # 转为数组格式
    x=np.array(x)

    # 删除测试数据中stroke一列
    datadata=test.drop(["stroke"], axis=1)
    # 对测试数据集体进行标准化
    corrDf = datadata.apply(lambda x: pd.factorize(x)[0])
    # 转换为列表格式
    feat=corrDf.values.tolist()

    keys=set(labs)
    for i in range(len(feat)):
        # 逐一代入测试集计算stroke列中0,1两个类别的似然值,并存入数组
        result.append(getPbfromModel(feat[i],model,keys))
        # print(result[i])
        for key,value in result[i].items():
            # 比较0,1两个类别的似然值大小,值越大,可能性越高
            if(value==max(result[i].values())):
                # print(key)
                # 将得到的结果0或1存入数组
                judge.append(key)
                # 对比预测结果数组和测试集实际结果数组,若相等,则预测正确,计数+1
                if (key == x[i][0]):
                    count=count+1

    print(judge)
    print(count)
    # 打印预测正确率
    print(count/len(feat))


  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-02-14 21:08:29  更:2022-02-14 21:08:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 19:25:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码