小编san*_*edi的帖子

scikit-learn中的多输出高斯过程回归

我正在使用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个测试位置点).我知道方差提供了估计不确定性的指示.因此,我期待每个测试点的每个数据源的预测方差.我的期望是错的吗?如何在每个测试点获得每个数据源的预测方差?这是由于错误的代码?

谢谢!

python regression machine-learning scikit-learn

13
推荐指数
1
解决办法
2945
查看次数

在iOS中单独访问所有三个BLE广告频道

蓝牙低功耗使用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中访问三个广告频道的确切方式.

先感谢您.

objective-c rssi ios bluetooth-lowenergy

9
推荐指数
1
解决办法
456
查看次数

如何在iPhone中使用加速度计,gryoscope和磁力计获取用户位置?

使用内置惯性测量单元(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

6
推荐指数
0
解决办法
292
查看次数

Why does the Jama matrix inner dimension agree in the first iteration, but later it does not?

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)

android matrix jama matrix-multiplication android-studio

5
推荐指数
1
解决办法
126
查看次数

适用于iOS的Kalman过滤器

我正在尝试从部署在实验室天花板上的低功耗蓝牙信标获得平滑的rssi值。我使用了加权均值滤波器和移动平均滤波器,但效果不佳。通过各种期刊论文,我知道卡尔曼滤波器可以用于此目的。但是我无法获得合适的数学方程来使用Objective-C进行编码。有人可以提供有关数学方程式或卡尔曼滤波器实现的任何提示吗?非常感谢。

ios kalman-filter ibeacon

4
推荐指数
1
解决办法
3247
查看次数

如何使用扩展卡尔曼滤波器组合来自两个传感器的数据,其中一个传感器比另一个传感器更可靠?

我有两个传感器AB。我正在尝试使用扩展卡尔曼滤波器合并他们的传感器数据,以进行高效的数据分析。由于数据类型是非线性的,因此我使用扩展卡尔曼滤波器就我而言,来自传感器A的数据始终可靠,但来自传感器B的数据的可靠性随时间变化。例如,在 时t=0,其可靠性很高,并且可靠性逐渐(均匀)下降,直到t=T。在这种情况下,如何结合传感器数据以获得更好的优化结果?或者如何为来自传感器Bt=0的数据分配动态权重?t=T

更新:我必须在 EKF 的预测阶段使用来自传感器B的数据。

filtering data-analysis kalman-filter sensors

4
推荐指数
1
解决办法
3434
查看次数

高斯过程回归的内核参数:如何在 Scikit-learn 中获取它们?

我使用Scikit-learn 的GaussianProcessRegressor在我的回归操作中使用平方指数核或RBF。另外,我使用内部可用的优化器(L-BFGS-B 算法)来优化 Kernel 参数。在我的例子中,内核参数是长度尺度和信号方差。有关的文档如下:'fmin_l_bfgs_b'log_marginal_likelihood

在此处输入图片说明

我按照此文档打印GPML kernellog_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)

我打印内核参数的方法正确吗?

谢谢!

python regression scikit-learn hyperparameters

3
推荐指数
1
解决办法
2614
查看次数

从NSMutableArray中删除具有相同值的元素

NSMutableArray包含一些字符串作为元素.其中一个元素在数组中的不同索引处重复多次.例如[@"", @"1,2,3",@"",@"5,3,2,1",@""].我想@""从可变数组中删除所有带有值的元素.我尝试了以下方法,但无法得到解决方案.

  1. 使用For循环:

    for(id obj in myMutableArray)
    {
        if([obj isEqualToString:@""])
        {
            [myMytableArray removeObject:obj];
        }
    } 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用虚拟可变数组调用 nextMutableArray

    for(id obj in myMutableArray)
    {
        if([obj isEqualToString:@""])
        {
            continue;
        }
        else [nextMutableArray addObject:obj];
    }
    
    Run Code Online (Sandbox Code Playgroud)

在这两种方式中,@""其他索引的elements()被删除但不在索引0(第一个对象).可能的原因是什么?有没有办法@""从可变数组中删除包含字符串的所有元素?

objective-c nsmutablearray nsobject

2
推荐指数
1
解决办法
226
查看次数