4

10 次元空間で 9 点の凸包を計算しようとしています。scipy インターフェイスを介して、私は呼び出しscipy.spatial.ConvexHull(points)て取得していますQH6214 qhull input error: not enough points(9) to construct initial simplex (need 12)

次元に関係なく、凸包の定義は明確に定義されていると思います。ここで何が起こっているのですか?これを修正するために呼び出すことができる別の関数はありますか?

4

1 に答える 1

3

おそらく、ハルを計算する前に超平面にポイントを投影するとうまくいくでしょう。

たとえば、ツールキットの主成分分析クラスsklearn.decomposition.PCAを使用しscikit-learnて次元を削減します。

vertices = np.random.randn(9, 10)
from sklearn.decomposition import PCA
model = PCA(n_components=8).fit(vertices)

と を使用して、頂点から投影されたものに前後に変換できるようにmodel.transformなりmodel.inverse_transformました。

proj_vertices = model.transform(vertices)
hull_kinda = ConvexHull(proj_vertices)
hull_kinda.simplices

これは次のようなものを出力します

array([[6, 4, 3, 8, 0, 7, 5, 1],
       [2, 4, 3, 8, 0, 7, 5, 1],
       [2, 6, 3, 8, 0, 7, 5, 1],
       [2, 6, 4, 8, 0, 7, 5, 1],
       [2, 6, 4, 3, 0, 7, 5, 1],
       [2, 6, 4, 3, 8, 7, 5, 1],
       [2, 6, 4, 3, 8, 0, 5, 1],
       [2, 6, 4, 3, 8, 0, 7, 1],
       [2, 6, 4, 3, 8, 0, 7, 5]], dtype=int32)

を使用model.inverse_transformして、単純化を 10 次元に戻します。

于 2014-10-20T00:39:21.243 に答える