mlr3中的機(jī)器學(xué)習(xí)--進(jìn)入生物信息學(xué)新時(shí)代
機(jī)器學(xué)習(xí)在生物信息學(xué)領(lǐng)域的發(fā)展具有重要意義,它已為生物學(xué)研究和醫(yī)學(xué)領(lǐng)域帶來(lái)了深遠(yuǎn)的影響。
高通量技術(shù)的發(fā)展使得生物學(xué)家可以生成大量的生物數(shù)據(jù),包括基因組、蛋白質(zhì)組、轉(zhuǎn)錄組等信息。機(jī)器學(xué)習(xí)算法能夠有效處理這些海量數(shù)據(jù),從中挖掘隱藏的模式和關(guān)聯(lián),幫助研究人員更好地理解生物體系。該方法能夠根據(jù)已知的生物數(shù)據(jù),建立模型來(lái)預(yù)測(cè)未知的結(jié)果。
在生物學(xué)數(shù)據(jù)中,往往包含大量的特征(如基因或蛋白質(zhì))。機(jī)器學(xué)習(xí)可以幫助生物學(xué)家選擇最相關(guān)的特征,從而降低維度并提高模型的性能,減少過(guò)擬合的風(fēng)險(xiǎn)。
目前,在生物信息學(xué)中,機(jī)器學(xué)習(xí)有了新的應(yīng)用和拓展。例如,可以利用已知的基因表達(dá)數(shù)據(jù),預(yù)測(cè)患者是否患有某種疾病,或者預(yù)測(cè)蛋白質(zhì)的結(jié)構(gòu)和功能。這對(duì)于藥物研發(fā)、疾病診斷和治療等方面具有重要意義:
1.?藥物發(fā)現(xiàn):?通過(guò)分析已知的藥物與基因、蛋白質(zhì)相互作用的數(shù)據(jù),機(jī)器學(xué)習(xí)可以預(yù)測(cè)新的藥物與生物分子之間的相互作用,從而加速藥物發(fā)現(xiàn)過(guò)程。
2.?個(gè)性化醫(yī)療:?機(jī)器學(xué)習(xí)在個(gè)體基因組和臨床數(shù)據(jù)分析中的應(yīng)用,使醫(yī)療可以更加個(gè)性化和精準(zhǔn)。例如,根據(jù)患者的基因信息,可以預(yù)測(cè)患者對(duì)特定藥物的反應(yīng),從而指導(dǎo)醫(yī)療決策。
3.?生物圖像分析:?生物圖像數(shù)據(jù),如顯微鏡圖像和醫(yī)學(xué)影像,可以通過(guò)機(jī)器學(xué)習(xí)算法進(jìn)行分析和解釋。這可以用于細(xì)胞結(jié)構(gòu)識(shí)別、腫瘤檢測(cè)等應(yīng)用。
4.?基因組學(xué)研究:?機(jī)器學(xué)習(xí)在基因組學(xué)中可以用于預(yù)測(cè)基因調(diào)控、DNA序列分析、基因表達(dá)模式識(shí)別等任務(wù),有助于揭示基因與表型之間的關(guān)聯(lián)。
總而言之,機(jī)器學(xué)習(xí)的發(fā)展為生物信息學(xué)領(lǐng)域帶來(lái)了工具和方法,能夠加速科學(xué)研究的進(jìn)程,推動(dòng)醫(yī)學(xué)進(jìn)步,并為個(gè)性化醫(yī)療和精準(zhǔn)治療提供了新的可能性。它已經(jīng)成為生物學(xué)家和醫(yī)學(xué)研究人員不可或缺的工具之一。

