Ich habe folgende Predictor
-Klasse, die eine predict()
Methode implementiert:Probleme beim Anwenden einer Methode auf einen Strom von Floating Numbers Array?
class Predictor {
public static int predict(double[] atts) {
if (atts.length != 3) {
return -1;
}
int i, j;
;
for (i = 0; i < 2; i++) {
double sum = 0.;
for (j = 0; j < 3; j++) {
sum += Math.log(2. * Math.PI * sigmas[i][j]);
}
double nij = -0.5 * sum;
sum = 0.;
for (j = 0; j < 3; j++) {
sum += Math.pow(atts[j] - thetas[i][j], 2.)/sigmas[i][j];
}
nij -= 0.5 * sum;
likelihoods[i] = Math.log(priors[i]) + nij;
}
double highestLikeli = Double.NEGATIVE_INFINITY;
int classIndex = -1;
for (i = 0; i < 2; i++) {
if (likelihoods[i] > highestLikeli) {
highestLikeli = likelihoods[i];
classIndex = i;
}
}
return classIndex;
}
public static void main(String[] args) {
if (args.length == 3) {
double[] atts = new double[args.length];
for (int i = 0, l = args.length; i < l; i++) {
atts[i] = Double.parseDouble(args[i]);
}
System.out.println(Predictor.predict(atts));
}
}
}
vorherzusagen Verfahren eine Anzahl Etikettenvorhersagt (d int number 0
oder 1
). Welche verwende ich in einer Android-App, um eine Reihe von Floats predict
die Nummer Label eines solchen Array von Schwimmern gegeben. Optisch sieht das wie folgt aus:
arrayOfFloats -> predict_method -> Label(0/1)
Hinweis, arrayOfFloats ist ein Strom von Daten (konsekutiv ich mehrere dieser Arrays haben). Hier
ist der Code:
public void run() { //stuff that updates ui
finalValues = String.format("%s, %s, %s, %s, %s, %s\n", rollValue, pitchValue, yawValue, gxValue, gyValue, gzValue);
//finalValues = String.format("%s, %s, %s\n", rollValue, pitchValue, yawValue);
Log.e("WalkingActivity", finalValues);
WalkingLog.setText(finalValues);
// Classifier
values[0] = rollValue;
values[1] = pitchValue;
values[2] = yawValue;
//values[3] = gxValue;
//values[4] = gyValue;
//values[5] = gzValue;
int y_pred = Brain.predict(values);
ClassifierLog.setText(Integer.toString(y_pred));
System.out.println("pred: " + Integer.toString(y_pred));
int counter = 0;
//Simple threshold
if (rollValue < -40 && rollValue > -80
&& pitchValue < 0 && yawValue > 0
&& gxValue < 1000 && gxValue > -2000
&& gyValue < 500 && gyValue > -1000
&& gzValue < 1000 && gzValue > -2000) {
ClassifierLog.setText("N");
System.out.println("COUNTER: " + counter);
} else {
counter++;
ClassifierLog.setText("W");
System.out.println("COUNTER: " + counter);
}
}
Das Problem mit dem obigen Code ist, dass ich immer die gleiche Anzahl Etikett bekommen 1
(I die gleiche Anzahl bin der Vorhersage) statt einen anderen Ausgang bekommen 0
oder 1
. Soweit ich weiß, muss ich alle Float-Werte in einem einzigen Array anfügen. Obwohl ich versuche, ein solches Array an die Vorhersage-Methode zu übergeben, funktioniert es nicht. Allerdings ist es nicht funktioniert, was der richtige Weg ist, um die predict
Methode aus der Predictor
Klasse zu verwenden ?,
Ich habe keine Ahnung, was Sie versuchen oder zu tun, was Sie fragen. Bitte erläutern. – shmosel
Was der Prädiktor vorherzusagen hat. – shmosel
Das ist eine Menge Code, um 0 oder 1 zurückzugeben. Und wo kommt 'Atts' ins Bild? – shmosel