On Tuesday, 27 February 2018 at 09:23:49 UTC, kerdemdemir wrote:
I need a classifier in my project.
Since it is I believe most easy to implement I am trying to implement logistic regression.

I am trying to do the same as the python example: https://beckernick.github.io/logistic-regression-from-scratch/

I need to data sets with which I will test.

This works(https://run.dlang.io/is/yGa4a0) :

        double[2] x1;
        Random* gen = threadLocalPtr!Random;
        
        auto mu = [0.0, 0.0].sliced;
        auto sigma = [1.0, 0.75, 0.75, 1].sliced(2,2);
        auto rv = multivariateNormalVar(mu, sigma);
        rv(gen, x1[]);
        writeln(x1);
        
But when I increase my data set size from double[2] to double[100] I am getting an assert :

mir-random-0.4.3/mir-random/source/mir/random/ndvariable.d(378): Assertion 
failure

which is:
assert(result.length == n);

How can I have a result vector which has size like 5000 something?

Erdemdem

I haven't made much use of mir.random yet...

The dimension 2 in this case is the size of the dimension of the random variable. What you want to do is simulate multiple times from this 2-dimensional random variable.

It looks like the examples on the main Readme page uses mir.random.algorithm.range. I tried below, but I got errors. I did notice that the MultivariateNormalVariable documentation says that it is in beta still.

void main()
{
    import mir.random : Random, unpredictableSeed;
    import mir.random.ndvariable : MultivariateNormalVariable;
    import mir.random.algorithm : range;
    import mir.ndslice.slice : sliced;
    import std.range : take;

    auto mu = [10.0, 0.0].sliced;
    auto sigma = [2.0, -1.5, -1.5, 2.0].sliced(2,2);

    auto rng = Random(unpredictableSeed);
    auto sample = range!rng
                        (MultivariateNormalVariable!double(mu, sigma))
                        .take(10);
}

However, doing it manually with a for loop works.

void main()
{
    import mir.random : rne;
    import mir.random.ndvariable : multivariateNormalVar;
    import mir.random.algorithm : range;
    import mir.ndslice.slice : sliced;
    import std.stdio : writeln;

    auto mu = [10.0, 0.0].sliced;
    auto sigma = [2.0, -1.5, -1.5, 2.0].sliced(2,2);

    auto rv = multivariateNormalVar(mu, sigma);

    double[2][100] x;
    for (size_t i = 0; i < 100; i++) {
        rv(rne, x[i][]);
    }
    writeln(x);
}

Nevertheless, it probably can't hurt to file an issue if you can't get something like the first one to work. I would think it should just work.

Reply via email to