Skip to content

Commit 743b9ac

Browse files
authored
Merge pull request #295 from alan-turing-institute/venuur-dev
Add UnivariateTimeTypeToContinous - take II
2 parents bccb068 + 617378c commit 743b9ac

File tree

5 files changed

+319
-25
lines changed

5 files changed

+319
-25
lines changed

src/MLJModels.jl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import MLJBase: @load
99
import MLJBase: Table, Continuous, Count, Finite, OrderedFactor, Multiclass
1010

1111
using Requires, Pkg, Pkg.TOML, OrderedCollections, Parameters
12-
using Tables, CategoricalArrays, StatsBase, Statistics
12+
using Tables, CategoricalArrays, StatsBase, Statistics, Dates
1313
import Distributions
1414

1515
# for administrators to update Metadata.toml:
@@ -28,7 +28,8 @@ export ConstantRegressor, ConstantClassifier,
2828
# from model/Transformers
2929
export FeatureSelector, StaticTransformer, UnivariateDiscretizer,
3030
UnivariateStandardizer, Standardizer, UnivariateBoxCoxTransformer,
31-
OneHotEncoder, ContinuousEncoder, FillImputer, UnivariateFillImputer
31+
OneHotEncoder, ContinuousEncoder, FillImputer, UnivariateFillImputer,
32+
UnivariateTimeTypeToContinuous
3233

3334
const srcdir = dirname(@__FILE__) # the directory containing this file
3435

src/builtins/Transformers.jl

Lines changed: 156 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
## CONSTANTS
1+
## CONSTANTS
22

33
const N_VALUES_THRESH = 16 # for BoxCoxTransformation
44

@@ -23,6 +23,10 @@ const CONTINUOUS_ENCODER_DESCR = "Convert all `Finite` (categorical) and "*
2323
"`Count` features (columns) of a table to `Continuous` and drop all "*
2424
" remaining non-`Continuous` features. "
2525
"features. "
26+
const UNIVARIATE_TIME_TYPE_TO_CONTINUOUS = "Transform univariate "*
27+
"data with element scitype `ScientificDateTime` so that it has "*
28+
"`Continuous` element scitype, according to a learned scale. "
29+
2630

2731
##
2832
## IMPUTER
@@ -433,10 +437,152 @@ MLJBase.inverse_transform(transformer::UnivariateStandardizer, fitresult, w) =
433437
[inverse_transform(transformer, fitresult, y) for y in w]
434438

435439

