トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索   ヘルプ   最終更新のRSS

MATLAB Tips

Last-modified: 2016-02-23 (火) 06:37:34
Top / MATLAB Tips

MATLAB Note

MATLAB Note / MATLAB Tips

オンデマンドセミナー「機械学習: データの自動分類とパターン識別 」

  • Neural Network ToolboxのGUIツール
    • トレーニングデータ:学習に使うデータ、デフォルトではデータ全体の70%
    • バリデーションデータ:過適応を防ぐため、学習途中のモデルにこのデータを与え、認識率が悪くなりだす前に学習を止める。15%
    • テストデータ:上記プロセスに一切使わない、最終的なモデルの評価用データ。15%
    • 学習結果は混同行列の形で視覚化できる。各データの正解データが何で、モデルではどのクラスタに分類されたか。
  • ランダム要素統制
    • 関数の最初に以下のコードを入れておけば同じ乱数が生成されるのでニューラルネットの結果が同じになる。
      seed = 0;
      rng(seed);
    • ※ニューラルネット、決定木は乱数に依存する
  • バギングされた決定木
    • 2300特徴量、4クラス、データ数60で正確高速な分類
    • ランダムに選んだデータを使って複数の決定木を作り、多数決で最適なものを作る
    • DeltaCritDecisionSplit で特徴量ごとの寄与度を表示できる(数値が大きいほど寄与度大)。
    • 信頼性の値も得られる
  • Statistics Toolbox で可能な機械学習の手法の例
    • Linear and Quadratic Discriminant Analysis
    • 決定木
    • ナイーブベイズ
    • 特徴量選択アルゴリズム(Sequential Forward and Backward Feature Selection)
    • モデル選択(クロスバリデーション、混合行列、ROCパフォーマンス曲線)
  • Bioinformatics Toolbox で可能な機械学習の手法の例
    • SVM
    • K-近傍法
    • Feature ranking, randomized feature selection

コマンド

基本

  • MATLABの関数やコマンドは、すべて
    >> edit コマンド(関数)名
    とすることで中身を確認できます。
  • 各コマンドのヘルプ:MATLABウインドウ上で、
    >> help コマンド名

プログラミング全般

文字列操作

  • STRCAT 文字列を連結する

文字列マッチング

  • STRFIND 一方の文字列内にある文字列の検出
  • STRMATCH 適合する文字列の検出

ベクトル操作

  • ROT90 行と列を入れ替え
  • FIX(X) Xの要素をゼロ方向の最も近い整数に丸める(小数点以下切り捨て)

重複なしで配列をソート

  • 関数 unique を使う。

引数の数を得る

  • 例外処理などのために、関数に与えられた引数の数を得るには、nargin を使います。

NaNを検出する

2つのベクトルの共通部分を得る(積集合)

セル配列

セル配列を数値型に変換

  • 参考 データタイプ
  • セル配列に、文字列型の数字データが入っているときは、配列に変換しようとしても、エラーが出ます。
    C = {'0';'1.2'}
    cell2mat(C)
    
    ??? エラー: ==> cat
    CAT引数の次元が一致していません
  • ファイル読み込みの時などによく起こるエラーです。
  • 解決するには、
    C = {str2num('0');str2num('1.2')}  %数値型でセル配列に格納
    cell2mat(C)
    
    ans =
             0
        1.2000
  • ファイル読み込みは以下のようにすればOK(ファイル中に、数字データしかない場合)
    inputLine = textread( 'test.txt', '%s');  %セル配列としてinputLineに格納
    dataLine = [];
    for count = 1:1:length(inputLine)         %各行を読み込む
        dataLine = [dataLine ; str2num(inputLine{count, :})];
    end
    dataLine

セル配列の宣言、参照、削除

  • 宣言は
    A = cell(3,1);
    A{1} = 'a'
    A{2} = 'aa'
    A{3} = 'aaa'
  • 参照は
    >> A(2)
    
    ans = 
       'aaa'
    
    >> A{2}
    
    ans =
    aaa
  • 2番目のセルを削除したいとき
    >>A(2) = []
    
    A = 
        'a'
        'aaa'

