新人 天池大数据初涉水

3 篇文章 0 订阅
2 篇文章 0 订阅

天池精准医疗大赛——人工智能辅助糖尿病遗传风险预测

一直想做一个天池大数据方面的比赛,以前一直没时间,正逢糖尿病风险预测比赛,阿里举办的,课题比较喜欢,哈哈
这里写图片描述
这里写图片描述

进入天池大数据竞赛中心,就可以看到相关信息以及数据,下载下来即可对其作分析。
这里写图片描述

打开其中的train列表,我们可以发现,每一个病例都有41个特征,外加“”血糖“”预测,如下图所示:
这里写图片描述
这里写图片描述

特征工程:
接下来对表格中的数据进行分析下,看看是不是有什么缺省值,数据不足的地方

数据总览:

import numpy as np
import pandas as pd
# 数据路径
data_path = 'E:\The_most_powerful_laboratory\Tianchi_bigData\AI_diabetes_prediction\The_program_and_Result\Tianchi_data\\'
# 选用pandas导入训练集,测试集
df_train = pd.read_csv(data_path+'d_train_20180102.csv') 
df_test_A = pd.read_csv(data_path+'d_test_A_20180102.csv')  
df_test_B = pd.read_csv(data_path+'d_test_B_20180128.csv') 
df_test_A_answer = pd.read_csv(data_path+'d_answer_a_20180128.csv',header=-1)

