LearningCore
Imports
open List;
open Tuple;
open Pair;
import Tensor (Vector);
Types
Functions
def read_csv (path : String) : {df : DataFrame | df_cols df ≥ 1 && df_rows df ≥ 0}
def target (1 df : DataFrame) (column : String) (temporal : Bool) (missing : Bool) : {
ds : Dataset | ds_rows ds = df_rows df
&&
ds_features ds = df_cols df - 1
&&
ds_target ds column = true
&&
is_timeseries ds = temporal && has_missing ds = missing && coupled ds = false && independent_target ds = true
}
def target_at (1 df : DataFrame) (index : Int | index ≥ 0 && index < df_cols df) (temporal : Bool) (missing : Bool) : {
ds : Dataset | ds_rows ds = df_rows df
&&
ds_features ds = df_cols df - 1
&&
is_timeseries ds = temporal && has_missing ds = missing && coupled ds = false && independent_target ds = true
}
def load (path : String) (temporal : Bool) (missing : Bool) : {
ds : Dataset | ds_features ds ≥ 0
&&
ds_rows ds ≥ 0
&&
is_timeseries ds = temporal && has_missing ds = missing && coupled ds = false && independent_target ds = true
}
def create_dataset (rows : Int | rows ≥ 0) (features : Int | features ≥ 0) (bal : Bool) (temporal : Bool) (missing : Bool) : {
ds : Dataset | ds_rows ds = rows
&&
ds_features ds = features
&&
is_balanced ds = bal
&&
is_timeseries ds = temporal && has_missing ds = missing && coupled ds = false && independent_target ds = true
}
def require_enough_data (1 ds : Dataset) : {d : Dataset | d = ds && ds_rows d > ds_features d * 10}
def columns (borrow df : DataFrame) : List
def has_column (borrow df : DataFrame) (column : String) : Bool
def n_columns (borrow df : DataFrame) : {n : Int | n = df_cols df && n ≥ 0}
def n_rows (borrow ds : Dataset) : {n : Int | n = ds_rows ds && n ≥ 0}
def n_features (borrow ds : Dataset) : {n : Int | n = ds_features ds && n ≥ 0}
def balanced (borrow ds : Dataset) : {b : Bool | b = is_balanced ds}
def is_nonempty (borrow ds : Dataset) : {b : Bool | b = ds_rows ds > 0}
def is_splittable (borrow ds : Dataset) : {b : Bool | b = ds_rows ds ≥ 2}
def is_multiclass (borrow ds : Dataset) : {b : Bool | b = ds_classes ds ≥ 2}
def class_counts (borrow ds : Dataset) : List
def split (1 ds : Dataset | ds_rows ds > ds_features ds * 10) (fraction : Float | 0.0 < fraction && fraction < 1.0) (shuffle : Bool) : {
p : DatasetPair | ds_features (dataset_left p) = ds_features ds
&&
ds_features (dataset_right p) = ds_features ds
&&
ds_classes (dataset_left p) = ds_classes ds
&&
ds_classes (dataset_right p) = ds_classes ds
&&
is_timeseries (dataset_left p) = is_timeseries ds
&&
is_timeseries (dataset_right p) = is_timeseries ds
&&
has_missing (dataset_left p) = has_missing ds
&&
has_missing (dataset_right p) = has_missing ds
&&
coupled (dataset_left p) = coupled ds
&&
coupled (dataset_right p) = coupled ds
&&
independent_target (dataset_left p) = independent_target ds
&&
independent_target (dataset_right p) = independent_target ds
&&
--> shuffle (is_balanced (dataset_left p) = is_balanced ds)
&&
--> shuffle (is_balanced (dataset_right p) = is_balanced ds)
&&
clean_test (dataset_right p) = (coupled ds = false && --> (is_timeseries ds) (shuffle = false))
}
def train_of (1 p : DatasetPair) : {d : Dataset | d = dataset_left p}
def test_of (1 p : DatasetPair) : {d : Dataset | d = dataset_right p}
def copy_dataset (1 ds : Dataset) : {
p : DatasetPair | ds_rows (dataset_left p) = ds_rows ds
&&
ds_rows (dataset_right p) = ds_rows ds
&&
ds_features (dataset_left p) = ds_features ds
&&
ds_features (dataset_right p) = ds_features ds
&&
ds_classes (dataset_left p) = ds_classes ds
&&
ds_classes (dataset_right p) = ds_classes ds
&&
is_balanced (dataset_left p) = is_balanced ds
&&
is_balanced (dataset_right p) = is_balanced ds
&&
is_timeseries (dataset_left p) = is_timeseries ds
&&
is_timeseries (dataset_right p) = is_timeseries ds
&&
has_missing (dataset_left p) = has_missing ds
&&
has_missing (dataset_right p) = has_missing ds
&&
coupled (dataset_left p) = coupled ds
&&
coupled (dataset_right p) = coupled ds
&&
independent_target (dataset_left p) = independent_target ds
&&
independent_target (dataset_right p) = independent_target ds
&&
clean_test (dataset_left p) = clean_test ds && clean_test (dataset_right p) = clean_test ds
}
def fst_dataset (1 p : DatasetPair) : {d : Dataset | d = dataset_left p}
def snd_dataset (1 p : DatasetPair) : {d : Dataset | d = dataset_right p}
def smote (1 ds : Dataset | ds_classes ds ≥ 2) : {
out : Dataset | is_balanced out = true
&&
ds_features out = ds_features ds
&&
ds_classes out = ds_classes ds
&&
ds_rows out ≥ ds_rows ds
&&
coupled out = true
&&
has_missing out = has_missing ds
&&
is_timeseries out = is_timeseries ds && independent_target out = independent_target ds
}
def random_oversample (1 ds : Dataset | ds_classes ds ≥ 2) : {
out : Dataset | is_balanced out = true
&&
ds_features out = ds_features ds
&&
ds_classes out = ds_classes ds
&&
ds_rows out ≥ ds_rows ds
&&
coupled out = true
&&
has_missing out = has_missing ds
&&
is_timeseries out = is_timeseries ds && independent_target out = independent_target ds
}
def random_undersample (1 ds : Dataset | ds_classes ds ≥ 2) : {
out : Dataset | is_balanced out = true
&&
ds_features out = ds_features ds
&&
ds_classes out = ds_classes ds
&&
ds_rows out ≤ ds_rows ds
&&
coupled out = true
&&
has_missing out = has_missing ds
&&
is_timeseries out = is_timeseries ds && independent_target out = independent_target ds
}
def standard_scale (1 ds : Dataset) : {
out : Dataset | ds_rows out = ds_rows ds
&&
ds_features out = ds_features ds
&&
ds_classes out = ds_classes ds
&&
is_balanced out = is_balanced ds
&&
coupled out = true
&&
has_missing out = has_missing ds
&&
is_timeseries out = is_timeseries ds && independent_target out = independent_target ds && clean_test out = clean_test ds
}
def minmax_scale (1 ds : Dataset) : {
out : Dataset | ds_rows out = ds_rows ds
&&
ds_features out = ds_features ds
&&
ds_classes out = ds_classes ds
&&
is_balanced out = is_balanced ds
&&
coupled out = true
&&
has_missing out = has_missing ds
&&
is_timeseries out = is_timeseries ds && independent_target out = independent_target ds && clean_test out = clean_test ds
}
def robust_scale (1 ds : Dataset) : {
out : Dataset | ds_rows out = ds_rows ds
&&
ds_features out = ds_features ds
&&
ds_classes out = ds_classes ds
&&
is_balanced out = is_balanced ds
&&
coupled out = true
&&
has_missing out = has_missing ds
&&
is_timeseries out = is_timeseries ds && independent_target out = independent_target ds && clean_test out = clean_test ds
}
def fill_mean (1 ds : Dataset) : {
out : Dataset | ds_rows out = ds_rows ds
&&
ds_features out = ds_features ds
&&
ds_classes out = ds_classes ds
&&
is_balanced out = is_balanced ds
&&
has_missing out = false
&&
coupled out = true
&&
is_timeseries out = is_timeseries ds && independent_target out = independent_target ds && clean_test out = clean_test ds
}
def fill_most_frequent (1 ds : Dataset) : {
out : Dataset | ds_rows out = ds_rows ds
&&
ds_features out = ds_features ds
&&
ds_classes out = ds_classes ds
&&
is_balanced out = is_balanced ds
&&
has_missing out = false
&&
coupled out = true
&&
is_timeseries out = is_timeseries ds && independent_target out = independent_target ds && clean_test out = clean_test ds
}
def fill_constant (value : Float) (1 ds : Dataset) : {
out : Dataset | ds_rows out = ds_rows ds
&&
ds_features out = ds_features ds
&&
ds_classes out = ds_classes ds
&&
is_balanced out = is_balanced ds
&&
has_missing out = false
&&
coupled out = true
&&
is_timeseries out = is_timeseries ds && independent_target out = independent_target ds && clean_test out = clean_test ds
}
def predict (model : SklearnClassifier) (1 ds : Dataset | clf_features model = ds_features ds) : List
def predict_proba (model : SklearnClassifier) (1 ds : Dataset | clf_features model = ds_features ds) : List
def predict_value (model : SklearnRegressor) (1 ds : Dataset | reg_features model = ds_features ds) : List
def accuracy (model : SklearnClassifier) (1 ds : Dataset | clf_features model = ds_features ds && clean_test ds = true && is_balanced ds = true) : {f : Float | 0.0 ≤ f && f ≤ 1.0}
def precision (model : SklearnClassifier) (1 ds : Dataset | clf_features model = ds_features ds && clean_test ds = true && is_balanced ds = true) : {f : Float | 0.0 ≤ f && f ≤ 1.0}
def recall (model : SklearnClassifier) (1 ds : Dataset | clf_features model = ds_features ds && clean_test ds = true && is_balanced ds = true) : {f : Float | 0.0 ≤ f && f ≤ 1.0}
def f1 (model : SklearnClassifier) (1 ds : Dataset | clf_features model = ds_features ds && clean_test ds = true) : {f : Float | 0.0 ≤ f && f ≤ 1.0}
def roc_auc (model : SklearnClassifier) (1 ds : Dataset | clf_features model = ds_features ds && clean_test ds = true) : {f : Float | 0.0 ≤ f && f ≤ 1.0}
def confusion_matrix (model : SklearnClassifier) (1 ds : Dataset | clf_features model = ds_features ds && clean_test ds = true) : List
def classification_report (model : SklearnClassifier) (1 ds : Dataset | clf_features model = ds_features ds && clean_test ds = true) : String
def mse (model : SklearnRegressor) (1 ds : Dataset | reg_features model = ds_features ds && clean_test ds = true) : {f : Float | f ≥ 0.0}
def rmse (model : SklearnRegressor) (1 ds : Dataset | reg_features model = ds_features ds && clean_test ds = true) : {f : Float | f ≥ 0.0}
def mae (model : SklearnRegressor) (1 ds : Dataset | reg_features model = ds_features ds && clean_test ds = true) : {f : Float | f ≥ 0.0}
def r2 (model : SklearnRegressor) (1 ds : Dataset | reg_features model = ds_features ds && clean_test ds = true) : Float
def explained_variance (model : SklearnRegressor) (1 ds : Dataset | reg_features model = ds_features ds && clean_test ds = true) : Float
def classify_one (model : SklearnClassifier) (x : Vector) : Vector
def regress_one (model : SklearnRegressor) (x : Vector) : Float
def clf_n_features (model : SklearnClassifier) : {n : Int | n = clf_features model && n ≥ 0}
def clf_n_classes (model : SklearnClassifier) : {n : Int | n = clf_classes model && n ≥ 0}
def reg_n_features (model : SklearnRegressor) : {n : Int | n = reg_features model && n ≥ 0}
def dispose_dataset (1 ds : Dataset) : Unit
def dispose_dataframe (1 df : DataFrame) : Unit
def with_datasets (1 token : DatasetPair) (1 consume : (1 left : Dataset | left = dataset_left token) → (1 right : Dataset | right = dataset_right token) → b) : b
Uninterpreted
Functions declared as def f ... = uninterpreted: only their signature is known to the verifier; they have no body.
def dataset_left : (p : DatasetPair) → Dataset
def dataset_right : (p : DatasetPair) → Dataset
def df_rows : (df : DataFrame) → Int
def df_cols : (df : DataFrame) → Int
def ds_rows : (ds : Dataset) → Int
def ds_features : (ds : Dataset) → Int
def ds_classes : (ds : Dataset) → Int
def is_balanced : (ds : Dataset) → Bool
def clf_features : (m : SklearnClassifier) → Int
def clf_classes : (m : SklearnClassifier) → Int
def reg_features : (m : SklearnRegressor) → Int
def is_timeseries : (ds : Dataset) → Bool
def has_missing : (ds : Dataset) → Bool
def coupled : (ds : Dataset) → Bool
def clean_test : (ds : Dataset) → Bool
def independent_target : (ds : Dataset) → Bool
def ds_target : (ds : Dataset) → (name : String) → Bool