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.