440+
## CONTINUOUS TRANSFORM OF TIME TYPE FEATURES
441+
442+
"""
443+
UnivariateTimeTypeToContinuous(zero_time=nothing, step=Hour(24))
444+
445+
Convert a `Date`, `DateTime`, and `Time` vector to `Float64` by
446+
assuming `0.0` corresponds to the `zero_time` parameter and the time
447+
increment to reach `1.0` is given by the `step` parameter. The type of
448+
`zero_time` should match the type of the column if provided. If not
449+
provided, then `zero_time` is inferred as the minimum time found in
450+
the data when `fit` is called.
451+
452+
"""
453+
mutable struct UnivariateTimeTypeToContinuous <: Unsupervised
454+
zero_time::Union{Nothing, TimeType}
455+
step::Period
456+
end
457+
458+
function UnivariateTimeTypeToContinuous(;
459+
zero_time=nothing, step=Dates.Hour(24))
460+
model = UnivariateTimeTypeToContinuous(zero_time, step)
461+
message = MLJBase.clean!(model)
462+
isempty(message) || @warn message
463+
return model
464+
end
465+
466+
function MLJBase.clean!(model::UnivariateTimeTypeToContinuous)
467+
# Step must be able to be added to zero_time if provided.
468+
msg = ""
469+
if model.zero_time !== nothing
470+
try
471+
tmp = model.zero_time + model.step
472+
catch err
473+
if err isa MethodError
474+
model.zero_time, model.step, status, msg = _fix_zero_time_step(
475+
model.zero_time, model.step)
476+
if status === :error
477+
# Unable to resolve, rethrow original error.
478+
throw(err)
479+
end
480+
else
481+
throw(err)
482+
end
483+
end
484+
end
485+
return msg
486+
end
487+
488+
function _fix_zero_time_step(zero_time, step)
489+
# Cannot add time parts to dates nor date parts to times.
490+
# If a mismatch is encountered. Conversion from date parts to time parts
491+
# is possible, but not from time parts to date parts because we cannot
492+
# represent fractional date parts.
493+
msg = ""
494+
if zero_time isa Dates.Date && step isa Dates.TimePeriod
495+
# Convert zero_time to a DateTime to resolve conflict.
496+
if step % Hour(24) === Hour(0)
497+
# We can convert step to Day safely
498+
msg = "Cannot add `TimePeriod` `step` to `Date` `zero_time`. Converting `step` to `Day`."
499+
step = convert(Day, step)
500+
else
501+
# We need datetime to be compatible with the step.
502+
msg = "Cannot add `TimePeriod` `step` to `Date` `zero_time`. Converting `zero_time` to `DateTime`."
503+
zero_time = convert(DateTime, zero_time)
504+
end
505+
return zero_time, step, :success, msg
506+
elseif zero_time isa Dates.Time && step isa Dates.DatePeriod
507+
# Convert step to Hour if possible. This will fail for
508+
# isa(step, Month)
509+
msg = "Cannot add `DatePeriod` `step` to `Time` `zero_time`. Converting `step` to `Hour`."
510+
step = convert(Hour, step)
511+
return zero_time, step, :success, msg
512+
else
513+
return zero_time, step, :error, msg
514+
end
515+
end
516+
517+
function MLJBase.fit(model::UnivariateTimeTypeToContinuous, verbosity::Int, X)
518+
if model.zero_time !== nothing
519+
min_dt = model.zero_time
520+
step = model.step
521+
# Check zero_time is compatible with X
522+
example = first(X)
523+
try
524+
X - min_dt
525+
catch err
526+
if err isa MethodError
527+
@warn "`$(typeof(min_dt))` `zero_time` is not compatible with `$(eltype(X))` vector. Attempting to convert `zero_time`."
528+
min_dt = convert(eltype(X), min_dt)
529+
else
530+
throw(err)
531+
end
532+
end
533+
else
534+
min_dt = minimum(X)
535+
step = model.step
536+
message = ""
537+
try
538+
min_dt + step
539+
catch err
540+
if err isa MethodError
541+
min_dt, step, status, message = _fix_zero_time_step(min_dt, step)
542+
if status === :error
543+
# Unable to resolve, rethrow original error.
544+
throw(err)
545+
end
546+
else
547+
throw(err)
548+
end
549+
end
550+
isempty(message) || @warn message
551+
end
552+
cache = nothing
553+
report = nothing
554+
fitresult = (min_dt, step)
555+
return fitresult, cache, report
556+
end
557+
558+
function MLJBase.transform(model::UnivariateTimeTypeToContinuous, fitresult, X)
559+
min_dt, step = fitresult
560+
if typeof(min_dt) eltype(X)
561+
# Cannot run if eltype in transform differs from zero_time from fit.
562+
throw(ArgumentError("Different `TimeType` encountered during `transform` than expected from `fit`. Found `$(eltype(X))`, expected `$(typeof(min_dt))`"))
563+
end
564+
# Set the size of a single step.
565+
next_time = min_dt + step
566+
if next_time == min_dt
567+
# Time type loops if step is a multiple of Hour(24), so calculate the
568+
# number of multiples, then re-scale to Hour(12) and adjust delta to match original.
569+
m = step / Dates.Hour(12)
570+
delta = m * (
571+
Float64(Dates.value(min_dt + Dates.Hour(12)) - Dates.value(min_dt)))
572+
else
573+
delta = Float64(Dates.value(min_dt + step) - Dates.value(min_dt))
574+
end
575+
return @. Float64(Dates.value(X - min_dt)) / delta
576+
end
577+
578+
436579
## STANDARDIZATION OF ORDINAL FEATURES OF TABULAR DATA
437580

