我正在使用scikit学习高斯过程回归(GPR)操作来预测数据.我的培训数据如下:
x_train = np.array([[0,0],[2,2],[3,3]]) #2-D cartesian coordinate points
y_train = np.array([[200,250, 155],[321,345,210],[417,445,851]]) #observed output from three different datasources at respective input data points (x_train)
Run Code Online (Sandbox Code Playgroud)
需要预测平均值和方差/标准偏差的测试点(2-D)是:
xvalues = np.array([0,1,2,3])
yvalues = np.array([0,1,2,3])
x,y = np.meshgrid(xvalues,yvalues) #Total 16 locations (2-D)
positions = np.vstack([x.ravel(), y.ravel()])
x_test = (np.array(positions)).T
Run Code Online (Sandbox Code Playgroud)
现在,在运行GPR(GausianProcessRegressor)拟合之后(这里,ConstantKernel和RBF的乘积用作内核GaussianProcessRegressor),可以通过遵循代码行来预测均值和方差/标准差:
y_pred_test, sigma = gp.predict(x_test, return_std =True)
Run Code Online (Sandbox Code Playgroud)
在打印预测的mean(y_pred_test)和variance(sigma)时,我在控制台中打印了以下输出:
在预测值(平均值)中,打印内部数组内有三个对象的"嵌套数组".可以假设内部阵列是每个2-D测试点位置处的每个数据源的预测平均值.但是,打印的方差只包含一个包含16个对象的数组(可能包含16个测试位置点).我知道方差提供了估计不确定性的指示.因此,我期待每个测试点的每个数据源的预测方差.我的期望是错的吗?如何在每个测试点获得每个数据源的预测方差?这是由于错误的代码?
谢谢!
蓝牙低功耗使用40个信道,每个信道宽2 MHz,跨越未经许可的2.4 GHz无线电频段.在40个频道中,BLE广告在三个频道上播出.这些广告信道名义上标记为37,38和39,并且分别在2402MHz,2426MHz和2480MHz处间隔很宽.
在iOS的Core位置,所有扫描的BLE信标都列在NSArray中,并且可以轻松访问每个信标的RSSI值.例如.
CLBeacon* beacon1 = [beacons firstObject]; NSNumber *RSSI = [NSNumber numberwithFloat:beacon1.RSSI];
Run Code Online (Sandbox Code Playgroud)
这里,RSSI值是CoreLocation提供的'averaged'值.此外,该RSSI实时波动很大.
现在,我的查询是,iOS(Objective-C)中是否有任何方法/框架访问每个广告渠道,以便我们可以从每个渠道获得RSSI值?
已发表的期刊[ http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=7103024&tag=1]已经提供了来自所有三个广告渠道的RSSI结果.该论文称,iOS 7.0之后可以使用此功能(单独访问三个广告频道).但是,我无法弄清楚在iOS中访问三个广告频道的确切方式.
先感谢您.
使用内置惯性测量单元(IMU)(也称为行人航位推算(PDR))的用户定位的简单公式如下:
x= x(previous)+step length * sin(heading direction)
y= y(previous)+step length *cos(heading direction )
Run Code Online (Sandbox Code Playgroud)
我们可以使用CMMotionManager类的motionManager属性来访问加速度计,陀螺仪和磁力计的原始值.此外,我们可以获得attitudes滚动,俯仰和偏航等值.步长可以计算为加速度的双平方根.但是,我对标题方向感到困惑.一些已发表的文献使用磁力计和陀螺仪数据的组合来估计航向.我可以看到它CLHeading也提供了标题信息.有一些在线教程,特别是对于像这样的Android平台来估计用户位置.但是,它没有给出任何适当的数学解释.
我跟着像许多在线资源这个,这个,这个和这个做一个PDR应用.我的应用程序可以检测步骤并正确地给出步长,但其输出充满错误.我认为错误是由于缺乏合适的航向.我使用以下关系从磁力计获得前进方向.
magnetometerHeading = atan2(-self.motionManager.magnetometerData.magneticField.y, self.motionManager.magnetometerData.magneticField.x);
Run Code Online (Sandbox Code Playgroud)
同样,来自陀螺仪:
grysocopeHeading +=-self.motionManager.gyroData.rotationRate.z*180/M_PI;
Run Code Online (Sandbox Code Playgroud)
最后,我给前一个标题干涉,gryoscopeheading和磁力计的比例权重如下:
headingDriection = (2*headingDirection/5)+(magnetometerHeading/5)+(2*gryospoceHeading/5);
Run Code Online (Sandbox Code Playgroud)
我从已发表的期刊论文中采用了这种方法.但是,我的工作中出现了很多错误.我的方法有误吗?我究竟应该做些什么才能获得正确的航向,以便定位估算误差最小?
任何帮助,将不胜感激.
谢谢.
编辑
我注意到在使用陀螺仪数据计算航向时,我没有将旋转速率(以弧度/秒为单位)与增量时间相乘.为此,我添加了以下代码:
CMDeviceMotion *motion = self.motionManager.deviceMotion;
[_motionManager startDeviceMotionUpdates];
if(!previousTime)
previousTime = motion.timestamp;
double deltaTime = motion.timestamp - previousTime;
previousTime = motion.timestamp;
然后我更新了陀螺仪标题:
gyroscopeHeading+= -self.motionManager.gryoData.rotationRate.z*deltaTime*180/M_PI;
本地化结果仍然不接近真实位置.我的方法是否正确?
objective-c accelerometer magnetometer gyroscope indoor-positioning-system
Following Jama Matrices are defined in my code:
P: 3*3 Matrix
I: 3*3 identity Matrix
K: 3*2 Matrix
H: 2*3 Matrix
Q: 3*3 Matrix
Run Code Online (Sandbox Code Playgroud)
Following is my code snippet:
private Matrix getP() {
P= (I.minus(K.times(H))).times(Q);
Log.d("csv", "P is calculated");
return P;
}
Run Code Online (Sandbox Code Playgroud)
While running the code, at first iteration it works, i.e, P is calculated is printed at the Logcat. However, it happens only once and the application gets stopped. Following is the error:
java.lang.IllegalArgumentException: Matrix inner dimensions must agree. …Run Code Online (Sandbox Code Playgroud) 我正在尝试从部署在实验室天花板上的低功耗蓝牙信标获得平滑的rssi值。我使用了加权均值滤波器和移动平均滤波器,但效果不佳。通过各种期刊论文,我知道卡尔曼滤波器可以用于此目的。但是我无法获得合适的数学方程来使用Objective-C进行编码。有人可以提供有关数学方程式或卡尔曼滤波器实现的任何提示吗?非常感谢。
我有两个传感器A和B。我正在尝试使用扩展卡尔曼滤波器合并他们的传感器数据,以进行高效的数据分析。由于数据类型是非线性的,因此我使用扩展卡尔曼滤波器。就我而言,来自传感器A的数据始终可靠,但来自传感器B的数据的可靠性随时间变化。例如,在 时t=0,其可靠性很高,并且可靠性逐渐(均匀)下降,直到t=T。在这种情况下,如何结合传感器数据以获得更好的优化结果?或者如何为来自传感器Bt=0的数据分配动态权重?t=T
更新:我必须在 EKF 的预测阶段使用来自传感器B的数据。
我使用Scikit-learn 的GaussianProcessRegressor在我的回归操作中使用平方指数核或RBF。另外,我使用内部可用的优化器(L-BFGS-B 算法)来优化 Kernel 参数。在我的例子中,内核参数是长度尺度和信号方差。有关的文档如下:'fmin_l_bfgs_b'log_marginal_likelihood
我按照此文档打印GPML kernel和log_marginal_likelihood. 以下是代码片段:
print("GPML kernel: %s" % gp.kernel_)
print("Log-marginal-likelihood:",
gp.log_marginal_likelihood(gp.kernel_.theta, eval_gradient = True))
Run Code Online (Sandbox Code Playgroud)
在控制台打印以下值:
GPML kernel: 31.6**2 * RBF(length_scale=1.94)
Log-marginal-likelihood: (-115.33295413296841, array([ 1.01038168e+02, -2.16465175e-07]))
Run Code Online (Sandbox Code Playgroud)
在这里,我无法弄清楚以对数边际似然打印的值。数组中的值是什么?
我关于回归的代码片段如下:
print("GPML kernel: %s" % gp.kernel_)
print("Log-marginal-likelihood:",
gp.log_marginal_likelihood(gp.kernel_.theta, eval_gradient = True))
Run Code Online (Sandbox Code Playgroud)
我打印内核参数的方法正确吗?
谢谢!
我NSMutableArray包含一些字符串作为元素.其中一个元素在数组中的不同索引处重复多次.例如[@"", @"1,2,3",@"",@"5,3,2,1",@""].我想@""从可变数组中删除所有带有值的元素.我尝试了以下方法,但无法得到解决方案.
使用For循环:
for(id obj in myMutableArray)
{
if([obj isEqualToString:@""])
{
[myMytableArray removeObject:obj];
}
}
Run Code Online (Sandbox Code Playgroud)使用虚拟可变数组调用 nextMutableArray
for(id obj in myMutableArray)
{
if([obj isEqualToString:@""])
{
continue;
}
else [nextMutableArray addObject:obj];
}
Run Code Online (Sandbox Code Playgroud)在这两种方式中,@""其他索引的elements()被删除但不在索引0(第一个对象).可能的原因是什么?有没有办法@""从可变数组中删除包含字符串的所有元素?
objective-c ×3
ios ×2
python ×2
regression ×2
scikit-learn ×2
android ×1
filtering ×1
gyroscope ×1
ibeacon ×1
jama ×1
magnetometer ×1
matrix ×1
nsobject ×1
rssi ×1
sensors ×1