質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • Java

    15865questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Android

    7307questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • 機械学習

    964questions

    機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

weka, javaで機械学習を使ったアプリを作りたい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,243

keyoris

score 3

前提・実現したいこと

wekaをつかってandroidの機械学習判定アプリを作ろうとしています。
wekaのUIからoutput soursecodeで木構造のjavaソースコードを生成しました。
これをアプリに反映させようと思ったのですが、エラーが出てしまいました。

正常に動かすにはどのようにすればよいかご教授お願いします。

発生している問題・エラーメッセージ

「Weka exception: No training file and no object input file given.」
「If set, classifier is run in debug mode and may output additional info to the console」

該当のソースコード

import weka.core.Attribute;
import weka.core.Capabilities;
import weka.core.Capabilities.Capability;
import weka.core.Instance;
import weka.core.Instances;
import weka.core.RevisionUtils;
import weka.core.converters.CSVLoader;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

import weka.classifiers.Classifier;

public class WekaWrapper extends Classifier {

 public String globalInfo() {
  return toString();
 }

 public Capabilities getCapabilities() {
  weka.core.Capabilities result = new weka.core.Capabilities(this);

  result.enable(weka.core.Capabilities.Capability.NOMINAL_ATTRIBUTES);
  result.enable(weka.core.Capabilities.Capability.NUMERIC_ATTRIBUTES);
  result.enable(weka.core.Capabilities.Capability.DATE_ATTRIBUTES);
  result.enable(weka.core.Capabilities.Capability.MISSING_VALUES);
  result.enable(weka.core.Capabilities.Capability.NOMINAL_CLASS);
  result.enable(weka.core.Capabilities.Capability.MISSING_CLASS_VALUES);

  result.setMinimumNumberInstances(0);

  return result;
 }

 public void buildClassifier(Instances i) throws Exception {
  getCapabilities().testWithFail(i);
 }

 public double classifyInstance(Instance i) throws Exception {
  Object[] s = new Object[i.numAttributes()];

  for (int j = 0; j < s.length; j++) {
    if (!i.isMissing(j)) {
      if (i.attribute(j).isNominal())
        s[j] = new String(i.stringValue(j));
      else if (i.attribute(j).isNumeric())
        s[j] = new Double(i.value(j));
    }
  }
  s[i.classIndex()] = null;
  return WekaClassifier.classify(s);
  }

 public String getRevision() {
  return RevisionUtils.extract("1.0");
 }

 public String toString() {
  return "Auto-generated classifier wrapper, based on weka.classifiers.trees.J48 (generated with Weka 3.6.10).\n" + this.getClass().getName() + "/WekaClassifier";
 }

 public static void main(String args[]) throws IOException {
  runClassifier(new WekaWrapper(), args);
 }
}
class WekaClassifier {

 public static double classify(Object[] i) throws Exception {

  double p = Double.NaN;
  p = WekaClassifier.N24110f054(i);
  return p;
 }
 
 static double N24110f054(Object []i) {
 double p = Double.NaN;
 if (i[10] == null) {
  p = 0;
 } else if (((Double) i[10]).doubleValue() <= -4.114530175) {
  p = WekaClassifier.N690779d55(i);
 } else if (((Double) i[10]).doubleValue() > -4.114530175) {
  p = 0;
 } 
 return p;
 }
 
 static double N690779d55(Object []i) {
 double p = Double.NaN;
 if (i[5] == null) {
  p = 0;
 } else if (((Double) i[5]).doubleValue() <= 79.32677055) {
  p = WekaClassifier.N4106859b6(i);
 } else if (((Double) i[5]).doubleValue() > 79.32677055) {
  p = 1;
 } 
 return p;
 }

 static double N4106859b6(Object []i) {
 double p = Double.NaN;
 if (i[3] == null) {
  p = 1;
 } else if (((Double) i[3]).doubleValue() <= 19.69391594) {
  p = WekaClassifier.N198472417(i);
 } else if (((Double) i[3]).doubleValue() > 19.69391594) {
  p = 0;
 } 
 return p;
 }

 static double N198472417(Object []i) {
 double p = Double.NaN;
 if (i[0] == null) {
  p = 1;
 } else if (((Double) i[0]).doubleValue() <= -5.152709467) {
  p = 1;
 } else if (((Double) i[0]).doubleValue() > -5.152709467) {
  p = 0;
 } 
 return p;
 }
}

試したこと

CSVファイルを読み込んで判定させたいので、
BufferedReader reader = new BufferedReader(new FileReader("~~~.csv"));
などを使うのかなと思ったのですが、変数readerをどこに反映させればよいか分かりませんでした。

補足情報(言語/FW/ツール等のバージョンなど)

wekaのバージョンは3.6.10です。
javaで、androidアプリケーションを目指しています。CSVは加速度の値が書き込まれています。できたら、この判定をつかって人の歩行判定などに生かしたいと思っています。
よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

ファイルの指定をargsに指定してあげればできました。
ありがとうございました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • Java

    15865questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Android

    7307questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • 機械学習

    964questions

    機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。