438581
"""
439-
Standardizer(; features=Symbol[], ignore=false, ordered_factor=false, count=false)
582+
Standardizer(; features=Symbol[],
583+
ignore=false,
584+
ordered_factor=false,
585+
count=false)
440586
441587
Unsupervised model for standardizing (whitening) the columns of
442588
tabular data. If `features` is unspecified then all columns
@@ -1118,7 +1264,8 @@ metadata_pkg.(
11181264
(FeatureSelector, UnivariateStandardizer,
11191265
UnivariateDiscretizer, Standardizer,
11201266
UnivariateBoxCoxTransformer, UnivariateFillImputer,
1121-
OneHotEncoder, FillImputer, ContinuousEncoder),
1267+
OneHotEncoder, FillImputer, ContinuousEncoder,
1268+
UnivariateTimeTypeToContinuous),
11221269
name = "MLJModels",
11231270
uuid = "d491faf4-2d78-11e9-2867-c94bc002c0b7",
11241271
url = "https://github.com/alan-turing-institute/MLJModels.jl",
@@ -1192,4 +1339,9 @@ metadata_model(ContinuousEncoder,
11921339
descr = CONTINUOUS_ENCODER_DESCR,
11931340
path = "MLJModels.ContinuousEncoder")
11941341

1195-
1342+
metadata_model(UnivariateTimeTypeToContinuous,
1343+
input = AbstractVector{<:ScientificTypes.ScientificTimeType},
1344+
output = AbstractVector{Continuous},
1345+
weights = false,
1346+
descr = UNIVARIATE_TIME_TYPE_TO_CONTINUOUS,
1347+
path = "MLJModels.UnivariateTimeTypeToContinuous")

src/registry/Metadata.toml

Lines changed: 40 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
[NearestNeighbors.KNNClassifier]
33
":input_scitype" = "`ScientificTypes.Table{_s23} where _s23<:(AbstractArray{_s25,1} where _s25<:ScientificTypes.Continuous)`"
44
":output_scitype" = "`ScientificTypes.Unknown`"
5-
":target_scitype" = "`AbstractArray{_s105,1} where _s105<:ScientificTypes.Finite`"
5+
":target_scitype" = "`AbstractArray{_s99,1} where _s99<:ScientificTypes.Finite`"
66
":is_pure_julia" = "`true`"
77
":package_name" = "NearestNeighbors"
88
":package_license" = "MIT"
@@ -1850,7 +1850,7 @@
18501850
[NaiveBayes.GaussianNBClassifier]
18511851
":input_scitype" = "`ScientificTypes.Table{_s23} where _s23<:(AbstractArray{_s25,1} where _s25<:ScientificTypes.Continuous)`"
18521852
":output_scitype" = "`ScientificTypes.Unknown`"
1853-
":target_scitype" = "`AbstractArray{_s104,1} where _s104<:ScientificTypes.Finite`"
1853+
":target_scitype" = "`AbstractArray{_s173,1} where _s173<:ScientificTypes.Finite`"
18541854
":is_pure_julia" = "`true`"
18551855
":package_name" = "NaiveBayes"
18561856
":package_license" = "unknown"
@@ -1872,7 +1872,7 @@
18721872
[NaiveBayes.MultinomialNBClassifier]
18731873
":input_scitype" = "`ScientificTypes.Table{_s23} where _s23<:(AbstractArray{_s25,1} where _s25<:ScientificTypes.Count)`"
18741874
":output_scitype" = "`ScientificTypes.Unknown`"
1875-
":target_scitype" = "`AbstractArray{_s104,1} where _s104<:ScientificTypes.Finite`"
1875+
":target_scitype" = "`AbstractArray{_s173,1} where _s173<:ScientificTypes.Finite`"
18761876
":is_pure_julia" = "`true`"
18771877
":package_name" = "NaiveBayes"
18781878
":package_license" = "unknown"
@@ -2064,13 +2064,13 @@
20642064
":prediction_type" = ":unknown"
20652065
":implemented_methods" = [":clean!", ":fit", ":fitted_params", ":transform"]
20662066
":hyperparameters" = "`(:k, :alg, :fun, :do_whiten, :maxiter, :tol, :winit, :mean)`"
2067-
":hyperparameter_types" = "`(\"Int64\", \"Symbol\", \"Symbol\", \"Bool\", \"Int64\", \"Real\", \"Union{Nothing, Array{_s197,2} where _s197<:Real}\", \"Union{Nothing, Array{Float64,1}, Real}\")`"
2067+
":hyperparameter_types" = "`(\"Int64\", \"Symbol\", \"Symbol\", \"Bool\", \"Int64\", \"Real\", \"Union{Nothing, Array{_s148,2} where _s148<:Real}\", \"Union{Nothing, Array{Float64,1}, Real}\")`"
20682068
":hyperparameter_ranges" = "`(nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing)`"
20692069

20702070
[MultivariateStats.BayesianLDA]
20712071
":input_scitype" = "`ScientificTypes.Table{_s23} where _s23<:(AbstractArray{_s25,1} where _s25<:ScientificTypes.Continuous)`"
20722072
":output_scitype" = "`ScientificTypes.Table{_s23} where _s23<:(AbstractArray{_s25,1} where _s25<:ScientificTypes.Continuous)`"
2073-
":target_scitype" = "`AbstractArray{_s226,1} where _s226<:ScientificTypes.Finite`"
2073+
":target_scitype" = "`AbstractArray{_s174,1} where _s174<:ScientificTypes.Finite`"
20742074
":is_pure_julia" = "`true`"
20752075
":package_name" = "MultivariateStats"
20762076
":package_license" = "MIT"
@@ -2092,7 +2092,7 @@
20922092
[MultivariateStats.BayesianSubspaceLDA]
20932093
":input_scitype" = "`ScientificTypes.Table{_s23} where _s23<:(AbstractArray{_s25,1} where _s25<:ScientificTypes.Continuous)`"
20942094
":output_scitype" = "`ScientificTypes.Table{_s23} where _s23<:(AbstractArray{_s25,1} where _s25<:ScientificTypes.Continuous)`"
2095-
":target_scitype" = "`AbstractArray{_s226,1} where _s226<:ScientificTypes.Finite`"
2095+
":target_scitype" = "`AbstractArray{_s174,1} where _s174<:ScientificTypes.Finite`"
20962096
":is_pure_julia" = "`true`"
20972097
":package_name" = "MultivariateStats"
20982098
":package_license" = "MIT"
@@ -2158,7 +2158,7 @@
21582158
[MultivariateStats.LDA]
21592159
":input_scitype" = "`ScientificTypes.Table{_s23} where _s23<:(AbstractArray{_s25,1} where _s25<:ScientificTypes.Continuous)`"
21602160
":output_scitype" = "`ScientificTypes.Table{_s23} where _s23<:(AbstractArray{_s25,1} where _s25<:ScientificTypes.Continuous)`"
2161-
":target_scitype" = "`AbstractArray{_s226,1} where _s226<:ScientificTypes.Finite`"
2161+
":target_scitype" = "`AbstractArray{_s174,1} where _s174<:ScientificTypes.Finite`"
21622162
":is_pure_julia" = "`true`"
21632163
":package_name" = "MultivariateStats"
21642164
":package_license" = "MIT"
@@ -2202,7 +2202,7 @@
22022202
[MultivariateStats.SubspaceLDA]
22032203
":input_scitype" = "`ScientificTypes.Table{_s23} where _s23<:(AbstractArray{_s25,1} where _s25<:ScientificTypes.Continuous)`"
22042204
":output_scitype" = "`ScientificTypes.Table{_s23} where _s23<:(AbstractArray{_s25,1} where _s25<:ScientificTypes.Continuous)`"
2205-
":target_scitype" = "`AbstractArray{_s226,1} where _s226<:ScientificTypes.Finite`"
2205+
":target_scitype" = "`AbstractArray{_s174,1} where _s174<:ScientificTypes.Finite`"
22062206
":is_pure_julia" = "`true`"
22072207
":package_name" = "MultivariateStats"
22082208
":package_license" = "MIT"
@@ -2224,7 +2224,7 @@
22242224
[DecisionTree.AdaBoostStumpClassifier]
22252225
":input_scitype" = "`ScientificTypes.Table{_s23} where _s23<:Union{AbstractArray{_s25,1} where _s25<:ScientificTypes.Continuous, AbstractArray{_s25,1} where _s25<:ScientificTypes.Count, AbstractArray{_s25,1} where _s25<:ScientificTypes.OrderedFactor}`"
22262226
":output_scitype" = "`ScientificTypes.Unknown`"
2227-
":target_scitype" = "`AbstractArray{_s226,1} where _s226<:ScientificTypes.Finite`"
2227+
":target_scitype" = "`AbstractArray{_s174,1} where _s174<:ScientificTypes.Finite`"
22282228
":is_pure_julia" = "`true`"
22292229
":package_name" = "DecisionTree"
22302230
":package_license" = "MIT"
@@ -2268,7 +2268,7 @@
22682268
[DecisionTree.DecisionTreeClassifier]
22692269
":input_scitype" = "`ScientificTypes.Table{_s23} where _s23<:Union{AbstractArray{_s25,1} where _s25<:ScientificTypes.Continuous, AbstractArray{_s25,1} where _s25<:ScientificTypes.Count, AbstractArray{_s25,1} where _s25<:ScientificTypes.OrderedFactor}`"
22702270
":output_scitype" = "`ScientificTypes.Unknown`"
2271-
":target_scitype" = "`AbstractArray{_s226,1} where _s226<:ScientificTypes.Finite`"
2271+
":target_scitype" = "`AbstractArray{_s174,1} where _s174<:ScientificTypes.Finite`"
22722272
":is_pure_julia" = "`true`"
22732273
":package_name" = "DecisionTree"
22742274
":package_license" = "MIT"
@@ -2312,7 +2312,7 @@
23122312
[DecisionTree.RandomForestClassifier]
23132313
":input_scitype" = "`ScientificTypes.Table{_s23} where _s23<:Union{AbstractArray{_s25,1} where _s25<:ScientificTypes.Continuous, AbstractArray{_s25,1} where _s25<:ScientificTypes.Count, AbstractArray{_s25,1} where _s25<:ScientificTypes.OrderedFactor}`"
23142314
":output_scitype" = "`ScientificTypes.Unknown`"
2315-
":target_scitype" = "`AbstractArray{_s226,1} where _s226<:ScientificTypes.Finite`"
2315+
":target_scitype" = "`AbstractArray{_s174,1} where _s174<:ScientificTypes.Finite`"
23162316
":is_pure_julia" = "`true`"
23172317
":package_name" = "DecisionTree"
23182318
":package_license" = "MIT"
@@ -2422,7 +2422,7 @@
24222422
[XGBoost.XGBoostClassifier]
24232423
":input_scitype" = "`ScientificTypes.Table{_s23} where _s23<:(AbstractArray{_s25,1} where _s25<:ScientificTypes.Continuous)`"
24242424
":output_scitype" = "`ScientificTypes.Unknown`"
2425-
":target_scitype" = "`AbstractArray{_s492,1} where _s492<:ScientificTypes.Finite`"
2425+
":target_scitype" = "`AbstractArray{_s472,1} where _s472<:ScientificTypes.Finite`"
24262426
":is_pure_julia" = "`false`"
24272427
":package_name" = "XGBoost"
24282428
":package_license" = "unknown"
@@ -2444,7 +2444,7 @@
24442444
[LightGBM.LGBMClassifier]
24452445
":input_scitype" = "`ScientificTypes.Table{_s23} where _s23<:(AbstractArray{_s25,1} where _s25<:ScientificTypes.Continuous)`"
24462446
":output_scitype" = "`ScientificTypes.Unknown`"
2447-
":target_scitype" = "`AbstractArray{_s576,1} where _s576<:ScientificTypes.Finite`"
2447+
":target_scitype" = "`AbstractArray{_s565,1} where _s565<:ScientificTypes.Finite`"
24482448
":is_pure_julia" = "`false`"
24492449
":package_name" = "LightGBM"
24502450
":package_license" = "MIT Expat"
@@ -2639,6 +2639,28 @@
26392639
":hyperparameter_types" = "``"
26402640
":hyperparameter_ranges" = "``"
26412641

2642+
[MLJModels.UnivariateTimeTypeToContinuous]
2643+
":input_scitype" = "`AbstractArray{_s55,1} where _s55<:ScientificTypes.ScientificTimeType`"
2644+
":output_scitype" = "`AbstractArray{ScientificTypes.Continuous,1}`"
2645+
":target_scitype" = "`ScientificTypes.Unknown`"
2646+
":is_pure_julia" = "`true`"
2647+
":package_name" = "MLJModels"
2648+
":package_license" = "MIT"
2649+
":load_path" = "MLJModels.UnivariateTimeTypeToContinuous"
2650+
":package_uuid" = "d491faf4-2d78-11e9-2867-c94bc002c0b7"
2651+
":package_url" = "https://github.com/alan-turing-institute/MLJModels.jl"
2652+
":is_wrapper" = "`false`"
2653+
":supports_weights" = "`false`"
2654+
":supports_online" = "`false`"
2655+
":docstring" = "Transform univariate data with element scitype `ScientificDateTime` so that it has `Continuous` element scitype, according to a learned scale. \n→ based on [MLJModels](https://github.com/alan-turing-institute/MLJModels.jl).\n→ do `@load UnivariateTimeTypeToContinuous pkg=\"MLJModels\"` to use the model.\n→ do `?UnivariateTimeTypeToContinuous` for documentation."
2656+
":name" = "UnivariateTimeTypeToContinuous"
2657+
":is_supervised" = "`false`"
2658+
":prediction_type" = ":unknown"
2659+
":implemented_methods" = [":clean!", ":fit", ":transform"]
2660+
":hyperparameters" = "`(:zero_time, :step)`"
2661+
":hyperparameter_types" = "`(\"Union{Nothing, Dates.TimeType}\", \"Dates.Period\")`"
2662+
":hyperparameter_ranges" = "`(nothing, nothing)`"
2663+
26422664
[MLJModels.OneHotEncoder]
26432665
":input_scitype" = "`ScientificTypes.Table`"
26442666
":output_scitype" = "`ScientificTypes.Table`"
@@ -2884,7 +2906,7 @@
28842906
[LIBSVM.LinearSVC]
28852907
":input_scitype" = "`ScientificTypes.Table{_s23} where _s23<:(AbstractArray{_s25,1} where _s25<:ScientificTypes.Continuous)`"
28862908
":output_scitype" = "`ScientificTypes.Unknown`"
2887-
":target_scitype" = "`AbstractArray{_s575,1} where _s575<:ScientificTypes.Finite`"
2909+
":target_scitype" = "`AbstractArray{_s564,1} where _s564<:ScientificTypes.Finite`"
28882910
":is_pure_julia" = "`false`"
28892911
":package_name" = "LIBSVM"
28902912
":package_license" = "unknown"
@@ -2928,7 +2950,7 @@
29282950
[LIBSVM.NuSVC]
29292951
":input_scitype" = "`ScientificTypes.Table{_s23} where _s23<:(AbstractArray{_s25,1} where _s25<:ScientificTypes.Continuous)`"
29302952
":output_scitype" = "`ScientificTypes.Unknown`"
2931-
":target_scitype" = "`AbstractArray{_s575,1} where _s575<:ScientificTypes.Finite`"
2953+
":target_scitype" = "`AbstractArray{_s564,1} where _s564<:ScientificTypes.Finite`"
29322954
":is_pure_julia" = "`false`"
29332955
":package_name" = "LIBSVM"
29342956
":package_license" = "unknown"
@@ -2950,7 +2972,7 @@
29502972
[LIBSVM.SVC]
29512973
":input_scitype" = "`ScientificTypes.Table{_s23} where _s23<:(AbstractArray{_s25,1} where _s25<:ScientificTypes.Continuous)`"
29522974
":output_scitype" = "`ScientificTypes.Unknown`"
2953-
":target_scitype" = "`AbstractArray{_s575,1} where _s575<:ScientificTypes.Finite`"
2975+
":target_scitype" = "`AbstractArray{_s564,1} where _s564<:ScientificTypes.Finite`"
29542976
":is_pure_julia" = "`false`"
29552977
":package_name" = "LIBSVM"
29562978
":package_license" = "unknown"
@@ -2971,7 +2993,7 @@
29712993

29722994
[LIBSVM.OneClassSVM]
29732995
":input_scitype" = "`ScientificTypes.Table{_s23} where _s23<:(AbstractArray{_s25,1} where _s25<:ScientificTypes.Continuous)`"
2974-
":output_scitype" = "`AbstractArray{_s575,1} where _s575<:ScientificTypes.Finite{2}`"
2996+
":output_scitype" = "`AbstractArray{_s564,1} where _s564<:ScientificTypes.Finite{2}`"
29752997
":target_scitype" = "`ScientificTypes.Unknown`"
29762998
":is_pure_julia" = "`false`"
29772999
":package_name" = "LIBSVM"
@@ -2994,7 +3016,7 @@
29943016
[GLM.LinearBinaryClassifier]
29953017
":input_scitype" = "`ScientificTypes.Table{_s23} where _s23<:(AbstractArray{_s25,1} where _s25<:ScientificTypes.Continuous)`"
29963018
":output_scitype" = "`ScientificTypes.Unknown`"
2997-
":target_scitype" = "`AbstractArray{_s576,1} where _s576<:ScientificTypes.Finite{2}`"
3019+
":target_scitype" = "`AbstractArray{_s565,1} where _s565<:ScientificTypes.Finite{2}`"
29983020
":is_pure_julia" = "`true`"
29993021
":package_name" = "GLM"
30003022
":package_license" = "MIT"

0 commit comments

Comments
 (0)