Exemplo n.º 1
0
def test_classification_functionality(shape_descriptor_function):

    X_train, y_train = load_italy_power_demand(split="train", return_X_y=True)
    X_test, y_test = load_italy_power_demand(split="test", return_X_y=True)

    shp = ShapeDTW(shape_descriptor_function=shape_descriptor_function)
    shp.fit(X_train, y_train)
    assert shp.score(X_test, y_test) > 0
Exemplo n.º 2
0
def test_shape_descriptor_function(bad_sdf):
    X = _make_nested_from_array(np.ones(10), n_instances=10, n_columns=1)
    y = np.zeros(10)

    if not isinstance(bad_sdf, str):
        with pytest.raises(TypeError):
            ShapeDTW(shape_descriptor_function=bad_sdf).fit(X, y)
    else:
        with pytest.raises(ValueError):
            ShapeDTW(shape_descriptor_function=bad_sdf).fit(X, y)
Exemplo n.º 3
0
def test_subsequence_length(bad_subsequence_length):
    X = _make_nested_from_array(np.ones(10), n_instances=10, n_columns=1)
    y = np.zeros(10)

    if not isinstance(bad_subsequence_length, int):
        with pytest.raises(TypeError):
            ShapeDTW(subsequence_length=bad_subsequence_length).fit(X, y)
    else:
        with pytest.raises(ValueError):
            ShapeDTW(subsequence_length=bad_subsequence_length).fit(X, y)
Exemplo n.º 4
0
def test_subsequence_length(bad_subsequence_length):
    X = generate_df_from_array(np.ones(10), n_rows=10, n_cols=1)
    y = np.zeros(10)

    if not isinstance(bad_subsequence_length, int):
        with pytest.raises(TypeError):
            ShapeDTW(subsequence_length=bad_subsequence_length).fit(X, y)
    else:
        with pytest.raises(ValueError):
            ShapeDTW(subsequence_length=bad_subsequence_length).fit(X, y)
Exemplo n.º 5
0
def test_shape_descriptor_functions(bad_sdfs):
    X = generate_df_from_array(np.ones(10), n_rows=10, n_cols=1)
    y = np.zeros(10)

    if not len(bad_sdfs) == 2:
        with pytest.raises(ValueError):
            ShapeDTW(shape_descriptor_function="compound",
                     shape_descriptor_functions=bad_sdfs).fit(X, y)
    else:
        ShapeDTW(shape_descriptor_function="compound",
                 shape_descriptor_functions=bad_sdfs).fit(X, y)
Exemplo n.º 6
0
def test_shape_descriptor_functions(bad_sdfs):
    X = _make_nested_from_array(np.ones(10), n_instances=10, n_columns=1)
    y = np.zeros(10)

    if not len(bad_sdfs) == 2:
        with pytest.raises(ValueError):
            ShapeDTW(
                shape_descriptor_function="compound",
                shape_descriptor_functions=bad_sdfs,
            ).fit(X, y)
    else:
        ShapeDTW(shape_descriptor_function="compound",
                 shape_descriptor_functions=bad_sdfs).fit(X, y)
Exemplo n.º 7
0
def set_classifier(cls, resampleId):
    """
    Basic way of determining the classifier to build. To differentiate settings just and another elif. So, for example, if
    you wanted tuned TSF, you just pass TuneTSF and set up the tuning mechanism in the elif.
    This may well get superceded, it is just how e have always done it
    :param cls: String indicating which classifier you want
    :return: A classifier.

    """
    if cls.lower() == "pf":
        return pf.ProximityForest(random_state=resampleId)
    elif cls.lower() == "pt":
        return pf.ProximityTree(random_state=resampleId)
    elif cls.lower() == "ps":
        return pf.ProximityStump(random_state=resampleId)
    elif cls.lower() == "rise":
        return fb.RandomIntervalSpectralForest(random_state=resampleId)
    elif cls.lower() == "tsf":
        return ib.TimeSeriesForest(random_state=resampleId)
    elif cls.lower() == "boss":
        return db.BOSSEnsemble()
    elif cls.lower() == "st":
        return st.ShapeletTransformClassifier(time_contract_in_mins=1500)
    elif cls.lower() == "dtw":
        return nn.KNeighborsTimeSeriesClassifier(metric="dtw")
    elif cls.lower() == "ee" or cls.lower() == "elasticensemble":
        return dist.ElasticEnsemble()
    elif cls.lower() == "shapedtw_raw":
        return ShapeDTW(subsequence_length=30,
                        shape_descriptor_function="raw",
                        metric_params=None)
    elif cls.lower() == "shapedtw_dwt":
        return ShapeDTW(
            subsequence_length=30,
            shape_descriptor_function="dwt",
            metric_params={"num_levels_dwt": 3},
        )
    elif cls.lower() == "shapedtw_paa":
        return ShapeDTW(
            subsequence_length=30,
            shape_descriptor_function="paa",
            metric_params={"num_intervals_paa": 5},
        )
    elif cls.lower() == "shapedtw_slope":
        return ShapeDTW(
            subsequence_length=30,
            shape_descriptor_function="slope",
            metric_params={"num_intervals_slope": 5},
        )
    elif cls.lower() == "shapedtw_hog1d":
        return ShapeDTW(
            subsequence_length=30,
            shape_descriptor_function="hog1d",
            metric_params={
                "num_bins_hog1d": 8,
                "num_intervals_hog1d": 2,
                "scaling_factor_hog1d": 0.1,
            },
        )
    elif cls.lower() == "tsfcomposite":
        # It defaults to TSF
        return ensemble.TimeSeriesForestClassifier()
    elif cls.lower() == "risecomposite":
        steps = [
            ("segment", RandomIntervalSegmenter(n_intervals=1, min_length=5)),
            (
                "transform",
                FeatureUnion([
                    (
                        "acf",
                        make_row_transformer(
                            FunctionTransformer(func=acf_coefs,
                                                validate=False)),
                    ),
                    (
                        "ps",
                        make_row_transformer(
                            FunctionTransformer(func=powerspectrum,
                                                validate=False)),
                    ),
                ]),
            ),
            ("tabularise", Tabularizer()),
            ("clf", DecisionTreeClassifier()),
        ]
        base_estimator = Pipeline(steps)
        return ensemble.TimeSeriesForestClassifier(estimator=base_estimator,
                                                   n_estimators=100)
    else:
        raise Exception("UNKNOWN CLASSIFIER")
