糖尿病遗传风险检测挑战赛

糖尿病遗传风险检测挑战赛


文章目录

  • 糖尿病遗传风险检测挑战赛
  • 比赛介绍
  • 一、导入库
  • 二、数据转换
  • 三、神经网络
  • 四、Predict


比赛介绍

期末考结束,没啥事情可以做,正好愁没有机会实践tensorflow和python的数据分析,借这个机会简单的尝试下。
(单纯觉得好玩,准确率差的不是一点两点)
网址:糖尿病遗传风险检测挑战赛


`

一、导入库

import tensorflow as tf
from tensorflow.keras.layers import Dense
from tensorflow.keras import Model
import numpy as np
import pandas as pd
import os

因为是jupyter 所以非常方便的可以看到输入输出,但是如果希望将变量单独一行就可直接输出,需要多导一步

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

二、数据转换

感谢DataWhale的指导,具体可看这个网址Datawhale《如何打一场数据挖掘赛事》入门版

#数据预处理
data1=pd.read_csv('比赛训练集.csv',encoding='gbk')
data2=pd.read_csv('比赛测试集.csv',encoding='gbk')
#label标记为-1
data2['患有糖尿病标识']=-1
#训练集和测试机合并
data=pd.concat([data1,data2],axis=0,ignore_index=True)
#将舒张压特征中的缺失值填充为-1
data['舒张压']=data['舒张压'].fillna(-1)

#----------------特征工程----------------
"""
将出生年份换算成年龄
"""
data['年龄']=2022-data['出生年份']  #换成年龄

"""
人体的成人体重指数正常值是在18.5-24之间
低于18.5是体重指数过轻
在24-27之间是体重超重
27以上考虑是肥胖
高于32了就是非常的肥胖。
"""
def BMI(a):
    if a<18.5:
        return 0
    elif 18.5<=a<=24:
        return 1
    elif 24<a<=27:
        return 2
    elif 27<a<=32:
        return 3
    else:
        return 4

data['BMI']=data['体重指数'].apply(BMI)

#糖尿病家族史
"""
无记录
叔叔或者姑姑有一方患有糖尿病/叔叔或姑姑有一方患有糖尿病
父母有一方患有糖尿病
"""
def FHOD(a):
    if a=='无记录':
        return 0
    elif a=='叔叔或者姑姑有一方患有糖尿病' or a=='叔叔或姑姑有一方患有糖尿病':
        return 1
    else:
        return 2

data['糖尿病家族史']=data['糖尿病家族史'].apply(FHOD)
"""
舒张压范围为60-90
"""
def DBP(a):
    if 0<=a<60:
        return 0
    elif 60<=a<=90:
        return 1
    elif a>90:
        return 2
    else:
        return a
data['DBP']=data['舒张压'].apply(DBP)

再将数据写入一个文件,准备进入神经网络。

data.to_csv('deeplearning.csv')

三、神经网络

读入数据

data = pd.read_csv('deeplearning.csv')
data = pd.DataFrame(data)

将数据拆分出来

train=data[data['患有糖尿病标识'] !=-1]
train
test=data[data['患有糖尿病标识'] ==-1]
test
train_label=train['患有糖尿病标识']
train_label
train=train.drop(['编号','患有糖尿病标识','出生年份'],axis=1)
train
test=test.drop(['编号','患有糖尿病标识','出生年份'],axis=1)
test

转换成神经网络可读的类型

x_train = train.iloc[:,1:]
x_train = np.array(x_train.values)
x_train
y_train = train_label
y_train

神经网络建立

model = tf.keras.models.Sequential([
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.Dense(2, activation='softmax')
])
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.1),
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
              metrics=['sparse_categorical_accuracy'])
model.fit(x_train, y_train, batch_size=32, epochs=5, validation_split=0.2, validation_freq=20)

model.summary()

model.save('my_weight.ckpt')

四、Predict

x_test = test.iloc[:,1:]
x_test = np.array(x_test.values)
x_test
newmodel = tf.keras.models.load_model('my_weight.ckpt')
result = []
for i in x_test:
    temp = np.array(i)
    temp = temp[tf.newaxis,...]
    result.append(newmodel.predict(temp))
#----------------结果输出----------------
result=pd.read_csv('提交示例.csv')
result['label']=write
result.to_csv('result-deeplearning.csv',index=False)

准确率可以说是非常的垃圾了,只有72%的正确率,但试一试大炮打蚊子还是很有意思的

你可能感兴趣的:(python,tensorflow,开发语言)