mlr3?是一個(gè)在R語(yǔ)言中實(shí)現(xiàn)的強(qiáng)大機(jī)器學(xué)習(xí)框架,專(zhuān)注于使機(jī)器學(xué)習(xí)的工作流程更加高效、靈活和可擴(kuò)展。它是 mlr?包的繼任者,是一個(gè)全面重新設(shè)計(jì)和重構(gòu)的版本,旨在提供更好的性能和易用性。mlr3?提供了豐富的功能,用于數(shù)據(jù)預(yù)處理、模型選擇、調(diào)參和評(píng)估等機(jī)器學(xué)習(xí)任務(wù)。今天,小果就帶大家走進(jìn)先進(jìn)的mlr3R包,首先從mlr3中的task對(duì)象說(shuō)起,在 mlr3?中,Task?是一個(gè)重要的對(duì)象,用于定義和管理機(jī)器學(xué)習(xí)問(wèn)題的輸入數(shù)據(jù)和輸出目標(biāo)。每個(gè) Task?對(duì)象表示一個(gè)機(jī)器學(xué)習(xí)任務(wù),例如分類(lèi)、回歸或生存分析等。Task?對(duì)象存儲(chǔ)了特征矩陣和對(duì)應(yīng)的目標(biāo)向量,以及一些元數(shù)據(jù),為模型訓(xùn)練和評(píng)估提供了基礎(chǔ)。
首先,我們需要安裝mlr3包并導(dǎo)入。
1.?install.packages("mlr3")??
2.?library(mlr3)??
mlr3包在mlr_tasks字典中儲(chǔ)存了預(yù)定義的機(jī)器學(xué)習(xí)任務(wù),如波士頓房?jī)r(jià)的預(yù)測(cè),mtcars,iris花的分別與識(shí)別等非常常見(jiàn)的機(jī)器學(xué)習(xí)任務(wù):
1.?mlr_tasks??
可以使用tsk()函數(shù)從該mlr_tasks中獲取任務(wù),并將返回值分配給新的變量。
1.?tsk_mtcars?=?tsk("mtcars")??
2.?tsk_mtcars??

一.構(gòu)造task
有時(shí),我們想要?jiǎng)?chuàng)建屬于自己的回歸任務(wù),怎么辦呢?可以構(gòu)造一個(gè)新的TaskRegr實(shí)例,在下面的例子中,小果向大家給出了一個(gè)構(gòu)建TaskRegr實(shí)例的例子,首先加載數(shù)據(jù)集,將數(shù)據(jù)子集化為僅包含三個(gè)列(對(duì)應(yīng)三個(gè)需要的變量)并打印修改后數(shù)據(jù)的屬性,然后再設(shè)置一個(gè)名為tsk_mtcars的回歸任務(wù),在該任務(wù)中,小果將帶大家嘗試著提供過(guò)氣缸數(shù)和位移量去預(yù)測(cè)汽車(chē)的每加侖英里。
在這個(gè)問(wèn)題中,主要的函數(shù)時(shí)as_task_regr()函數(shù),as_task_regr()?函數(shù)允許你將數(shù)據(jù)集和連續(xù)數(shù)值目標(biāo)轉(zhuǎn)化為適用于回歸建模的 Task?對(duì)象,這樣就可以使用 mlr3?中的回歸學(xué)習(xí)算法對(duì)數(shù)據(jù)進(jìn)行建模和預(yù)測(cè)。
1.?data("mtcars",?package?=?"datasets")??
2.?mtcars_subset?=?subset(mtcars,?select?=?c("mpg",?"cyl",?"disp"))??
3. str(mtcars_subset)??

首先,使用?data() 函數(shù)加載了 R 中自帶的 datasets 包中的 mtcars 數(shù)據(jù)集,該數(shù)據(jù)集包含了關(guān)于汽車(chē)的一些特征和性能指標(biāo)。然后,代碼使用?subset() 函數(shù)從 mtcars 數(shù)據(jù)集中選擇了一些列作為子集。這個(gè)子集只包含了三個(gè)列,即 "mpg"(每加侖英里數(shù))、"cyl"(汽缸數(shù))和 "disp"(排量)。str() 函數(shù)被用來(lái)查看 mtcars_subset 數(shù)據(jù)框的結(jié)構(gòu),這是為了觀察數(shù)據(jù)的列和屬性。我們可以看到,mtcars_subset是一個(gè)具有三個(gè)特征變量的截面數(shù)據(jù)。
1.tsk_mtcars?=?as_task_regr(mtcars_subset,?target?=?"mpg",?id?=?"cars")#創(chuàng)建??
在這段代碼中,我們創(chuàng)建了回歸任務(wù)的?Task 對(duì)象。使用 as_task_regr() 函數(shù),將之前創(chuàng)建的 mtcars_subset 數(shù)據(jù)框轉(zhuǎn)換為回歸任務(wù)的 Task 對(duì)象。參數(shù)包括:
data:輸入數(shù)據(jù)框,這里是 mtcars_subset。
target:指定了目標(biāo)變量,也就是我們要預(yù)測(cè)的變量,這里是 "mpg"。
id:可選的任務(wù)標(biāo)識(shí)符,這里設(shè)置為 "cars"。
這樣,通過(guò)該代碼,我們就創(chuàng)建了一個(gè)名為?tsk_mtcars 的回歸任務(wù)的 Task 對(duì)象,其中特征矩陣是來(lái)自于 mtcars_subset 數(shù)據(jù)框的 "cyl" 和 "disp" 列,目標(biāo)變量是 "mpg" 列,任務(wù)標(biāo)識(shí)符設(shè)置為 "cars"。
1.?tsk_mtcars#輸出任務(wù)摘要??
在創(chuàng)建完任務(wù)后,可以通過(guò)在命令行中輸入任務(wù)名來(lái)獲取任務(wù)摘要:
也可以使用mlr3viz包對(duì)任務(wù)進(jìn)行繪制,給出目標(biāo)變量和特征變量分布的圖形摘要,在這張圖中,我們可以看到任務(wù)中三個(gè)變量的具體分布:
1.?library(mlr3viz)??
2.?autoplot(tsk_mtcars,?type?=?"pairs")#可視化任務(wù)??