id 性别 年龄 体检日期 天门冬氨酸氨基转换酶 丙氨酸氨基转换酶 *碱性磷酸酶 *r-谷氨酰基转换酶 \
0 1 男 41 12/10/2017 24.96 23.10 99.59 20.23
1 2 男 41 19/10/2017 24.57 36.25 67.21 79.00
2 3 男 46 26/10/2017 20.82 15.23 63.69 38.17
3 4 女 22 25/10/2017 14.99 10.59 74.08 20.22
4 5 女 48 26/10/2017 20.07 14.78 75.79 22.72
5 6 女 74 18/10/2017 23.72 22.59 81.23 23.35
6 7 男 31 21/09/2017 24.97 25.53 109.03 65.42
7 8 男 55 21/09/2017 37.32 40.03 88.49 25.15
8 9 男 39 16/10/2017 21.70 39.17 102.91 67.09
9 10 女 35 10/10/2017 18.89 15.79 78.21 25.75
10 11 男 47 13/10/2017 27.33 35.76 80.26 84.97
11 12 男 50 10/10/2017 22.89 28.46 77.54 48.16
12 13 女 48 19/10/2017 30.11 34.70 92.67 16.39
13 14 女 36 11/10/2017 16.82 11.80 67.79 13.16
14 15 女 37 27/09/2017 24.58 24.64 96.43 27.79
15 16 女 43 28/09/2017 20.07 14.81 72.11 33.98
16 17 男 77 24/10/2017 18.49 17.29 104.91 41.33
17 18 男 42 16/10/2017 24.71 30.26 95.70 37.97
18 19 男 39 30/10/2017 31.44 43.97 92.58 35.84
19 20 男 38 28/09/2017 23.58 31.19 102.16 44.01
20 21 男 30 29/09/2017 33.25 67.19 82.22 59.91
21 22 男 51 26/10/2017 26.53 20.44 67.03 25.84
22 23 女 38 19/10/2017 24.13 34.02 77.32 18.78
23 24 女 33 30/09/2017 15.77 11.43 95.86 20.45
24 25 女 28 20/10/2017 20.24 12.55 61.90 7.99
25 26 女 34 30/10/2017 20.89 16.16 102.40 14.69
26 27 男 34 30/10/2017 32.03 52.74 102.73 34.53
27 28 男 38 31/10/2017 34.62 54.43 119.68 51.14
28 29 男 60 24/10/2017 28.36 32.30 64.43 30.76
29 30 男 55 17/10/2017 29.60 34.07 99.96 41.95
… .. .. … … … … …
5612 5702 女 35 10/10/2017 16.88 12.60 78.18 24.35
5613 5703 女 50 10/10/2017 NaN NaN NaN NaN
5614 5705 女 29 10/10/2017 NaN NaN NaN NaN
5615 5706 男 38 10/10/2017 40.69 58.04 89.89 41.94
5616 5707 女 35 10/10/2017 15.74 11.71 71.85 15.52
5617 5708 男 33 10/10/2017 41.57 59.92 92.58 49.45
5618 5709 男 30 10/10/2017 17.13 21.95 82.48 40.98
5619 5710 女 66 10/10/2017 22.87 15.43 118.00 14.62
5620 5711 男 38 10/10/2017 29.46 48.27 79.34 80.79
5621 5712 男 45 10/10/2017 17.99 18.75 114.87 18.60
5622 5713 女 36 10/10/2017 26.21 28.14 57.07 33.75
5623 5714 男 35 10/10/2017 22.22 27.43 87.09 27.03
5624 5715 女 50 10/10/2017 29.68 19.82 77.52 11.96
5625 5716 女 38 10/10/2017 20.52 14.13 66.78 15.26
5626 5717 女 41 10/10/2017 16.75 9.77 65.03 10.86
5627 5718 女 50 10/10/2017 20.36 25.00 118.56 38.07
5628 5719 男 40 10/10/2017 45.84 38.42 80.96 123.39
5629 5720 女 30 10/10/2017 23.38 27.63 58.79 6.95
5630 5721 女 42 10/10/2017 18.59 19.43 68.40 16.63
5631 5722 女 36 10/10/2017 22.08 4.62 51.76 16.76
5632 5723 男 27 10/10/2017 61.34 160.58 88.69 27.16
5633 5724 女 58 10/10/2017 29.09 26.26 90.07 17.65
5634 5725 男 60 10/10/2017 31.06 24.52 80.09 26.18
5635 5726 男 41 10/10/2017 20.92 18.63 67.25 53.71
5636 5727 男 34 10/10/2017 28.72 36.22 36.09 26.72
5637 5728 女 47 10/10/2017 18.82 14.56 54.02 14.75
5638 5729 女 31 10/10/2017 21.08 13.07 76.03 13.80
5639 5730 女 80 10/10/2017 22.95 21.51 106.37 32.88
5640 5731 女 55 10/10/2017 33.54 24.94 97.60 19.16
5641 5732 女 30 10/10/2017 21.37 20.77 52.54 26.94

   *总蛋白    白蛋白  ...    血小板计数  血小板平均体积  血小板体积分布宽度  血小板比积  中性粒细胞%  淋巴细胞%  \

