前言
一般情況,我們都可以通過觀察他人長相或這圖片來大致估摸別人的年齡段?;谟行У膱D片數據,也可以通過構建訓練機器學習或深度學習模型來進行年齡預測,。微軟之前出了個how-old的網站可以通過上傳圖片,估計年齡,一些研究AI的公司也提供相應的API供開發(fā)者使用。本文也將構建一個簡單的預測年齡的機器學習模型,不過用于構建模型的數據不是人物的臉部圖片,而是通過人體皮膚成纖維細胞的基因表達數據來構建預測模型。Jason G. Fleischer et al. 2018進行過相關研究發(fā)了論文。
數據
通過RNA-seq測序得到成纖維細胞的基因表達數據,用來測序的數據一共來自133 個人,年齡分布在1-94歲(有些年齡段的數據沒有~)
數據可以從這里下載Zenodo
https://zenodo.org/record/2545213/files/training_data_normal.tsv
為什么使用成纖維細胞來做關于年齡的預測研究
- 在人類皮膚中,成纖維細胞有較低的增值率,也因此會保留一些由年齡增加帶來的損傷。
- 成纖維細胞表現出年齡依賴性表型、表觀基因組和轉錄組改變。
- 即使是通過衰老成纖維細胞直接重編程得到神經元仍然保留了與年齡相關的轉錄組特征和細胞缺陷。
- 成纖維細胞較容易從皮膚中獲取。
就是說成纖維細胞轉錄組數據中存在著體現年齡的特征,隨著年齡的增大,這些特征可能變大或者變小,所以可以使用機器學習方法通過學習數據中的特征來構建預測年齡的模型。
加載數據可以通過:
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)),
])
超參數優(yōu)化
機器學習的模型構建,需要一些超參數的設置,比如上一步的特征篩選,該選多少個特征才可以訓練出一個較好的模型。由于不能給出最優(yōu)參數,我們需要對已有的參數選擇進行優(yōu)化。這里我們直接使用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]
}
優(yōu)化方法使用網格搜索,用于窮盡所有給出的參數組合,從而得出最優(yōu)的參數。網格搜索中使用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表示找到最優(yōu)參數后,將采用最優(yōu)參數和使用所有訓練數據來重新訓練一個模型。
最優(yōu)參數,以及得分,和模型可以得到:
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
- 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
- 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
- Batut et al., 2018 Community-Driven Data Analysis Training for Biology Cell Systems 10.1016/j.cels.2018.05.012