二.檢索數(shù)據(jù)
小果已經(jīng)教會(huì)了大家如何創(chuàng)建任務(wù)來(lái)存儲(chǔ)數(shù)據(jù),那么下面,小果將帶領(lǐng)大家檢索存儲(chǔ)的數(shù)據(jù)。
可以使用$nrow、$ncol來(lái)檢索數(shù)據(jù)的維度,分別為任務(wù)中數(shù)據(jù)框的行數(shù)(通常代表樣本容量)和列數(shù)(通常代表維度的個(gè)數(shù)):
1.?c(tsk_mtcars$nrow,?tsk_mtcars$ncol)#檢索數(shù)據(jù)維度??

可以通過(guò)$feature_names和$target_names來(lái)獲取特征變量和響應(yīng)變量的具體名稱(chēng):
1.?c(Features?=?tsk_mtcars$feature_names,??
2.???Target?=?tsk_mtcars$target_names)#獲取特征和響應(yīng)變量的變量名

可以通過(guò)$row_ids來(lái)獲取行ID,行ID可以訪問(wèn)單個(gè)觀測(cè)值的數(shù)據(jù),與行號(hào)不同,行ID由自然數(shù)表示,它是任務(wù)行的名稱(chēng),代表樣本的標(biāo)號(hào):

1.?tsk_mtcars$row_ids#行ID??
2.?task=tsk_mtcars??
3.?task$filter(c(4,?1,?3))??
4.task$row_ids
上面的代碼表示通過(guò)行ID去選取任務(wù)中對(duì)應(yīng)的樣本:
task$filter(c(4, 1, 3)):使用 filter() 方法來(lái)對(duì)任務(wù)對(duì)象進(jìn)行篩選操作。參數(shù) c(4, 1, 3) 是一個(gè)索引向量,它指定了要保留的樣本的索引。在這個(gè)例子中,它表示保留數(shù)據(jù)中索引為 4、1 和 3 的樣本。篩選后的結(jié)果會(huì)反映在任務(wù)對(duì)象 task 中。
task$row_ids:這行代碼獲取任務(wù)對(duì)象中所有樣本的行索引(行標(biāo)識(shí)符)。
代碼通過(guò)對(duì)回歸任務(wù)的數(shù)據(jù)進(jìn)行篩選,保留了索引即樣本標(biāo)號(hào)為?4、1 和 3 的樣本。可以通過(guò)查看 task$row_ids 來(lái)獲取篩選后的樣本的行索引列表。這個(gè)操作在一些情況下可以幫助對(duì)數(shù)據(jù)集進(jìn)行子集的操作,以便于特定的分析和建模需求。(這種設(shè)計(jì)決策允許任務(wù)和學(xué)習(xí)者在真正的數(shù)據(jù)庫(kù)管理系統(tǒng)上透明地操作,其中主鍵要求是唯一的,但不一定是連續(xù)的。)
在task中,相應(yīng)的數(shù)據(jù)可以通過(guò)$data()進(jìn)行訪問(wèn)將返回一個(gè)data.table對(duì)象,該方法可以選擇相應(yīng)的參數(shù),用來(lái)指定要檢索的數(shù)據(jù)子集:
1.?tsk_mtcars$data()#檢索所有數(shù)據(jù)??
tsk_mtcars$data(rows?=?c(1,?5,?10),?cols?=?tsk_mtcars$feature_names)#檢索需要的數(shù)據(jù)??
??

到這里,task對(duì)象的基本屬性和有關(guān)操作小云就像大家講完了,不知道同學(xué)們是否學(xué)會(huì)了呢,