0 76.88 49.60 … 166.0 9.9 17.4 0.164 54.1 34.2
1 79.43 47.76 … 277.0 9.2 10.3 0.260 52.0 36.7
2 86.23 48.00 … 241.0 8.3 16.6 0.199 48.1 40.3
3 70.98 44.02 … 252.0 10.3 10.8 0.260 41.7 46.5
4 78.05 41.83 … 316.0 11.1 14.0 0.350 56.6 33.1
5 76.46 45.85 … 249.0 8.5 17.0 0.211 42.9 47.0
6 80.82 46.40 … 246.0 10.8 13.3 0.270 52.9 32.0
7 74.17 41.63 … 282.0 10.5 13.0 0.300 52.8 36.9
8 76.12 49.31 … 275.0 9.8 11.4 0.270 53.1 35.9
9 75.94 46.64 … 247.0 10.7 12.6 0.270 65.6 27.3
10 75.84 43.71 … 178.0 10.8 13.5 0.190 54.0 35.7
11 73.80 48.32 … 259.0 10.3 12.0 0.270 57.8 33.1
12 77.86 43.05 … 223.0 12.4 17.2 0.280 38.8 48.5
13 76.84 47.56 … 330.0 9.2 9.9 0.300 72.5 20.5
14 92.31 46.98 … 344.0 11.9 15.5 0.410 57.5 33.4
15 74.43 44.49 … 424.0 10.7 12.7 0.450 64.9 28.5
16 76.02 42.39 … 303.0 9.9 11.5 0.300 73.0 17.5
17 81.87 43.85 … 263.0 11.4 16.1 0.300 55.0 35.8
18 79.74 46.49 … 274.0 11.2 13.4 0.310 61.5 28.2
19 81.50 51.16 … 193.0 11.2 13.6 0.220 54.4 36.8
20 82.80 49.32 … 256.0 11.6 16.2 0.300 58.4 33.7
21 75.70 48.68 … 166.0 9.9 17.2 0.164 58.2 33.9
22 76.12 44.87 … 571.0 10.1 10.1 0.580 55.9 27.6
23 83.11 47.37 … 196.0 11.5 14.2 0.230 45.8 47.4
24 76.97 47.89 … 206.0 10.4 11.5 0.210 49.0 44.1
25 77.07 43.72 … 293.0 11.8 15.4 0.350 55.4 39.2
26 79.11 50.40 … 264.0 9.4 10.0 0.250 56.1 35.4
27 78.47 49.26 … 223.0 11.1 15.1 0.250 55.1 33.1
28 71.38 43.21 … 201.0 10.5 11.4 0.210 54.2 35.8
29 82.33 45.49 … 260.0 11.1 13.5 0.290 55.7 30.1
… … … … … … … … …
5612 79.14 46.91 … 329.0 9.9 11.7 0.330 59.6 30.7
5613 NaN NaN … 261.0 11.5 13.7 0.300 50.7 39.6
5614 NaN NaN … 279.0 10.5 11.9 0.290 62.9 30.3
5615 76.02 46.37 … 293.0 11.3 15.2 0.330 50.4 37.1
5616 80.56 46.81 … 319.0 9.5 10.6 0.300 70.6 22.1
5617 85.35 50.51 … 283.0 10.0 11.8 0.280 54.3 36.1
5618 79.63 48.26 … 300.0 10.6 13.9 0.320 46.8 31.3
5619 74.49 42.25 … 254.0 11.7 14.6 0.300 71.1 21.5
5620 72.87 47.46 … 225.0 9.8 12.2 0.220 53.5 33.8
5621 74.89 45.32 … 183.0 11.1 14.8 0.200 51.4 39.5
5622 75.40 45.74 … 200.0 11.6 14.4 0.230 65.2 27.9
5623 79.83 49.72 … 254.0 9.5 10.2 0.240 59.0 30.6
5624 80.54 45.98 … 379.0 11.3 16.4 0.430 53.0 37.1
5625 81.55 46.94 … 344.0 10.0 11.5 0.340 52.8 23.9
5626 68.42 42.54 … 295.0 10.4 11.8 0.310 70.2 22.2
5627 79.70 48.24 … 289.0 11.4 14.5 0.330 59.3 29.1
5628 84.03 49.40 … 162.0 11.7 16.0 0.190 57.1 28.5
5629 76.54 44.48 … 255.0 10.6 12.2 0.270 55.6 37.7
5630 70.17 42.34 … 240.0 9.4 9.4 0.220 73.0 20.3
5631 78.62 45.23 … 226.0 10.4 11.9 0.240 57.7 35.5
5632 76.65 48.27 … 234.0 10.4 12.0 0.240 67.5 25.3
5633 75.50 39.84 … 225.0 10.2 12.1 0.230 49.9 39.9
5634 72.44 45.90 … 248.0 10.6 12.3 0.260 57.6 33.7
5635 82.12 44.65 … 276.0 11.7 14.8 0.320 35.3 56.8
5636 69.07 46.54 … 225.0 11.2 13.3 0.250 58.2 31.5
5637 77.44 44.27 … 200.0 10.6 12.0 0.210 48.8 43.3
5638 80.72 47.21 … 210.0 11.1 13.7 0.230 60.6 31.3
5639 75.29 40.43 … 323.0 10.4 12.6 0.340 61.1 30.1
5640 78.50 43.10 … 220.0 12.2 16.3 0.270 55.0 36.9
5641 79.86 49.25 … 367.0 9.9 10.8 0.360 58.5 31.2

  单核细胞%  嗜酸细胞%  嗜碱细胞%     血糖  

