- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
假设我有一个在 6 维空间中给出的点云,我可以根据需要使其变得尽可能密集。这些点原来位于低维多面体的表面上(即点向量 (x1, x2, ... x6) 似乎是共面的)。
我想找到这个未知多胞形的顶点,我目前的尝试是通过 Python 中的 scipy 接口(interface)使用 qhull 算法。一开始我只会收到错误消息,显然是由低维输入和/或许多退化点引起的。我尝试了几种强力方法来消除退化点,但不是很成功,所以最后我认为所有这些点都必须位于凸包上。
This question 非常有帮助,因为它建议通过主成分分析进行降维。如果我将这些点投影到 4D 超平面,则 qhull 算法运行时不会出现错误(对于任何更高的维度,它都不会运行)。
from scipy.spatial import ConvexHull
from sklearn.decomposition import PCA
model = PCA(n_components=4).fit(initial_points)
proj_points = model.transform(initial_points)
hull = ConvexHull(proj_points, qhull_options = "Qx")
上述问题的答案中提到,在计算投影点的凸包后,需要将单纯形转换回来。但是 qhull 输出仅包含索引,为什么这些与初始点的索引不匹配?
现在我的问题是我不知道使用哪个精度来实际获得正确的顶点。无论我制作点云的密度如何,获得的顶点都具有不同的精度。例如,对于 (10000, 6) 数组中的初始点,我得到(其中 E0.03 是它适用的最大值):
hull1 = ConvexHull(proj_points, qhull_options = "Qx, E0.03")
print len(hull1.vertices)
print hull1.vertices
5
[ 437 2116 3978 7519 9381]
并将其绘制在轴 0、1、2 的一些(不是非常有用的)投影中(其中蓝色点代表初始点云的选择):
但是为了更高的精度(当然)我得到了不同的集合:
hull2 = ConvexHull(proj_points, qhull_options = "Qx, E0.003")
print len(hull2.vertices)
print hull2.vertices
29
[ 74 75 436 437 756 1117 2116 2366 2618 2937 3297 3615 3616 3978 3979
4340 4561 4657 4659 4924 5338 5797 6336 7519 7882 8200 9381 9427 9470]
相同的投影(只是角度略有不同):
我怀疑第一张图片没有足够的顶点而第二张图片可能有太多。当然,我无法从这些图中提取严格的信息。但是有没有一种好方法可以找出要使用的精度?或者也许是一个完全不同的方法来解决这个问题(我已经尝试了一些)?
最佳答案
在这个答案中,我假设您已经使用 PCA 将数据近乎无损地压缩为 4 维数据,其中缩减后的数据位于概念上面较少的 4 维多胞形中。我将描述一种解决此多胞体的面的方法,这反过来会为您提供顶点。
令 R4 中的 xi, i = 1, ..., m 为 PCA 缩减的数据点。
设 F = (a, b) 是一张脸,其中 a 在 R4 中,a • a = 1,b 在 R 中。
我们定义人脸损失函数 L 如下,其中 λ+, λ-> 0 是您选择的参数。 λ+ 应该是一个非常小的正数。 λ- 应该是一个非常大的正数。
L(F) = sumi(λ+ • max(0, a • xi + b) - λ- • min(0, a • xi + b))
我们想找到关于损失函数 L 的最小面 F。所有最小面的小集合将描述您的多面体。您可以通过随机初始化 F 然后使用偏导数 ∂L/∂aj、j = 1、2、3、4 和 ∂L/∂b 执行梯度下降来求解最小面。在梯度下降的每一步,通过归一化约束a•a为1。
∂L/∂aj = sumi(λ+ • xj • [a • xi + b > 0] - λ- • xj • [a • xi + b < 0]) 对于 j = 1, 2, 3, 4
∂L/∂b = sumi(λ+ • [a • xi + b > 0] - λ- • [a • xi + b < 0])
备注Iverson brackets : 如果 P 为真,[P] = 1,如果 P 为假,则 [P] = 0。
关于python - 更高维度的凸包,找到多面体的顶点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27889591/
我有一个 DIV #page,如果我在顶部添加边距,突然出现一个滚动条,即使该元素不大于主体。我怎样才能去掉滚动条? (参见 Fiddle) 我的 HTML I am a div siz
function getClosestValue(standardArray, targetVal) { standardArray = standardArray.sort(function(a,
我有 318x424 的书籍封面图片,我想做的是指定一张图片,并在其下方添加一个文本链接。初始 src 是 about:blank,这样如果响应式设计不显示框架,它就不会占用用户带宽。 框架的 HTM
我被这个问题困了两天了,还是没搞定。 基本上,我有一个二维数组,其中包含某些数字(在给定范围内)之间的关系: 0 = 顺序无关紧要 1 = 第一个数字(左栏中的数字)应该是第一个 2 = 第二个数字(
只有当我在更高的 API 上进行调试时,我才会强制关闭脚本:16,但是当涉及到 API 时它工作正常:10。这可能是我的项目设置问题吗? 这是对服务器的简单请求,以获取 fragment 中的类别列表
给定下表books id | listorder ----+----------- 3 | 1 2 | 2 1 | 3 4 |
我想要那个密码切换功能,好像TextInputLayout有这个功能,而不是 TextInputEditText .但是正如您在下面的代码中看到的,即使我将高度设置为 wrap_content和 ap
似乎从 读取给出空列表,它主要发生在延迟较高的网络上的主机上。是否有更强大的与远程主机交互的方式? use Net::SSH2; # my $ssh = Net::SSH2->new(); # ..
为了在 Play 商店中发布我的应用程序,我必须将 TargetSdkVersion 从 23 更改为 26。在我更改它之前,该应用程序运行良好!现在应用程序在启动时崩溃。我想通了,问题出在这两行:
我尝试了很多解决方案,但找不到一个。我有 3 个不同的列,其中包含不同类型的文本,我需要它们具有相同的高度。但它们是这样不同的:colums有人可以帮忙吗? 代码: .col-sm-2{
我尝试将一个 div 相对于其具有负顶值的父级定位。这工作正常,现在的问题是这个 div,即使它有一个负的 top 值也会使父 div 更大。 我该怎么做才能让父 div 不那么大? Here's a
这是一个一般性问题,可能适用于任何给定的语言,如 C、C++、Java 等。 我认为无论以何种方式实现它,都不会比使用 2 个循环更高效,后者的效率为 n^2。 for(i=0;i O(1) ),要么
我需要查找所有有订单的家庭。我根本不关心订单的数据,只关心它的存在。 (使用 SQL Server) 这样说是不是更有效率: SELECT HouseholdID, LastName, FirstNa
我有一个 UINavigationController,在屏幕顶部有一个 UINavigationBar,在底部有一个 UIToolbar。我想让工具栏高一点。这是我的代码: CGRect toolb
我正在使用自定义字体。该字体在我的 Windows PC 上完美运行,但在我的 Mac (Yosemite OSX) 上运行不佳。正如您在图片中看到的,Mac 上的字体比 Windows 上的字体稍大
我正在尝试使用 FaSTLane 将我的应用程序作为 alpha 版本部署到 Play 商店,但出现此错误: Google Api 错误:multiApkShadowedActiveApk:任何设备都
我在这里找不到神奇的调味料。看起来 API 不支持它,所以我想我正在寻找一些 CSS 来使 slider 更大。 我得到的是左边的,但我想把它设计成右边的样子?任何 CSS 技巧或以前有人这样做过。
如果我运行这段代码: float a=1.123456789; printf("The float value is %f\n",a); double b=1.123456789876543 prin
我正在尝试使用 strip binary 来剥离我的目标文件。我在 gcc-7 上构建了最新的 binutils,但我的代码库使用 gcc-4.9.2。Binutils 是为 64 位架构构建的,我的
有没有办法让 iPhone 应用的“内容”区域感知到更大的导航栏? 类似这些问题: iOS: Adding a fixed image just below the navigation bar iO
我是一名优秀的程序员,十分优秀!