2012-03-23 1 views
0

私は、可変数のシーケンスを持つ複数のセットを持っています。各配列はそうのように0または1のいずれかである64の数字で構成されている:0,0,0,0,0,0,1,1,0,0,0:私は0と1のシーケンスのセットを記述する関数が必要ですか?

配列1を設定します、0,1,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,0,0 、0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0 、0,0,0

シーケンス2: 0,0,0,0,1,1,1,1,0,0,0,1,1,1,0,0,0,0、 1,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0、 0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0

シーケンス3: 0 、0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1 、0,0,0,0,0,0,1,0,0,0,0,0,0,0,1、 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0

。 ..

セットB

sequence1: 0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1 、1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0 、0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1

配列2: 0 、0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1 、0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0 、0,0,0,0,0,0,1,1,1,1,1,0

...

私は、セット内のすべての可能なシーケンスを記述する数学関数を見つける多分多くを予測し、それが他のセット内のシーケンスが含まれていませんしたいと思います。私は(1つのタッチ/ 0何のタッチを)触れられていないグリッド内のセルに基づいて、モバイルアプリで異なるジェスチャーを認識しようとしていますので、

は、私はこれを必要とします。セットは各ジェスチャーを表し、シーケンスは各ジェスチャーのバリエーションの限られたサンプルを表します。

セット内のシーケンスを記述する関数は、セット/ジェスチャーが含まれているかどうかを判断するためにユーザーのタッチをテストすることができます。

私は、ExcelやMathematicaを使用してのいずれか、解決策を探し、私は専門家の方向を探しています一般的には両方と数学について非常に無知であること。 件名に関する基本的なドキュメントの提案も歓迎します。

+3

2つの可能な配列は?それは列挙するのが大変です - どれくらい時間がありますか?私は、あなたがすでに「すべての可能な配列」に入っているよりも、「より多くの」配列をどのように予測するのかは分かりません...少し背景を埋めることができるなら、役に立つかもしれません - どのように到着しましたか?これらの要件? –

+0

可能なすべてのシーケンスを調べるのではなく、すでにセットに含まれているものを定義する関数を探していました。同じパターンでより多くを見つけるための「ルール」として使用することもできます。 – HermioneGreen

+1

@Aglaia質問はあまりにも漠然としています - あなたはどのような種類のパターンを念頭に置いて指定する必要があります。 –

答えて

3

本質的に1Dの2Dデータを扱うように見えます。たとえば、s1は、質問のセットAの最初のシーケンスを表します。その後、コマンド

ArrayPlot[Partition[s1, 8]] 

この画像を生成する:

enter image description here

同じセット内の他の配列が同様のプロットを生成します。第二セットからの配列の一つは、同じ操作に応じて、画像生成:

enter image description here

を私はあなたがこれらの写真を記述するために定義したい数学関数の種類を知りませんが、あなたの目的がユーザーの身振りを認識することであれば、私はあなたが必要としているとは確信していません。

ジェスチャーごとに「平均」画像を計算するなど、もっと簡単な操作を行うことができます。これを行う1つの方法は、各ピクチャの64ピクセルのそれぞれの平均値を計算することです。おそらく、セットAにジェスチャーAを記述する6つのシーケンスがあります。シーケンスを要素ごとに合計します。 0から6の範囲の値を持つシーケンスが作成されます。各要素を6で割ります。各要素は、認識しようとしている新しいジェスチャがそのピクセルに触れる確率の種類を表します。

ジェスチャーのセットを表すすべての一連のシーケンスでこれを繰り返します。

ユーザジェスチャを認識するには、ジェスチャを表すシーケンスと「平均」ジェスチャを表す各シーケンスとの差異を計算するだけです。最小の(絶対的な)差異は、ユーザーが行ったジェスチャーを指示します。

これは完全に確実ではないと思われます。ユーザーのジェスチャーの一部があいまいであるか、認識できないことがあります。さらに洗練されたものを試してみるとよいでしょう。しかし、私はこのアプローチが簡単で、おそらくあなたを始めるのに十分だと思います。

+0

ありがとうございます。あなたのアプローチは確かに私の快適ゾーンでより多くです。私が始めたときに似たようなことを考えましたが、より正確な方法があると確信し、ジェスチャーを疑う余地なく分離するパターンを見つけることができました。 – HermioneGreen

2

Mathematicaでは、次の式は、長さ64

Tuples[{1, 0}, {64}] 

