0

R^nn不明なの球体に対してグリッド検索を (問題がある場合は Python で) 実装しようとしています。

入力には、球の半径と中心、およびthetaグリッドの解像度を制御するハイパーパラメータが含まれます。この球体の各点を、これら 3 つのパラメーターの関数として表現したいと思います。

また、立方体の面のみを反復して、立方体検索を検討することも考えています。(つまり、L_inf球体の反復)

n=2 だとわかっていたら、次のようにします。

import numpy as np

def enumerate_2d_sphere(R,theta,center=(0,0)):
    for n in xrange(int(2*np.pi / theta)+1):
        degree = n*theta
        point =(center[0]+R*np.cos(degree),center[1]+R*np.sin(degree))
        yield point

for p in enumerate_2d_sphere(1,0.1):
    print p

任意に大きくなる可能性があるためn、球\キューブを効率的に反復処理する方法を探しています。

何か案は?

++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++

私は、ストラブリーが提案したものの修正版を使用することになりました:

import itertools
import numpy as np
import matplotlib.pyplot as plt

def f(d, center, scale=1):
    dim = len(center)
    print d/-2.0
    diff = scale * np.array([d/-2.0 for _ in xrange(dim)])
    bias = diff + center
    for i in range(dim):
        l = ([ xrange(1,d) for _ in xrange(i)] +
             [[0,d]] +
             [ xrange(d+1) for _ in xrange(dim-i-1)]
            )
        for r in itertools.product(*l):
            yield scale*np.array(r)+bias
#example for R^2:
center = (1,1.5)
data = np.array([x for x in f(20,center,scale = 0.1)])


plt.scatter(data[:,0], data[:,1],color='r',s=100,alpha=0.5)
plt.scatter(center[0], center[1],color='b',s=300,alpha=0.5)
plt.show()

出力図:

ここに画像の説明を入力

もう 1 つのオプションは 、球上に均一に分散されたサンプルを生成することです。サンプルの数がポイントの「密度」(または期待される密度) を制御することに注意してください。

import numpy as np
def generate_random_points(R,center,quantity=1000):
    """
    :param R: float
    :param center: np.array
    :param quantity: int
    """
    dim = len(center)
    for n in xrange(quantity):
        s = np.random.normal(0, 1,dim)
        r = np.sqrt(np.dot(s,s))
        s = (R/r) * s
        yield s+center

(単純さと効率の点で) 最悪の方法は、n-1 角度の列挙を使用して球上に点を生成することです。効率の欠如は、計算された製品の必要性に起因しsincos多くの場合(これもハッキングされる可能性があります)

4

2 に答える 2

0

sklearn グリッド検索機能にこのオプションがあるとは思いませんが、これを手動で実装するのは難しくないはずです

  • n の値を繰り返す
  • nごとに、0から360までのシータストライドでn個の異なる角度パラメータを反復します
  • 球のボリュームが必要ない場合は、半径も反復します。表面だけが必要な場合は、半径を一定に保ちます
于 2016-02-28T08:03:48.387 に答える