2012-03-23 70 views
0

我有多個序列可變數量的集合。每個序列由64個數字是0或1的像這樣:我需要一個描述一組零和一個序列的函數嗎?

集A

序列1:0,0,0,0,0,0,1,1,0,0,0 ,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組

序列1: 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

sequence2: 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,1,0

...

我想找到一個描述集合中所有可能序列的數學函數,甚至可以預測更多,並且不包含其他集合中的序列。

我需要這個,因爲我試圖根據網格中已觸摸的單元格(1觸摸/ 0無觸摸)識別移動應用程序中的不同手勢。這些集合表示每個手勢,並且這些序列是每個手勢中有限變化的樣本。

理想情況下,描述集合中序列的函數將允許我測試用戶觸摸它以確定哪個集合/手勢是其中的一部分。

我搜索了一個解決方案,使用Excel或Mathematica,但一般都非常無知和數學,我正在尋找專家的方向。 關於這個問題的基本文件建議也是受歡迎的。

+3

2^64可能的序列?這可以列舉很多 - 你有多少時間?我不確定你將如何「預測更多」的序列,而不是你已經掌握的「所有可能的序列」......如果你能夠填充更多的背景,這可能是有用的 - 你是如何到達的這些要求? – 2012-03-23 19:10:07

+0

我不是在尋找所有可能的序列,而是在尋找一個函數來定義那些已經在集合中的函數,並且可能用作一個「規則」來使用相同的模式來尋找更多的序列。 – HermioneGreen 2012-03-23 19:26:06

+1

@Aglaia這個問題太模糊 - 你必須指定你想要的模式。 – 2012-03-23 20:39:41

回答

3

它看起來好像你試圖處理一維中基本上是2D數據的東西。例如,讓s1代表問題中集合A中的第一個序列。然後命令

ArrayPlot[Partition[s1, 8]] 

產生這樣的畫面:

enter image description here

在同一組中的其它序列產生相似曲線。一個從第二組序列的產生,以響應相同的操作,畫面:

enter image description here

我不知道你想定義來描述這些圖片什麼樣的數學函數,但如果您的目標是識別用戶手勢,我不確定您需要。

你可以做更簡單的事情,比如爲你的每個手勢計算'平均'圖片。一種方法是計算每張圖片中每個64像素的平均值。也許在你的集合A中有6個序列描述手勢A.逐個元素地求和序列。您現在將擁有一個值爲0到6的序列。將每個元素除以6.現在,每個元素表示一種新的手勢(您嘗試識別的手勢)將觸摸該像素的一種概率。

對代表您的一組手勢的所有序列組重複此操作。

要識別用戶手勢,只需計算表示手勢的序列與表示「平均」手勢的每個序列之間的差異即可。最小的(絕對)差異將引導您進入用戶的手勢。

我不認爲這將是完全萬無一失的,它可能會導致某些用戶手勢模糊或無法識別,您可能想嘗試更復雜的事情。但我認爲這種方法很簡單,可能足以讓你開始。

+0

謝謝。你的方法絕對是在我的舒適區。當我開始時,我想到了類似的東西,但後來我確信自己有一種更精確的方法,並且我可以找到一種模式來毫無疑問地將手勢分開。 – HermioneGreen 2012-03-23 23:18:27

2

在數學下面的表達式將枚舉的{0,1}長度64

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

的所有可能的組合,但也有2^62或它們的18446744073709551616,所以我不知道是什麼使用那將是你的。

也許你只是想要包含在每個集合中的獨特序列,在這種情況下,所有你需要的是應用於該集合的Mathematica Union []函數。如果你在Mathematica中有一組列表,比如說mySets,那麼你可以使用映射運算符將Union運算符應用到列表中的每個集合。

Union/@mySets 

如果你想要做一些類型的預測多一點的信息可能是有用的。

謝謝你的澄清。

機器學習

要解決由各種名目的知名學科下的瀑布任務,但可能是最常見的機器學習或模式識別,如果你知道哪些例子表示,同樣的動作,你的情況將被稱爲監督式學習。

問題:在你的情況下,你知道每個例子代表哪個手勢嗎?

你有一系列的例子,你知道一個標籤(它的手勢形式),你想從中訓練一個模型,並使用該模型將一個看不見的例子標記爲一組有限的類。在你的情況下,一些手勢之一。這通常被稱爲分類。

學習資源

還有就是研究這個話題非常廣泛的背景,而是一個通俗的介紹了主題爲machine learning由克里斯托弗主教。 斯坦福大學在網上有一系列機器學習視頻講座Standford ML

精度

你可能要考慮你將如何確定預測的手勢的類型爲一個看不見例如你的系統的精度。通常情況下,您可以使用一些示例來訓練模型,然後使用該模型未見過的示例測試其性能。用來做這件事的兩種最常見的方法是10倍交叉驗證或重複50/50拒絕。衡量準確性使您能夠比較一種方法與另一種方法,看哪種方法更爲優越。

你有沒有想過在你的任務中需要的準確度是70%,85%,99%還是更好?

機器學習方法通​​常對您擁有的特定數據類型以及您需要訓練系統的示例數量非常敏感,例子越多,性能越好。

您可以嘗試上面提出的方法,並將其與各種經過驗證的方法進行比較,其中包括隨機森林,支持向量機和神經網絡。所有這些以及更多可供下載的各種免費工具箱。

工具箱

數學是一個美妙的系統,是靈活,而我最喜歡的環境,但開箱它不具有機器學習的支持很大。

我懷疑你會通過使用專爲機器學習設計的自定義工具箱更快速地取得大量進展。兩個最流行的免費工具箱是WEKAR都支持超過50種不同的方法來解決您的任務以及測量解決方案的準確性的方法。

只需一點點數據重新格式化,您可以將手勢轉換成稱爲ARFF一個簡單的文件格式,它們加載到WEKA或R和幾十個不同的算法實驗,看看在你的數據的每個如何執行。WEKA中的瀏覽器工具絕對是最容易使用的,只需點擊幾下鼠標並鍵入一些參數即可開始使用。

一旦您瞭解了已建立的方法對您的數據執行得有多好,您就有了一個很好的起點,可以比較定製的方法和不符合標準的方法。

手寫數字識別

您的問題類似於稱爲手寫數字識別一個很好的研究機器學習問題。在手寫數字的公開數據集上運行良好的方法很可能在您的手勢上運行良好。

+0

我不需要所有可能的組合,只需要一組中的組合。是否有可能找到描述集合中所有序列的函數,而不僅僅是一個?感謝您的幫助 – HermioneGreen 2012-03-23 19:24:12

+0

@Aglaia有可能。 Union/@ mySets命令會給你你需要的答案,詳見我的答案。如果答案不明確,很樂意解釋。 – 2012-03-23 19:36:27

+0

聯盟給我的所有序列的列表,但不是一個數學函數來描述它們;我正在想像FindSequenceFunction,但對於整個序列集。 – HermioneGreen 2012-03-23 19:49:11

相關問題