私はポイントの雲があり、私は最もフィットするラインが必要です。私はJAMAを使用していますが、なぜ、何かが動作していないことがわかりません。おそらくそれはそれがどのように動作するのかわからない私のものです。私はNx3 Matrix(これはJAMA svdがサポートしているものです)を持っていて、Svdから適切なMatrix Vを取得します。私が必要とするベクトルは、最大の特異値に対応する右特異ベクトル(行または列)である。このベクトルは、主な方向を表すと考えられています。Java SVD with JAMA
すべてのベクトルは、yが最大の正の値であると仮定され、xは正または負の両方であり、zは負であると仮定されます。しかし、ときどき私が得るベクトルには負のyの値がありますが、とにかくそれが間違った方向を指しています。
ポイントのクラウドはかなり規則的で、すべてがy軸に沿って(zが小さくて負で)配置されています。だから、主な方向は本当に見つけやすいはずです。しかし、それはまだ適切に動作していません。
この場合、適切な行列Vの行ベクトル(私はcoloumnベクトルも試しました)を得ています。私はすでに "pointSet"から重心を差し引いています。
public static Matrix bestDirection(Matrix pointSet){
Matrix bestFittingLine = new Matrix(3,1);
SingularValueDecomposition svd = pointSet.svd();
bestFittingLine.set(0, 0, svd.getV().get(0, 0));
bestFittingLine.set(1, 0, svd.getV().get(0, 1));
bestFittingLine.set(2, 0, svd.getV().get(0, 2));
return bestFittingLine;
}
多分私は何かを考えていないと思います。私は別のテクニックや別のライブラリを使うべきでしょう。
なぜ簡単な線形回帰をしていませんか?最小の正方形はトリックをうまくやる必要があります。 – duffymo
@duffymo私はそれを行う方法と、それが3Dでどのように動作するかわからないので、zはxとyから独立しています。私はそれについていくつかの助けが大好きです。 – G4bri3l
Iv'eはそれを説明するscribd文書を持っていましたが、私は今あなたにアクセスできません。 Googleの "線形回帰多変数";次のようなものが得られます:http://www.stat.yale.edu/Courses/1997-98/101/linmult.htm。 SVDは素晴らしいですが、それは私の最初の選択ではありません。 – duffymo