我正在尝试使用蓝牙加密狗实现室内位置跟踪系统.我的想法是使用Android设备走动,并根据放置在房间周围的蓝牙加密狗的信号强度计算您在房间中的位置.
为了做到这一点,我决定使用机器学习尽可能接近RSSI作为距离,例如米.
我的学院的一位讲师告诉我,我正在寻找LibSVM,所以我一直在读书.
我看了一下这个tutorial,似乎无法理解训练系统所需的数据.
我将拥有的数据是:
>保存在数据库中的每个加密狗的位置(以及mac地址),x和y坐标
>最接近我的Android设备的加密狗的接收信号强度指示器(RSSI)
> mac地址将用于查询某些加密狗的数据库
我知道数据必须是SVM格式,但我不确定它在输入数据和输出数据方面应该是什么.下面的例子取自我提到的教程,表明一个人是一个阶级,一个女人是一个阶级.所以在我的情况下,我只有一个班级“加密狗”?并且所有值加密狗都应该反映我存储在数据库中的值吗?
man voice:low figure:big income:good
woman voice:high figure:slim
income:fare
- Convert the feature values to its numeric representation. Let’s say, that best salary would be 5 and worst salary 1 (or no salary =
0), the same with other enumarated variables.- We have 2 classes, man and women . convert the classes to numeric values: man = 1, woman = -1
- Save it in libsvm data format:
[class/target] 1:[firstFeatureValue] 2:[secondFeatureValue] etc. ex.:
a women with great salary, low voice and small figure would be encoded
like:
-1 1:5 2:1.5 3:1.8In general the input file format of SVM is
[label] [index1]:[value1] [index2]:[value2] … [label]
[index1]:[value1] [index2]:[value2] …
能有人给我一个我应该瞄准的例子吗?
这对我来说都是全新的,所以任何有用的提示或提示让我去的都会很棒.
提前致谢
解决方法:
我已经实现了用于室内本地化的WiFi指纹识别,所以我知道这里有一些问题.
首先,要确定您的位置,您是否正在执行指纹识别或信号强度三边测量(人们错误地称之为三角测量)?三边测量是交叉多个球体以在空间中找到位置的过程.另一方面,指纹识别是一种分类问题,它将信号分解到没有计算实际距离的位置.
由于多径衰落等无线问题,室内三边测量非常困难.这些影响会导致信号衰减,从而导致距离估计偏离.
指纹识别只是一个分类问题.与三边测量一样,它假设加密狗的位置不会改变.但是,与三边测量不同,它根本不使用距离.
三边测量的优势在于,假设距离估计是正确的(实际上难以实现),您将能够在连续(非离散)范围内解析您的位置.由于指纹识别是一个分类问题,它必须归类为一组固定的离散位置之一;例如,如果您的蓝牙无线电沿着房间的周边排列,您最终可能会将房间内部离散到3×3个可能位置之一.
如果您要进行指纹识别,那么您需要使用以下特征向量来收集训练数据:
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,因为朴素贝叶斯很容易适应缺失的特征(通过允许您为丢失的特征提供小概率质量).此外,在Naive Bayes中,我使用高斯PDF函数来计算似然概率P(位置| MAC_i = RSSI_i),因为所有RSSI值都是数字.