美文网首页
通过生物学数据预测年龄-1

通过生物学数据预测年龄-1

作者: 何物昂 | 来源:发表于2020-04-11 17:04 被阅读0次

    前言

    一般情况,我们都可以通过观察他人长相或这图片来大致估摸别人的年龄段。基于有效的图片数据,也可以通过构建训练机器学习或深度学习模型来进行年龄预测,。微软之前出了个how-old的网站可以通过上传图片,估计年龄,一些研究AI的公司也提供相应的API供开发者使用。本文也将构建一个简单的预测年龄的机器学习模型,不过用于构建模型的数据不是人物的脸部图片,而是通过人体皮肤成纤维细胞的基因表达数据来构建预测模型。Jason G. Fleischer et al. 2018进行过相关研究发了论文。

    数据

    通过RNA-seq测序得到成纤维细胞的基因表达数据,用来测序的数据一共来自133 个人,年龄分布在1-94岁(有些年龄段的数据没有~)
    数据可以从这里下载Zenodo

    https://zenodo.org/record/2545213/files/training_data_normal.tsv
    

    为什么使用成纤维细胞来做关于年龄的预测研究

    1. 在人类皮肤中,成纤维细胞有较低的增值率,也因此会保留一些由年龄增加带来的损伤。
    2. 成纤维细胞表现出年龄依赖性表型、表观基因组和转录组改变。
    3. 即使是通过衰老成纤维细胞直接重编程得到神经元仍然保留了与年龄相关的转录组特征和细胞缺陷。
    4. 成纤维细胞较容易从皮肤中获取。

    就是说成纤维细胞转录组数据中存在着体现年龄的特征,随着年龄的增大,这些特征可能变大或者变小,所以可以使用机器学习方法通过学习数据中的特征来构建预测年龄的模型。
    加载数据可以通过:

    import pandas as pd
    
    df = pd.read_csv("training_data_normal.tsv", sep='\t')
    y = df['age']  # 年龄
    x = df.iloc[:, :-1]  # 基因表达数据 
    

    Pipeline 搭建

    由于有27142个特征,并不是所有特征都是有效,需要先进行特征挑选,选择部分进行模型的构建。这里构建一个Pipeline, 模型选择ElasticNet, 特征打分函数使用用于回归问题的f_regression:

    from sklearn.pipeline import Pipeline
    
    pipeline = Pipeline([
        ('selectkbest', SelectKBest(score_func=f_regression)),
        ('elasticnet', ElasticNet(random_state=42)),
    ])
    
    

    超参数优化

    机器学习的模型构建,需要一些超参数的设置,比如上一步的特征筛选,该选多少个特征才可以训练出一个较好的模型。由于不能给出最优参数,我们需要对已有的参数选择进行优化。这里我们直接使用Age prediction using machine learning这篇教程给出的参数。

    param_grid = {
        'selectkbest__k': [5880, 5890, 5895, 5900],
        'elasticnet__normalize': [True, False],
        'elasticnet__alpha': [0.00001, 0.0001, 0.001]
    
    }
    

    优化方法使用网格搜索,用于穷尽所有给出的参数组合,从而得出最优的参数。网格搜索中使用5折交叉来分割数据。

    cver = KFold(5, shuffle=True,random_state=3111696)
    grid = GridSearchCV(pipeline, param_grid=param_grid, cv=cver, scoring='r2', refit=True)
    grid.fit(x, y)
    

    其中GridSearchCV里的scoring参数值 'r2' 是用于评估回归模型性能评分指标,'r2'的值越接近1,表示训练模型越好。如果是负值,即训练的模型不好。refit=True表示找到最优参数后,将采用最优参数和使用所有训练数据来重新训练一个模型。

    最优参数,以及得分,和模型可以得到:

    print("Best: %f using %s" % (grid.best_score_,  grid.best_params_))
    estimator = grid.best_estimator_
    ## Best: 0.727527 using {'elasticnet__alpha': 0.0001, 'elasticnet__normalize': True, 'selectkbest__k': 5890}
    

    在此,我们就得到了一个用于预测年龄的机器学习模型了。根据那个r2分数 0.727来看,这个模型还可以,实际预测咋样就不知道的,这个测试数据也不是像图片那么容易得到,毕竟你要得到新的数据就需要去测序。。。。。

    更多信息可以查看论文和教程。

    References

    1. Fleischer, J.G., Schulte, R., Tsai, H.H. et al. Predicting age from the transcriptome of human dermal fibroblasts. Genome Biol 19, 221 (2018). https://doi.org/10.1186/s13059-018-1599-6
    2. Ekaterina Polkh, Anup Kumar, 2020 Age prediction using machine learning (Galaxy Training Materials). /training-material/topics/statistics/tutorials/age-prediction-with-ml/tutorial.html Online; accessed Sat Apr 11 2020
    3. Batut et al., 2018 Community-Driven Data Analysis Training for Biology Cell Systems 10.1016/j.cels.2018.05.012

    相关文章

      网友评论

          本文标题:通过生物学数据预测年龄-1

          本文链接:https://www.haomeiwen.com/subject/fduzuhtx.html