0 6.5 4.7 0.6 6.06
1 5.8 4.7 0.8 5.39
2 7.7 3.2 0.8 5.59
3 6.7 4.6 0.5 4.30
4 9.1 0.6 0.6 5.42
5 7.1 2.1 1.0 5.97
6 11.3 3.1 0.7 5.11
7 6.6 2.8 0.9 5.94
8 7.3 3.3 0.4 5.66
9 5.4 1.0 0.7 5.48
10 8.1 1.3 0.9 4.44
11 7.5 1.2 0.4 5.48
12 7.2 4.2 1.3 5.32
13 6.1 0.6 0.3 5.08
14 6.8 1.5 0.8 4.63
15 5.0 1.1 0.5 4.92
16 7.2 1.9 0.4 7.08
17 8.0 1.0 0.2 4.66
18 6.0 3.5 0.8 6.58
19 7.1 1.3 0.4 4.29
20 5.3 2.0 0.6 4.55
21 5.2 2.4 0.3 5.16
22 11.5 4.3 0.7 5.13
23 5.3 1.1 0.4 4.37
24 5.5 0.8 0.6 5.17
25 4.5 0.3 0.6 4.64
26 6.8 1.1 0.6 5.82
27 9.1 1.9 0.8 6.29
28 7.5 1.7 0.8 5.10
29 10.4 2.6 1.2 5.41
… … … …
5612 7.8 1.2 0.7 5.32
5613 7.6 1.6 0.5 5.63
5614 5.2 1.1 0.5 4.84
5615 8.9 2.5 1.1 5.44
5616 5.9 1.0 0.4 4.79
5617 6.5 2.5 0.6 4.82
5618 6.0 15.1 0.8 5.25
5619 5.6 1.1 0.7 4.71
5620 8.8 2.8 1.1 6.64
5621 8.3 0.5 0.3 5.56
5622 5.7 0.5 0.7 5.07
5623 8.5 1.3 0.6 5.60
5624 8.5 0.5 0.9 5.32
5625 3.8 18.4 1.1 5.40
5626 5.5 1.2 0.9 5.39
5627 9.0 2.2 0.4 17.43
5628 6.6 7.2 0.6 5.52
5629 4.8 1.4 0.5 5.29
5630 5.7 0.9 0.1 5.43
5631 5.3 0.9 0.6 5.58
5632 6.1 0.8 0.3 5.18
5633 4.8 4.8 0.6 5.25
5634 7.4 1.0 0.3 5.15
5635 5.7 1.7 0.5 6.01
5636 7.2 2.7 0.4 5.11
5637 6.5 0.7 0.7 5.45
5638 5.5 1.6 1.0 5.13
5639 6.0 2.2 0.6 5.24
5640 6.8 0.7 0.6 6.37
5641 5.8 3.7 0.8 6.00

其他数据也可以查看,发现,数据之中存在空数据,除此之外,还存在字符类型的数据,如性别特征中的男女,这不利于做数据分析以及后续的预测,所以,第一步对数据进行处理

