确定一个点加入多个圆的概率。

问题描述 投票:0回答:1

我有一个平面上大约10个圆的中心和半径的列表。我还有一个散布在平面周围的约100个点的列表。用眼睛看,有些点非常近,甚至在一个圆里面,而有些点离任何圆都非常远。有些圆圈也非常接近,很多点也存在于这个区域。

数据相当简单。

圆:

    X         Y            Radius
0  -19.370525 -20.997882   22.486245
1  -33.666281  15.665494   8.487290
2  -24.816294 -47.834261   6.830408

            X          Y
0  -33.839499 -12.905389
1  -34.018966  17.154616
2  -34.019669 -22.445386

我基本上是在寻找一种方法来寻找哪些点最有可能与某个圆相关联。我还需要能够找到什么时候没有点可能与一个圆相关联,并识别什么时候一个点可能与多个圆相关联。理想的情况是,在寻找关联的可能性时,这也能够考虑到不同的圆有不同的半径这一事实。

我已经尝试了一些不同的东西。

  1. 高斯混合模型:我认为这可能是一个完全错误的方向, 因为它可以找到集群的点,但没有纳入圆圈。
    from astroML.plotting.tools import draw_ellipse   

    point_array = np.array([circles['X'],circles['Y']).T
    gmm = GaussianMixture(10).fit(point_array)
    log_dens = gmm.score_samples(point_array)     

    gmm_x = gmm.means_[:,0]
    gmm_y = gmm.means_[:,1]
    gmm_weights = gmm.weights_

    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.scatter(gmm_x,gmm_y,c='k')
    ax.scatter(points['X'],points['Y'],c='r')
    for mu, C, w in zip(gmm.means_,gmm.covariances_,gmm.weights_):
        draw_ellipse(mu,C,ax=ax,fc='none',ec='k')
  1. 高斯奈夫贝叶斯:所以这只是这个应该的开始,可能有很多错误。 我假设每个圆圈周围都有高斯分布,但我认为我做错了什么,因为大多数点对圆圈的成员资格的概率在1e-100的数量级,即使它们非常接近。另外,我没有一个好的方法来估计圆上的误差,所以我只是假设10%的误差,这也很可能有问题。
    p_circ_point = []

    for i in range(0,10):

        p_member_loc = []

        circ_x = circles['X'].values[i] 
        circ_y = circles['Y'].values[i]

        circ_rad = circles['Radius'].values[i]

        clus_err = 0.1 * circ_rad

        for j in range(len():

            point_x = points['X'][j]
            clump_y = points['Y'][j]

            delta_x = circ_x - point_x
            delta_y = circ_y - circ_y

            dist_clus_clump = np.sqrt(delta_x**2 + delta_y**2)
            p_l_m = (1/(np.sqrt(2*np.pi)*clus_err)) * \
                    np.e**(-(dist_clus_clump**2)/(2*clus_err**2))

            p_member_loc = np.append(p_member_loc,p_l_m)

        p_circ_point = np.append(p_circ_point,p_member_loc)

我也尝试了一些其他的东西,类似的缺乏成功。 如果你有什么想法或建议,将非常感激。谢谢您!我有一份中心和中心的清单。

python data-science probability
1个回答
0
投票

你对问题的描述很模糊。这些点和圆是如何定义的?

如果你有简单的定义,是不是简单地决定一个点属于哪个圆,或者计算点到圆心的距离和圆的半径之间的比值?

如果 radius(c1) / distance_to_centre(p1, c1) > 1,点 p1 在圈内 c1. 如果你计算 radius(cx) / distance_to_centre(p, cx) 对于每一个圆cx,哪一个有最高的值就会是你要找的圆。

(注意:如果点落在圆心上,要小心,如果你不检查它,你会得到一个除以零的结果)

如果你提供一些样本数据,代码应该是直接的。

© www.soinside.com 2019 - 2024. All rights reserved.