文字列として扱う

A = cell(3,1);
A{1} = 'a'
A{2} = 'aa'
A{3} = 'aaa'

A(1) = strcat(A(1),'b');
A

A = 
    'ab'
    'aa'
    'aaa'

各セルに次数の異なる数値データを代入する

>> A = cell(2,1)

A = 
     []
     []

>> A{1} = [1 2]

A = 
    [1x2 double]
              []
>> A{2} = [1 2 4]

A = 
    [1x2 double]
    [1x3 double]

>> A{2}

ans =
     1     2     4

>> A(2)

ans = 
    [1x3 double]

セル配列内の条件抽出

  • find関数は使えないので、strcmp関数 を使います。

セル配列が空行列(Empty cell array)かどうか

文字列処理

文字列を分割するには

引用符を文字列として指定するには

  • 文字列式で引用符記号「'」を使用するには、シングルクォートを2つ重ねて「''」とします。
  • >> input = 'test dayo.';             %変数inputに文字列「test dayo.」を代入
    >> output = strcat('''',input,'''')  %変数outputに「'」+ input +「'」を代入(strcat:文字列を連結する)
    これでoutputの中身は、「'test dayo.'」となります。

呼び出し

コマンドラインからMATLABを呼び出す

  • Mファイルをコマンドラインから実行するには
    • testmatlab.m
      A = [1 2 3 ;
          4 5 6 ;
          7 8 9];
      newA = calcA( A );
      csvwrite('testmatlab.csv', newA);
      disp(A); 
    • calcA.m
      function [ newA ] = calcA( A )
      newA = A * 10;
  • 上記を同じディレクトリにおいて、
    /etc/matlabR2007b/bin/matlab -nodisplay < testmatlab.m
    • testmatlab.csv ができる。
    • testmatlab.m は function 表記ができない (Error: Function definitions are not permitted at the prompt or in scripts. になる)が、中で別の関数を呼び出すことは可能。

JavaからMATLABを呼び出す

  • 引用元:HOWTO Call Matlab from Java
  • CallingMatlab.java
    • 通常の出力とエラーメッセージを別のストリームで取得しています。
    • エラーサンプル:testmatlabE.m
    • 実行例
      $ java CallingMatlab testmatlabE.m
      0
      1                                      < M A T L A B >
      2                          Copyright 1984-2007 The MathWorks, Inc.
      3                                 Version 7.5.0.338 (R2007b)
      4                                       August 9, 2007
      5
      6
      7          To get started, type one of these: helpwin, helpdesk, or demo.
      8          For product information, visit www.mathworks.com.
      9
      10       >> >> >> >>      1     2     3
      11            4     5     6
      12            7     8     9
      13
      14       >>
      ERROR    ??? Error using ==> plus
      ERROR    Matrix dimensions must agree.
      ERROR
      ERROR    ??? Undefined function or variable 'newA'.
      ERROR
      ERROR

MATLABからJavaプログラムを使うには

  1. 使いたいJavaプログラムのclassファイルを作成して、ひとつのフォルダにまとめておきます。
  2. (MATLABのインストールフォルダ)\toolbox\local\classpath.txt の最後の行に、上記のclassファイル用フォルダのパスを追記します。(もしくは、MATLABのウインドウ上でclassファイルフォルダを右クリック→「パスに追加」)
  3. MATLABを再起動します。
  4. MATLABのコマンドラインで、
    >> javaMethod(メソッド名,クラス名,引数1,引数2,...) 
    とすることで実行できます。詳しくはMATLABのヘルプ(>> help javaMethodと入力)を参照してください。

MATLABからCプログラムを使うには

入出力

例外処理

時間処理に関して

タイマー

Psychophysics Toolbox の時間同期に関して

コマンドラインの命令文を文字列としてプログラム内で実行するには

  • eval関数を使います。
  • (決まった文字列)(数字).mat のようなファイルを 1~200 まで順番に load で読み込む、といったときに有効。