print( "\n为 LightGBM 进行 数据处理工作······" )
def make_feature_lightgbm(train,test):
    """将train 和 test中的id列的值给复制出来,赋值给 train_id,test_id"""
    train_id = train.id.values.copy()
    test_id = test.id.values.copy()
    """将train 和test 两个dataframe进行拼接起来"""
    data = pd.concat([train,test])
    """将原始数据中的性别“男”替换为0,“女” 替换为1,缺失替换为0,数据文件在“dataset”文件夹下"""
    data['性别'] = data['性别'].map({'男':1,'女':0})
    """将日期转换为 天数,方便后续计算,或者是删除 """
    data['体检日期'] = (pd.to_datetime(data['体检日期']) - parse('2016-10-09')).dt.days  
    """按列提取均值,并填入NAN位置,inplace=True表示不显示处理结果,False为显示处理结果"""
    data.fillna(data.median(axis=0),inplace=True)
    """改变格式,float64-->> float32"""
    for c, dtype in zip(data.columns, data.dtypes):
        if dtype == np.float64:
            data[c] = data[c].astype(np.float32)
    """
    上面的操作都是为了对数据进行处理,之前合并数据是为了简化操作
    重新切割 data,分为 训练特征和测试特征
    """
    train_feat = data[data.id.isin(train_id)]
    test_feat = data[data.id.isin(test_id)]
    return train_feat,test_feat

df_train,df_test= make_feature_lightgbm(train,test)

通过上述代码片,可以得出训练集和测试集

import lightgbm as lgb
"""将训练数据中的id 和 血糖 两列删除掉,赋值给 x_train"""
x_train = df_train.drop(['id', '血糖'], axis=1)  
"""y_train 训练标签"""
y_train = df_train['血糖'].values  # array([6.06, 5.39, 5.59, ..., 5.24, 6.37, 6.  ], dtype=float32)
#print(x_train.shape, y_train.shape)  #(5642, 40) (5642,)
"""列出表格中的所有标题栏"""
train_columns = x_train.columns  
"""
   x_train.dtypes=float32
   x_train.dtypes == object   false
   下面这个循环只是用来检查是否存在columns中存在非object的名称
"""
for c in x_train.dtypes[x_train.dtypes == object].index.values:
    x_train[c] = (x_train[c] == True) 
"""Python垃圾回收机制:gc模块  解决内存泄露问题"""
#del df_train; gc.collect()
"""change x_train 的type 由 DataFrame 变为 float32 """
x_train = x_train.values.astype(np.float32, copy=False) 
"""将数据集导入lgb函数当中,包括训练数据,以及对应的标签"""
d_train = lgb.Dataset(x_train, label=y_train)

这里选用了GBDT、XGBoost、LightGBM三种,提升方法,是将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断好,具体可以去官方文档

将数据导入lgb函数中后,设置lgb相关参数

params = {}
params['max_bin'] = 10
params['learning_rate'] = 0.0021 # shrinkage_rate
params['boosting_type'] = 'gbdt'
params['objective'] = 'regression'
params['metric'] = 'mse'          # or 'mae'
params['sub_feature'] = 0.345    # feature_fraction (small values => use very different submodels)
params['bagging_fraction'] = 0.85 # sub_row
params['bagging_freq'] = 40
params['num_leaves'] = 512        # num_leaf
params['min_data'] = 500         # min_data_in_leaf
params['min_hessian'] = 0.05     # min_sum_hessian_in_leaf
params['verbose'] = 0
params['feature_fraction_seed'] = 2
params['bagging_seed'] = 3

"""np.random.seed(0)的作用:作用:使得随机数据可预测"""
np.random.seed(0)
random.seed(0)
print("\nFitting LightGBM model ...")

clf = lgb.train(params, d_train, 1000)

使用lgb进行训练之后,得到clf训练模型,这时可以对模型进行检测

"""内存泄露,垃圾回收"""
#del d_train; gc.collect()
#del x_train; gc.collect()

print("\n准备基于LightGBM的预测 ...")
print("  准备测试数据 x_test...")
x_test = df_test.drop(['id','血糖'], axis=1)
print("\n开始进行 LightGBM 预测...")
p_test = clf.predict(x_test)

