本文主要是介绍基于机器学习的肝病患者智能诊断及系统实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. 数据集简介
印度肝病患者数据集(Indian Liver Patient Dataset)包含416名肝病患者记录和167名非肝病患者记录。数据集是从印度安德拉·普拉德什东北部收集的。标签列label用于区分患肝病和不患肝病。此数据集包含441名男性患者记录和142名女病人记录。以下为数据集各列所代表的具体含义:
原始数据获取地址:https://www.heywhale.com/mw/dataset/5d9ff8a6037db3002d417c8e
数据展示如下:
2.数据预处理
1.为了在建模时方便引入进行处理,我们对Gender进行数字编码。
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
# 数字编码
data["Gender"] = le.fit_transform(data["Gender"])
data.head()
编码后,女性(Female)被编码为0,男性(Male)被编码为1。
2.缺失值填补:在导入数据并对数据信息查看之后可以发现,A/G Ratio存在缺失值,我们需要对其进行填补。在这里我们采用均值填补的方法进行填充。
from sklearn.impute import SimpleImputer
imp = SimpleImputer(strategy="mean")
data["A/G Ratio"] = imp.fit_transform(data["A/G Ratio"].to_frame())
data["A/G Ratio"].isnull().sum()
3.标签列转换在进行处理时,LogisticRegression的标签列需要为或者为,但是本数据集的标签列label的值为,所以我们需要先进行转化。
data['label_cal'] = 2 - data['label']
data = data.drop(labels='label', axis=1)
3.模型构建
模型定义如下:
- Dense是一个全连接层,表示在两个网络层中任意一堆神经元都存在连接关系。输入层有16个神经元,其输入通过ReLU(非线性)激活函数传递。
- 最后的Dense层包含一个sigmod激活函数,该函数为每一个可能的输出分配概率。
classifier = Sequential() # Initialising the ANN
classifier.add(Dense(units = 16, kernel_initializer = 'uniform', activation = 'relu', input_dim = 11))
classifier.add(Dense(units = 8, kernel_initializer = 'uniform', activation = 'relu'))
classifier.add(Dense(units = 6, kernel_initializer = 'uniform', activation = 'relu'))
classifier.add(Dense(units = 1, kernel_initializer = 'uniform', activation = 'sigmoid'))
# compile ANN
classifier.compile(optimizer = 'rmsprop', loss = 'binary_crossentropy', metrics = ['accuracy'])
4.应用实现
基于flask实现一个预测界面:
完整代码下载链接:
https://download.csdn.net/download/weixin_40651515/87546355
这篇关于基于机器学习的肝病患者智能诊断及系统实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!