の{0,1}のすべての可能な組み合わせを列挙します。しかしそこにそれらの2^62または18446744073709551616があるので、私はわからないんだけどそれはあなたになるでしょう。

あなたは、各セットに含まれるユニークなシーケンスを必要としていたかもしれません。その場合、必要なのは、セットにMathematica Union []関数を適用するだけです。集合がMathematicaのリストにまとめられていれば、mySetsとすれば、map演算子を使って、リストmy内のすべての集合にUnion演算子を適用することができます。

Union/@mySets 

何らかの予測をしたい場合は、もう少し情報が役に立つかもしれません。

ご説明いただきありがとうございます。

機械学習

あなたは様々な名前で知られている規律の下で滝を解決したい課題、おそらく最も一般的に機械学習やパターン認識など、あなたが同じジェスチャーを表す例を知っているならば、あなたの場合は教師あり学習と呼ばれます。

質問:あなたのケースでは、各例がどのジェスチャを表しているか知っていますか?

モデルを訓練したいラベル(そのジェスチャの形式)を知っている一連の例があり、そのモデルを使用して、見えない例に有限のクラスセット。あなたのケースでは、いくつかのジェスチャーの一つです。これは通常、分類と呼ばれます。

学習リソース

あり、このトピックに関する研究の非常に広範な背景があるが、対象に人気の導入は、クリストファー・ビショップによってmachine learningです。 スタンフォードには、ウェブ上で利用可能な一連の機械学習ビデオ講義Standford MLがあります。あなたは目に見えない例えばジェスチャーの種類を予測する時に、あなたのシステムの精度を決定する方法を検討する必要があります

精度

。通常、いくつかの例を使用してモデルを訓練し、そのモデルが見ていない例を使用してパフォーマンスをテストします。これを行うのに使用される最も一般的な方法の2つは、10倍のクロスバリデーションまたは50/50のホールドアウトの繰り返しです。正確さの尺度を持つことで、あるメソッドを他のメソッドと比較してどちらが優れているかを見ることができます。

あなたのタスクで必要とする精度のレベルは、70%の精度、85%、99%またはそれ以上ですか?

機械学習の方法は、通常、特定の種類のデータに敏感であり、システムを訓練する必要があるサンプルの量が多いほど、一般的にパフォーマンスが向上します。

上記の方法を試してみてください。ランダムフォレスト、サポートベクターマシン、ニューラルネットワークなど、さまざまな方法で検証されています。これらのすべては、さまざまな無料のツールボックスでダウンロードできます。

ツールボックス

Mathematicaは素晴らしいシステムである、無限に柔軟で、私の好きな環境ですが、箱から出して、それは、機械学習のための支援の多くを持っていません。

私は、機械学習用に設計されたカスタムツールボックスを使用すると、より迅速な処理が可能になると考えています。最も普及しているフリーツールボックスの2つはWEKARです。どちらも、ソリューションの精度を測定する方法とともに、タスクを解決するための50以上の異なる方法をサポートしています。

ちょっとしたデータを再フォーマットするだけで、ARFFという単純なファイル形式に変換し、WEKAまたはRにロードして、数十の異なるアルゴリズムを試して、それぞれのデータがどのように動作するかを確認できます。WEKAのエクスプローラ・ツールは間違いなく簡単に使用できます。マウスを数回クリックするだけで、いくつかのパラメータを入力して起動することができます。

確立された方法がデータに対してどれほどうまく機能しているかを知ったら、カスタマイズされたアプローチを自分の基準を満たしていない場合と比較するのに適しています。

手書き数字認識

あなたの問題は、手書き数字認識として知られている非常によく研究機械学習の問題に似ています。手書き数字のこのパブリックデータセットでうまくいくメソッドは、あなたのジェスチャーでうまくいく可能性があります。

+0

私はすべての可能な組み合わせを必要とするのではなく、セット内のものだけを必要とします。セット内のすべてのシーケンスを記述する関数を見つけることは可能ですか?お返事ありがとうございます – HermioneGreen

+0

@Aglaia可能です。 Union/@ mySetsコマンドを使用すると、必要な回答が得られます。答えが明確でない場合、もっと説明してください。 –

+0

連合は私にすべての系列のリストを与えていますが、それを記述する数学的関数はありません。私はFindSequenceFunctionのようなものを考えていましたが、シーケンスのセット全体について考えていました。 – HermioneGreen

関連する問題