task是包含數據和附加的一些信息的對象。比如目標變量,數據類型等等信息
task的類型分類任務:目標變量為因子或者字符
回歸任務:目標變量為數字
生存任務:目標變量是時間和刪失數據
有序回歸任務:目標變量為有序的
聚類任務:無監督學習,無目標變量
空間任務:樣本具有時空信息
建立任務使用mtcars數據集,建立一個回歸任務,使用兩個特徵預測目標變量mpg(每公裡油耗)的值
# 導入數據
data("mtcars", package = "datasets")
# 選擇變量
data = mtcars[, 1:3]
# 查看數據類型
str(data)
## 'data.frame': 32 obs. of 3 variables:
## $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
## $ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
## $ disp: num 160 160 108 258 360 ...接下來建立回歸任務,同時要給予這個任務一下的信息
id:任務的id,隨便給
backend:數據
target:目標變量library("mlr3")
# 使用的類的new方法
task_mtcars = TaskRegr$new(id = "cars", backend = data, target = "mpg")
print(task_mtcars)
## <TaskRegr:cars> (32 x 3)
## * Target: mpg
## * Properties: -
## * Features (2):
## - dbl (2): cyl, dispprint()方法給出了任務的簡短總結:它有32個觀察結果和3列。其中2列是特性,1列是目標。
使用mlr3viz包,繪製任務圖
返回的是數據的相關圖、分布圖library("mlr3viz")
autoplot(task_mtcars, type = "pairs")
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
預置的任務mlr3中有一些已經定義好的任務,用來學習
mlr_tasks
## <DictionaryTask> with 10 stored values
## Keys: boston_housing, breast_cancer, german_credit, iris, mtcars, pima,
## sonar, spam, wine, zoo
# 轉換為table,可以有更多的信息
library("data.table")
as.data.table(mlr_tasks)
## key task_type nrow ncol lgl int dbl chr fct ord pxc
## 1: boston_housing regr 506 19 0 3 13 0 2 0 0
## 2: breast_cancer classif 683 10 0 0 0 0 0 9 0
## 3: german_credit classif 1000 21 0 3 0 0 14 3 0
## 4: iris classif 150 5 0 0 4 0 0 0 0
## 5: mtcars regr 32 11 0 0 10 0 0 0 0
## 6: pima classif 768 9 0 0 8 0 0 0 0
## 7: sonar classif 208 61 0 0 60 0 0 0 0
## 8: spam classif 4601 58 0 0 57 0 0 0 0
## 9: wine classif 178 14 0 2 11 0 0 0 0
## 10: zoo classif 101 17 15 1 0 0 0 0 0使用get方法,選擇特定的任務
這裡選擇鳶尾花的分類數據集task_iris = mlr_tasks$get("iris")
print(task_iris)
## <TaskClassif:iris> (150 x 5)
## * Target: Species
## * Properties: multiclass
## * Features (4):
## - dbl (4): Petal.Length, Petal.Width, Sepal.Length, Sepal.Width
# 使用tsk方法,也可以得到鳶尾花的數據集
tsk("iris")
## <TaskClassif:iris> (150 x 5)
## * Target: Species
## * Properties: multiclass
## * Features (4):
## - dbl (4): Petal.Length, Petal.Width, Sepal.Length, Sepal.Width
任務的檢索# 查看個案數
task_iris$nrow
## [1] 150
# 查看變量數
task_iris$ncol
## [1] 5
#直接查看任務的數據
task_iris$data()
# 選擇特定的行
task_iris$data(rows = c(1, 51, 101))
# 查詢特徵和目標變量
task_iris$feature_names
## [1] "Petal.Length" "Petal.Width" "Sepal.Length" "Sepal.Width"
task_iris$target_names
## [1] "Species"
# 要從任務中提取完整的數據,只需將其轉換為data.table
summary(as.data.table(task_iris))
Roles(行列)為行和列指定角色,這些roles決定著任務的一些特性
比如,前面構造的mtcars任務有以下列roles:
# 查看之前的列角色
print(task_mtcars$col_roles)
## $feature
## [1] "cyl" "disp"
## $target
## [1] "mpg"
## $name
## character(0)
## $order
## character(0)
## $stratum
## character(0)
## $group
## character(0)
## $weight
## character(0)現在我們將mtcar的行名作為額外的一個特徵
# 首先將rownames保存,然後轉換為table
data = as.data.table(mtcars[, 1:3], keep.rownames = TRUE)
# 建立task
task = TaskRegr$new(id = "cars", backend = data, target = "mpg")
#此時,特徵中就有了rn,也就是rownames一個新的變量
task$feature_names
## [1] "cyl" "disp" "rn"多出的rn變量為新的特徵
# 支持的列角色
names(task$col_roles)
## [1] "feature" "target" "name" "order" "stratum" "group" "weight"
# 將rn變量指定為name
task$set_col_roles("rn", roles = "name")
# 這個時候,特徵names中就沒有了rn變量
task$feature_names
## [1] "cyl" "disp"
# 同時rn也寸數據中去除
task$data(rows = 1:2)對於行角色,一般用來指定訓練集和測試集
任務調整(Task Mutators)這部分內容其實在建立任務之前進行,但是mlr3也提供了task的修改方法
$filter()選取數據子集
$select()選取子特徵task = tsk("iris")
# 選擇特定的特徵
task$select(c("Sepal.Width", "Sepal.Length"))
# 選擇特定的行
task$filter(1:3)
# 查看
task$head()
## Species Sepal.Length Sepal.Width
## 1: setosa 5.1 3.5
## 2: setosa 4.9 3.0
## 3: setosa 4.7 3.2$rbind() 和 $cbind()對任務添加額外的行和列
# 添加額外的行
task$cbind(data.table(foo = letters[1:3]))
task$head()
## Species Sepal.Length Sepal.Width foo
## 1: setosa 5.1 3.5 a
## 2: setosa 4.9 3.0 b
## 3: setosa 4.7 3.2 c
繪製task使用的包仍然為可視化mlr3viz
library("mlr3viz")
# 建立任務,使用的為預置任務集
task = tsk("pima")
# 只選擇前三個列名,也就是特徵
task$select(head(task$feature_names, 3))
# 默認繪製頻率圖
autoplot(task)# 繪製配對的圖
# 顯示的信息較多
autoplot(task, type = "pairs")以上是對分類任務做的繪圖,同時對於回歸任務也是一樣的,這裡就不粘貼繪製的圖片了
library("mlr3viz")
task = tsk("mtcars")
task$select(head(task$feature_names, 3))
autoplot(task)
autoplot(task, type = "pairs")
結束語mlr3關於任務的建立更新完畢
love&peace