2013-03-05 23 views
4

我正在嘗試使用藍牙適配器來實現室內位置跟蹤系統。我們的想法是使用Android設備走動,並根據房間周圍藍牙適配器的信號強度計算您在一個房間中的位置。 爲了做到這一點,我決定使用機器學習來儘可能逼近RSSI作爲距離,例如米。 我的大學裏有一位講師告訴我,LibSVM是我正在尋找的東西,所以我一直在做一些閱讀。 我看了一下這個tutorial,似乎無法擺脫訓練系統所需的數據。 ,我將擁有的數據是:保存在數據庫中,x和y如何在Java中使用LibSVM?

  • 每個收發器的位置(與MAC地址一起)座標
  • 接收信號強度指示器(RSSI)的加密狗最近我的Android設備
  • 的MAC地址將被用於查詢某些加密狗

我瞭解的數據必須是在SVM格式的數據庫,但我有點不能確定它應該是什麼輸入數據和輸出數據的術語。下面的例子,從我剛纔提到的教程中可以看出,男人是班級,女人是班級。所以在我的情況下,我只有一個類「加密狗」?並且所有值加密狗應該反映我存儲在我的數據庫中的值嗎?

男人的聲音:小圖:大收入:好

女人的聲音:高身材:纖細 收入:票價

  1. 轉換的特徵值其數值表示形式。比方說,最好的薪水是5和最差的薪水1(或沒有薪水= 0),與其他激勵變量相同。
  2. 我們有2個班,男人和女人。類轉換爲數值:人= 1,女人= -1
  3. 保存它在LIBSVM數據格式:

[類/目標] 1:[firstFeatureValue] 2:[secondFeatureValue]等離。 : 一個婦女以極大的工資,低的聲音和小數字將被編碼 像: -1 1:5 2:1.5 3:1.8

一般而言SVM的輸入文件格式是

[標號] [index1]:[value1] [index2]:[value2] ... [label] [index1]:[valu e1] [index2]:[value2] ...

有人能給我一個我應該瞄準的例子嗎?

這對我來說都是全新的,所以任何有幫助的提示或技巧都可以幫助我。 在此先感謝

回答

3

我已經實現了室內定位了WiFi指紋,所以我知道這裏的一些問題。

首先,要確定您的位置,您是否執行指紋識別或信號強度三邊測量(人們錯誤地稱爲三角測量)?三角測量是將多個球體相交以找到空間位置的過程。另一方面,指紋識別是一種分類問題,可將信號解析到沒有計算實際距離的位置。

三邊測量是在室內極難由於像多徑衰落的無線問題。這些影響會導致您的信號衰減,反過來會導致距離估計值關閉。

指紋只是一個分類問題。像三邊測量一樣,它假定加密鎖的位置不會改變。但是,與三邊測量不同,它根本不使用距離。

三角測量法的優點是,假設距離估計是正確的(這在現實中是很難實現),你就可以在連續(非獨立)的範圍,以解決您的位置。由於指紋識別是一個分類問題,它必須分類到一組固定的離散位置;例如,如果您的藍牙無線電沿着房間的周邊排列,則您最終可能會將房間內部分爲3x3個可能位置之一。

如果您正在使用指紋去,那麼你將需要收集與看起來像特徵向量的訓練數據:

MAC_1:-87, MAC_2:-40, MAC_3:-91, class=location_A 
MAC_1:-31, MAC_2:-90, MAC_3:-79, class=location_B 

凡在房間內的每個位置,您可以從所有可用的藍牙讀取RSSI你可以感受到的無線電。您應該爲每個位置至少讀取10個讀數。對於WiFi,RSSI值是以分貝爲單位的整數,範圍爲-100至-1(例如,-20 dB表示您非常接近無線電)。

現在,當你試圖進行分類,你會採取像閱讀:

MAC_1:-89, MAC_2:-71, MAC_3:-22, class=? 

的問題是那些RSSI讀數分類的地點之一。

在我以前的工作中,我用了一個樸素貝葉斯分類器,而不是因爲SVM樸素貝葉斯容納容易缺少的功能(允許你給一個小概率質量缺失的功能)。此外,在樸素貝葉斯中,我使用高斯PDF函數來計算似然概率P(location | MAC_i = RSSI_i),因爲所有的RSSI值都是數字。

+0