得到测试结果,对其进行输出以及存储结果

"""内存泄露,垃圾回收"""
#del x_test; gc.collect()

print( "LightGBM 预测:" )
print( pd.DataFrame(p_test))
result_path = 'E:\The_most_powerful_laboratory\Tianchi_bigData\AI_diabetes_prediction\The_program_and_Result\\'
pd.DataFrame(p_test).to_csv(result_path+'other_treat2_pm_lgb.csv',header=None,index=False)

输出结果:
0 5.980362
1 6.152404
2 5.434784
3 5.691541
4 5.347017
5 5.498835
6 5.450368
7 5.708111
8 5.867635
9 6.118506
10 5.080957
11 5.692060
12 5.879674
13 5.575080
14 5.941833
15 5.108654
16 5.479026
17 5.761566
18 5.215997
19 5.928394
20 5.431442
21 5.487162
22 6.361659
23 6.106310
24 5.917645
25 5.250482
26 5.293484
27 5.484452
28 5.699167
29 5.661823
.. …
970 5.736628
971 6.044788
972 6.120981
973 6.290797
974 5.643984
975 5.629949
976 5.896866
977 5.884388
978 5.552906
979 5.099668
980 6.094184
981 5.207230
982 5.878387
983 5.592142
984 6.070533
985 5.723010
986 5.697837
987 6.142087
988 6.066210
989 5.785511
990 5.848041
991 5.250853
992 5.340729
993 6.106734
994 6.380849
995 5.595592
996 5.968682
997 6.036769
998 5.314922
999 5.549087

预测完毕
做了一次比赛之后发现,这种数据比赛的重点在于 特征工程的处理,特征的优良好坏,很大程度上决定了你预测结果的好坏,当然,好的预测方法也是十分关键的。机器学习时代三大神器GBDT、XGBoost、LightGBM,不同种的将会决定你预测的精度和速度。

好了,结束了(给自己一个小目标,每周一篇博客,贵在坚持)

PS:本次代码,十分注重基本库的运用,如pandas,lgb库等,特别是pandas,俗话说得好,pandas大法好;另外,贴上我的GitHub完整代码地址。新人,请多多指正

大学生参加学科竞赛有着诸多好处,不仅有助于个人综合素质的提升,还能为未来职业发展奠定良好基础。以下是一些分析: 首先,学科竞赛是提高专业知识和技能水平的有效途径。通过参与竞赛,学生不仅能够深入学习相关专业知识,还能够接触到最新的科研成果和技术发展趋势。这有助于拓展学生的学科视野,使其对专业领域有更深刻的理解。在竞赛过程中,学生通常需要解决实际问题,这锻炼了他们独立思考和解决问题的能力。 其次,学科竞赛培养了学生的团队合作精神。许多竞赛项目需要团队协作来完成,这促使学生学会有效地与他人合作、协调分工。在团队合作中,学生们能够学到如何有效沟通、共同制定目标和分工合作,这对于日后进入职场具有重要意义。 此外,学科竞赛是提高学生综合能力的一种途径。竞赛项目通常会涉及到理论知识、实际操作和创新思维等多个方面,要求参赛者具备全面的素质。在竞赛过程中,学生不仅需要展现自己的专业知识,还需要具备创新意识和解决问题的能力。这种全面的综合能力培养对于未来从事各类职业都具有积极作用。 此外,学科竞赛可以为学生提供展示自我、树立信心的机会。通过比赛的舞台,学生有机会展现自己在专业领域的优势,得到他人的认可和赞誉。这对于培养学生的自信心和自我价值感非常重要,有助于他们更加积极主动地投入学习和未来的职业生涯。 最后,学科竞赛对于个人职业发展具有积极的助推作用。在竞赛中脱颖而出的学生通常能够引起企业、研究机构等用人单位的关注。获得竞赛奖项不仅可以作为个人履历的亮点,还可以为进入理想的工作岗位提供有力的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值