mlr3_建立task

2021-02-14 火星娃統計
mlr3_建立task概述

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, disp

print()方法給出了任務的簡短總結:它有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

相關焦點

  • Hive -- Fetch Task
    fetch task就是不啟動MapReduce,直接讀取本地文件輸出結果。Hive有3個參數控制Fetch task, 對應2個優化器(優化那篇文章說了)hive.fetch.task.conversionhive.fetch.task.conversion.thresholdhive.fetch.task.aggr對應優化器為SimpleFetchOptimizer和SimpleFetchAggregation
  • Spring-Task源碼解析
    這個組件主要包括了兩個/兩種功能:任務的定時調度/執行,對應xml配置的task:scheduler和task:scheduled-tasks標籤。<task:schedulerid="scheduler"pool-size="3"/><beanid="task"class="task.Task"/><task:scheduled-tasksscheduler
  • Sisyphean task
    Reader question:Please explain this sentence: 「Dealing with diabetes can be a 『Sisyphean』 taskAnyways, eventually, as punishment Sisyphus was given the task of pushing a giant boulder up onto a hilltop.
  • The Difference Between 'Task' and 'Assignment'(一)
    正如你可能知道的,「task」和「assignment」這兩個名詞描述的都是你必須完成的活動。 A task is something you have to do.「task 」是你必須要做的事情。 An assignment is usually a task that someone gives you to do.「assignment」通常是某人指派給你的活。 A task describes an activity that can be done in your daily life.
  • 協程庫libtask源碼分析之架構篇
    libtask是google大佬Russ Cox(Go的核心開發者)所寫,本文介紹libtask的基礎原理。我們從libtask的main函數開始,這個main函數就是我們在c語言中使用的c函數,libtask本身實現了main這個函數,用戶使用libtask時,要實現的是taskmain函數。taskmain和main的函數聲明是一樣的。下面我們看一下main函數。
  • PHP 使用 Swoole - TaskWorker 實現異步操作 Mysql
    另外還需要在 set 方法中設置 task 進程數量。使用示例:通過上述示例可以看到,發起一個異步任務只需要調用 swoole_server 的 task 方法就可以。發送之後會觸發 onTask 回調,可以通過 $task_id 和 $from_id 處理不同進程的不同任務。
  • Task.Result跟 Task.GetAwaiter.GetResult()相同嗎?怎麼選?
    當您編寫「 await task;」時,編譯器Task.GetAwaiter()會將其轉換為方法的用法,這將返回具有GetResult()方法的實例。當用於有故障的任務時,GetResult()將傳播原始異常(這是「 await task;」 如何獲得其行為)。因此,您可以使用「task.GetAwaiter().GetResult()如果您想直接調用此傳播邏輯。
  • Multi-task Learning and Beyond: 過去,現在與未來
    task 定義成新網絡的結果。甚至,在部分數據集裡,最簡單的 equal task weighting 也表現得較為優異。一方面,task weighting 的有效性非常依賴於 MTL 網絡本身的設計;此外 task weighting 的更新也依賴於數據集和 optimiser 本身。
  • IELTS Writing Task 1 Tips
    This post aims to convey to you some IELTS writing tips for task 1.
  • IELTS Writing Task 1 Questions
    In the IELTS writing task 1, you will be provided with a graph/chart/diagram
  • Multi-task Learning(Review)多任務學習概述
    2.2 other methods for learning task relationshipKNN methods for task clustering. [9]semi-supervised learning for learning common structures of some related tasks. [10]多任務BNN,通過先驗控制多任務的相似
  • 每日一句:Cooking is an enjoyable task
    新東方網>英語>英語學習>口語>每日一句英語>正文每日一句:Cooking is an enjoyable task 2013-01-31 14:57 來源:恆星英語 作者:
  • IELTS Writing Task 2: Should I write my opinion?
    To know whether you should put your opinion in your essay or not, you should read the instructions given by IELTS very carefully for each task.
  • 為什麼你的 Spring Task 定時任務沒有定時執行?
    -- 任務執行器線程數量 --> <task:executor id="executor" pool-size="3" /> <!-- 任務調度器線程數量 --> <task:scheduler id="scheduler" pool-size="3" /> <!
  • 「take someone to task」別理解成「帶某人做任務」
    大家好,歡迎來的餅哥英語的頻道,今天我們分享一個非常有用且地道的表達——take someone to task, 這個短語的含義不是指「帶某人做任務」,其正確的含義是:take someone to task 斥責某人,指責某人
  • 33rd Chinese naval escort taskforce returns from Gulf of Aden
    By Li YinchuanQINGDAO, Mar. 26 --On the afternoon of March 25, the 33rd escort taskforce of the Chinese People's Liberation Army (PLA) Navy, consisting of the guided-missile destroyer
  • 託福綜合口語task 5 考點及評分標準
    託福綜合口語task5考點分析某種意義上而言,task 5 確實是綜合型題裡面最好得分的那一個。新託福口語考試task 5 是校園場景題,需要學生針對大學生會碰到問題給出解決方法。和task 3 一樣,對話的兩個人一男一女,考生首先要弄清到底是誰碰到了問題。有的時候,碰到問題的同學會傾聽另一個學生給出的兩種解決方案,還有一種情況就是碰到麻煩的學生會自己說出兩種解決方案,讓另一位學生給出意見,然而,無論是哪種情況,考生都會聽到這兩種解決問題的方法及其各自的優缺點。
  • Multi-Task Learning的幾篇綜述文章
    「The more tasks we are learning simultaneously, the more our model has to find a representation that captures all of the tasks and the less is our chance of overfitting on our original task」
  • Tctask全球市場調查問卷平臺,市場調研無處不在。
    具體介紹:上海Tctask廣告聯盟項目項目介紹:TCtask平臺是一家市場調研營銷聯盟主要業務為國際一些大型企業發布新產品或新業務之前進行市場調研收集工作,包括但不僅限於中國大陸,美國和英國。技術支持:我們的平臺是建立有機地收集、更新和豐富參與者分析指標,並不斷地優化調查匹配;每天有數以千計來自全球數10個國家的商業調查問卷;我們準備幫你賺錢無論你的用戶身在何處;準確的數據報表,實時返回調查數據。
  • Multi-task Learning的三個小知識
    這種方法存在一些不足,比如當模型收斂時,有一些task的表現比較好,而另外一些task的表現卻慘不忍睹。其背後的原因是不同的損失函數具有不同的尺度,某些損失函數的尺度較大,從而影響了尺度較小的損失函數發揮作用。這個問題的解決方案是把多任務損失函數「簡單求和」替換為「加權求和」。加權可以使得每個損失函數的尺度一致,但也帶來了新的問題:加權的超參難以確定。