FastTabular
function
TabularRegression
(
blocks
::
Tuple
{
<:
TableRow
,
<:
Continuous
}
,
data
)
tabledata
,
targetdata
=
data
tabledata
isa
TableDataset
||
error
(
"
`data` needs to be a tuple of a `TableDataset` and targets
"
)
return
SupervisedTask
(
blocks
,
(
setup
(
TabularPreprocessing
,
blocks
[
1
]
,
tabledata
)
,
)
,
ŷblock
=
blocks
[
2
]
)
end
"""
TabularRegression(blocks, data)
Learning task for tabular regression. Continuous columns are
normalized and missing values are filled, categorical columns are label encoded
taking into account any missing values which might be present.
`blocks` should be an input and target block `(TableRow(...), Continuous(...))`.
TabularRegression(n, tabledata [; catcols, contcols])
Construct learning task with `classes` to classify into and a `TableDataset`
`tabledata`. The column names can be passed in or guessed from the data. The
regression target is a vector of `n` values.
"""
function
TabularRegression
(
n
::
Int
,
tabledata
::
TableDataset
;
catcols
=
nothing
,
contcols
=
nothing
)
blocks
=
(
setup
(
TableRow
,
tabledata
;
catcols
=
catcols
,
contcols
=
contcols
)
,
Continuous
(
n
)
)
return
TabularRegression
(
blocks
,
(
tabledata
,
nothing
)
)
end
_tasks
[
"
tabularregression
"
]
=
(
id
=
"
tabular/regression
"
,
name
=
"
Tabular regression
"
,
constructor
=
TabularClassificationSingle
,
blocks
=
(
TableRow
,
Continuous
)
,
category
=
"
supervised
"
,
description
=
"""
Task where a number of continuous variables are regressed from a table row
with categorical and continuous variables.
"""
,
package
=
@
__MODULE__
)
@
testset
"
TabularRegression [task]
"
begin
df
=
DataFrame
(
A
=
1
:
4
,
B
=
[
"
M
"
,
"
F
"
,
"
F
"
,
"
M
"
]
,
C
=
10
:
13
)
td
=
TableDataset
(
df
)
targets
=
[
rand
(
2
)
for
_
in
1
:
4
]
task
=
TabularRegression
(
2
,
td
;
catcols
=
(
:
B
,
)
,
contcols
=
(
:
A
,
)
)
testencoding
(
getencodings
(
task
)
,
getblocks
(
task
)
.
sample
)
FastAI
.
checktask_core
(
task
)
@
test_nowarn
tasklossfn
(
task
)
@
test_nowarn
taskmodel
(
task
)
@
testset
"
`encodeinput`
"
begin
row
=
mockblock
(
getblocks
(
task
)
.
input
)
xtrain
=
encodeinput
(
task
,
Training
(
)
,
row
)
@
test
length
(
xtrain
[
1
]
)
==
length
(
getblocks
(
task
)
.
input
.
catcols
)
@
test
length
(
xtrain
[
2
]
)
==
length
(
getblocks
(
task
)
.
input
.
contcols
)
@
test
eltype
(
xtrain
[
1
]
)
<:
Number
end
@
testset
"
`encodetarget`
"
begin
target
=
11
y
=
encodetarget
(
task
,
Training
(
)
,
target
)
@
test
target
==
y
end
@
test_nowarn
task
=
TabularRegression
(
2
,
td
)
FastAI
.
test_task_show
(
task
,
ShowText
(
Base
.
DevNull
(
)
)
)
end