私が作業しているアプリケーションのLDA(線形判別分析)変換を計算しています。私はこれらを追跡しています。notes(36ページから始まります。特にスライド47は緑色)。LDA変換に適した数値解答
私は(numpyのとscipyのダウンロードと)Pythonでこれをやっている、これは私が出ているものです:私は他の人にそれを比較したように、この実装が正しいことを知っている
import numpy as np
from scipy.linalg import sqrtm
...
sw_inv_sqrt = np.linalg.inv(sqrtm(self.sigma_within))
self.d, self.v = np.linalg.eig(
np.dot(
np.dot(sw_inv_sqrt, self.sigma_between),
sw_inv_sqrt
))
self.v = np.dot(sw_inv_sqrt, self.v)
。私の懸念は、これが良いソリューションであるかどうかです。数値意味です。私の解決策を他のものと比較する際には、小数点以下6桁までしか一致しません。これを数値的に行うより良い方法はありますか?
これは本質的には数学的な質問です。*実装*ではなく、数値*メソッド*を求めています。 http://math.stackexchange.com/で尋ねるほうが良いかもしれません。 –
小数点以下6桁以上の精度が実際に必要ですか? (私は実際にはかなり良いと思うだろう)。あなたが参照する他のソリューションもPythonで実装されていますか?なぜあなたは他人の解があなたよりも数値的に優れていると思うのですか(フィッシャーの線形判別分析(http://en.wikipedia.org/wiki/Linear_discriminant_analysis)の射影ベクトルを計算する標準的な方法です)あなたはstats.stackexchange.comでも尋ねることができます。 –
@Sven:私は必ずしも同意ではありません。実装の詳細は、丸め誤差*を導入するかもしれません。これは、本質的に数学的な切り捨て誤差*私は数学の人々に敬意を払っています。私はそこより良い数値学者がいると思います。 –