Exemplo n.º 8
0
def test_metric_params():

    X = _make_nested_from_array(np.ones(10), n_instances=10, n_columns=1)
    y = np.zeros(10)

    # test the raw shape descriptor
    shp = ShapeDTW()
    assert shp._get_transformer("rAw") is None

    # test the paa shape descriptor
    shp = ShapeDTW(metric_params={"num_intERvals_paa": 3})
    assert shp._get_transformer("pAA").num_intervals == 3
    shp = ShapeDTW()
    assert shp._get_transformer("pAA").num_intervals == 8
    assert isinstance(shp._get_transformer("paa"), PAA)

    # test the dwt shape descriptor
    assert shp._get_transformer("dWt").num_levels == 3
    shp = ShapeDTW(metric_params={"num_LEvEls_dwt": 5})
    assert shp._get_transformer("Dwt").num_levels == 5
    assert isinstance(shp._get_transformer("dwt"), DWTTransformer)

    # test the slope shape descriptor
    shp = ShapeDTW()
    assert shp._get_transformer("sLoPe").num_intervals == 8
    shp = ShapeDTW(metric_params={"num_inTErvals_slope": 2})
    assert shp._get_transformer("slope").num_intervals == 2
    assert isinstance(shp._get_transformer("slope"), SlopeTransformer)

    # test the derivative shape descriptor
    shp = ShapeDTW()
    assert isinstance(shp._get_transformer("derivative"),
                      DerivativeSlopeTransformer)

    # test the hog1d shape descriptor
    assert (shp._get_transformer("hOG1d").num_intervals == 2
            and shp._get_transformer("hOG1d").num_bins == 8
            and shp._get_transformer("hog1d").scaling_factor == 0.1)

    # test hog1d with only 1 custom parameter
    shp = ShapeDTW(metric_params={"NUM_intervals_hog1d": 5})
    assert (shp._get_transformer("hoG1d").num_intervals == 5
            and shp._get_transformer("hOG1d").num_bins == 8
            and shp._get_transformer("hog1d").scaling_factor == 0.1)

    shp = ShapeDTW(metric_params={"nUM_BinS_hog1d": 63})
    assert (shp._get_transformer("hoG1d").num_intervals == 2
            and shp._get_transformer("hOG1d").num_bins == 63
            and shp._get_transformer("hog1d").scaling_factor == 0.1)

    shp = ShapeDTW(metric_params={"scaling_factor_hog1d": 0.5})
    assert (shp._get_transformer("hoG1d").num_intervals == 2
            and shp._get_transformer("hOG1d").num_bins == 8
            and shp._get_transformer("hog1d").scaling_factor == 0.5)

    # test hog1d with 2 custom parameters
    shp = ShapeDTW(metric_params={
        "NUM_intervals_hog1d": 5,
        "nUM_BinS_hog1d": 63
    })
    assert (shp._get_transformer("hoG1d").num_intervals == 5
            and shp._get_transformer("hOG1d").num_bins == 63
            and shp._get_transformer("hog1d").scaling_factor == 0.1)

    shp = ShapeDTW(metric_params={
        "NUM_bins_hog1d": 63,
        "scaling_factor_hog1d": 0.5
    })
    assert (shp._get_transformer("hoG1d").num_intervals == 2
            and shp._get_transformer("hOG1d").num_bins == 63
            and shp._get_transformer("hog1d").scaling_factor == 0.5)

    shp = ShapeDTW(metric_params={
        "scaling_factor_hog1d": 0.5,
        "nUM_intervals_hog1d": 5
    })
    assert (shp._get_transformer("hoG1d").num_intervals == 5
            and shp._get_transformer("hOG1d").num_bins == 8
            and shp._get_transformer("hog1d").scaling_factor == 0.5)

    # test hog1d with all 3 custom parameters
    shp = ShapeDTW(
        metric_params={
            "scaling_factor_hog1d": 0.5,
            "nUM_intervals_hog1d": 5,
            "num_bins_hog1d": 63,
        })
    assert (shp._get_transformer("hoG1d").num_intervals == 5
            and shp._get_transformer("hOG1d").num_bins == 63
            and shp._get_transformer("hog1d").scaling_factor == 0.5)

    shp = ShapeDTW()
    assert isinstance(shp._get_transformer("hog1d"), HOG1DTransformer)

    # test compound shape descriptor (mix upper and lower cases)
    shp = ShapeDTW(
        shape_descriptor_function="compound",
        shape_descriptor_functions=["raw", "derivative"],
        metric_params={"weighting_FACtor": 20},
    )
    shp.fit(X, y)
    assert shp.fit(X, y).weighting_factor == 20

    with pytest.raises(ValueError):
        ShapeDTW(shape_descriptor_function="paa",
                 metric_params={
                     "num_intervals": 8
                 }).fit(X, y)