我認爲這是我的目標。因此,我並沒有獲得準確的位置(即(x,y)座標),而是將房間分成不同的區域,根據這些RSSI值獲取人們站在哪個區域...?我認爲這就是您的意思。這就是我在與今天在這方面工作的一些人交談後被建議做的事 – 2013-03-08 17:30:06

+2

是的,這是一個正確的理解,如果你在房間裏創建區域,你將能夠將你的位置分類到其中一個區域。但請注意,藍牙無線電的數量和配置以及區域之間的大小和距離會影響分類的準確性 – stackoverflowuser2010 2013-03-08 18:45:01

+0

這正是我剛纔在嘗試解釋它時向朋友說的東西。爲了得到準確的結果必須要有策略地放置,謝謝你的回答,很好的幫助,我還可以問,我現在只用3個加密狗創建了一個小的train.txt和test.txt文件房子周圍。我把樓上分成3個區(3個不同的房間)。我爲train.txt文件(總共30個)獲得了每個區域的10個RSSI讀數,以及每個區域的test.txt文件(共12個)的4個RSSI讀數。我是否將標籤/班級值留空在測試文件中? – 2013-03-08 19:07:21

1

我不認爲你可以使用支持向量機做你在說什麼(計算你在一個房間裏的位置......)支持向量機是一個監督,二進制分類算法。也就是說,如果你給它一些數據和一些正面/負面的類,它會學習一個分類器,它可以告訴你新的,未觀察到的數據點是正面的還是負面的。因此,您可以通過訓練SVM來告訴您一個人是否位於房間的一側(南側/北側),而不是他們的實際位置。

看來你想要做什麼並不需要機器學習。請參閱下面的文章:

編輯:鑑於你澄清,我會建議使用一個k-nearest neighbors迴歸。 SVM絕對不適合你想要做的事情;即使使用SVM進行迴歸,它也只能在一個維度上工作。

您想要做的就是儘可能多地獲取數據(data = RSSI,label =距離)並將它們嵌入度量空間中,可能在您擁有的加密狗數量的維數。然後,給定一些新的數據(RSSI信號強度),找出空間中最近的鄰居並計算距離上的某種平均值。

+0

我並非試圖計算房間中的位置,而是試圖教導系統RSSI值給出的距離。三角測量/三邊測量不太有效,因爲障礙會影響信號強度,但這不會影響距離。 – 2013-03-06 11:37:58

+0

k-NN迴歸似乎是要走的路。我更新了我的帖子。 – 2013-03-06 18:30:12

2

由於您的輸出是一個實數(距離),我們正在討論迴歸問題,而不是分類問題。 我不清楚您要查找的值是與加密狗最近的距離,還是您的輸出將是到所有加密狗的一組距離。這是你需要先清理的東西。

有幾種算法可以做到這一點,但由於您問的是SVM,我會將範圍僅限於 這個答案。我假設你的輸出只是代表距離的值,如果你是 希望有一個多維輸出,並且考慮到SVR(支持向量迴歸)只提供一個維度輸出,你需要每個維度訓練一個實例。

一個LIBSVM的參數是svm_type,因爲這個問題是一個迴歸問題,你應該使用選項3 - 小量-SVR

對於內核型我建議考慮RBF(選項2 - 徑向基功能)

至於你的數據,這是一個可能的安排:

| dongle 1   | dongle 2   | dongle 3   | desired output 
| x | y | RSSI | x | y | RSSI | x | y | RSSI | 
--------------------------------------------------------------------------------- 
| 10.0 | 11.1 | 2.3 | 0.0 | 1.1 | 0.3 | 17.0 | 19.1 | 0.3 |  10.3 
| 30.0 | 17.1 | 0.3 | 10.0 | 1.1 | 0.9 | 11.0 | 9.1 | 0.2 |  18.7 

因此,這將轉化爲(括號只是爲了清楚起見):

[10.3] [1]:[10.0] [2]:[11.1] [3]:[2.3] [4]:[0.0] [5]:[1.1] [6]:[0.3] [7]:[17.0] [8]:[19.1] [9]:[0.3] 
[18.7] [1]:[30.0] [2]:[17.1] [3]:[0.3] [4]:[10.0] [5]:[1.1] [6]:[0.9] [7]:[11.0] [8]:[9.1] [9]:[0.2] 

總是建議在[-1,1]或[0,1]之間縮放數據。 此外,你可以在這裏找到一些示例數據http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/regression.html

希望這有助於