@@ -19,7 +19,7 @@ namespace gwm
1919class GWPCA : public SpatialMonoscaleAlgorithm , public IMultivariableAnalysis
2020{
2121private:
22- typedef arma::mat (GWPCA::*Solver)(const arma::mat&, arma::cube&, arma::mat&); // !< \~english Calculator to solve \~chinese 模型求解函数
22+ typedef arma::mat (GWPCA::*Solver)(const arma::mat&, arma::cube&, arma::cube&, arma:: mat&); // !< \~english Calculator to solve \~chinese 模型求解函数
2323
2424public: // Constructors and Deconstructors
2525
@@ -62,6 +62,20 @@ class GWPCA: public SpatialMonoscaleAlgorithm, public IMultivariableAnalysis
6262 */
6363 void setKeepComponents (int k) { mK = k; }
6464
65+ /* *
66+ * @brief \~english Get the Robust flag. \~chinese 获取是否使用鲁棒模式。
67+ *
68+ * @return bool \~english Robust flag \~chinese 是否使用鲁棒模式
69+ */
70+ bool robust () { return mRobust ; }
71+
72+ /* *
73+ * @brief \~english Set the Robust flag. \~chinese 设置是否使用鲁棒模式。
74+ *
75+ * @param robust \~english Robust flag \~chinese 是否使用鲁棒模式
76+ */
77+ void setRobust (bool robust) { mRobust = robust; mSolver = robust ? &GWPCA::solveRobustSerial : &GWPCA::solveSerial; }
78+
6579 /* *
6680 * @brief \~english Get the Local Principle Values matrix. \~chinese 获取局部主成分值。
6781 *
@@ -86,7 +100,7 @@ class GWPCA: public SpatialMonoscaleAlgorithm, public IMultivariableAnalysis
86100 /* *
87101 * @brief \~english Get the Scores matrix. \~chinese 获取得分矩阵。
88102 *
89- * @return arma::mat \~english Scores matrix \~chinese 得分矩阵
103+ * @return arma::mat \~english Scores matrix \~chinese 得分矩阵1
90104 */
91105 const arma::cube& scores () { return mScores ; }
92106
@@ -105,52 +119,77 @@ class GWPCA: public SpatialMonoscaleAlgorithm, public IMultivariableAnalysis
105119 *
106120 * @param x \~english Symmetric data matrix \~chinese 对称数据矩阵
107121 * @param loadings [out] \~english Out reference to loadings matrix \~chinese 载荷矩阵
122+ * @param scores [out] \~english Out reference to scores matrix \~chinese 得分矩阵
108123 * @param sdev [out] \~english Out reference to standard deviation matrix \~chinese 标准差
109124 * @return arma::mat \~english Principle values matrix \~chinese 主成分值矩阵
110125 */
111- arma::mat pca (const arma::mat& x, arma::cube& loadings, arma::mat& sdev)
126+ arma::mat pca (const arma::mat& x, arma::cube& loadings, arma::cube& scores, arma:: mat& sdev)
112127 {
113- return (this ->*mSolver )(x, loadings, sdev);
128+ return (this ->*mSolver )(x, loadings, scores, sdev);
114129 }
115130
116131 /* *
117- * @brief \~english Serial version of PCA funtion. \~chinese 单线程 PCA 函数。
132+ * @brief \~english Serial version of PCA funtion. \~chinese 单线程 PCA 函数。1
133+ *
134+ * @param x \~english Symmetric data matrix \~chinese 对称数据矩阵1
135+ * @param loadings [out] \~english Out reference to loadings matrix \~chinese 载荷矩阵1
136+ * @param scores [out] \~english Out reference to scores matrix \~chinese 得分矩阵1
137+ * @param sdev [out] \~english Out reference to standard deviation matrix \~chinese 标准差1
138+ * @return arma::mat \~english Principle values matrix \~chinese 主成分值矩阵1
139+ */
140+ arma::mat solveSerial (const arma::mat& x, arma::cube& loadings, arma::cube& scores, arma::mat& sdev);
141+
142+ /* *
143+ * @brief \~english Robust serial version of PCA function. \~chinese 鲁棒单线程 PCA 函数。
118144 *
119145 * @param x \~english Symmetric data matrix \~chinese 对称数据矩阵
120146 * @param loadings [out] \~english Out reference to loadings matrix \~chinese 载荷矩阵
147+ * @param scores [out] \~english Out reference to scores matrix \~chinese 得分矩阵
121148 * @param sdev [out] \~english Out reference to standard deviation matrix \~chinese 标准差
122149 * @return arma::mat \~english Principle values matrix \~chinese 主成分值矩阵
123150 */
124- arma::mat solveSerial (const arma::mat& x, arma::cube& loadings, arma::mat& sdev);
151+ arma::mat solveRobustSerial (const arma::mat& x, arma::cube& loadings, arma::cube& scores , arma::mat& sdev);
125152
126153 /* *
127154 * @brief \~english Function to carry out weighted PCA. \~chinese 执行加权PCA的函数。
128155 *
129156 * @param x \~english Symmetric data matrix \~chinese 对称数据矩阵
130157 * @param w \~english Weight vector \~chinese 权重向量
131- * @param V [out] \~english Right orthogonal matrix \~chinese 右边的正交矩阵
132- * @param d [out] \~english Rectangular diagonal matri \~chinese 矩形对角阵
158+ * @param U [out] \~english Left orthogonal matrix (scores) \~chinese 左正交矩阵(得分)
159+ * @param V [out] \~english Right orthogonal matrix (loadings) \~chinese 右正交矩阵(载荷)
160+ * @param d [out] \~english Rectangular diagonal matrix \~chinese 矩形对角阵
161+ */
162+ void wpca (const arma::mat& x, const arma::vec& w, arma::mat& U, arma::mat& V, arma::vec & d);
163+
164+ /* *
165+ * @brief \~english Function to carry out robust weighted PCA. \~chinese 执行鲁棒加权PCA的函数。
166+ *
167+ * @param x \~english Symmetric data matrix \~chinese 对称数据矩阵
168+ * @param w \~english Weight vector \~chinese 权重向量
169+ * @param U [out] \~english Left orthogonal matrix (scores) \~chinese 左正交矩阵(得分)
170+ * @param V [out] \~english Right orthogonal matrix (loadings) \~chinese 右正交矩阵(载荷)
171+ * @param d [out] \~english Rectangular diagonal matrix \~chinese 矩形对角阵
133172 */
134- void wpca (const arma::mat& x, const arma::vec& w, arma::mat& V, arma::vec & d);
173+ void rwpca (const arma::mat& x, const arma::vec& w, arma::mat& U , arma::mat& V, arma::vec & d);
135174
136175private: // Algorithm Parameters
137176 int mK = 2 ; // !< \~english Number of components to be kept \~chinese 要保留的主成分数量
138- // bool mRobust = false;
177+ bool mRobust = false ; // !< \~english Robust mode flag \~chinese 鲁棒模式标志
139178
140179private: // Algorithm Results
141- arma::mat mLocalPV ; // !< \~english Local principle component values \~chinese 局部主成分值
142- arma::cube mLoadings ; // !< \~english Loadings for each component \~chinese 局部载荷矩阵
143- arma::mat mSDev ; // !< \~english Standard Deviation \~chinese 标准差矩阵
144- arma::cube mScores ; // !< \~english Scores for each variable \~chinese 得分矩阵
145- arma::uvec mWinner ; // !< \~english Winner variable at each sample \~chinese 优胜变量索引值
180+ arma::mat mLocalPV ; // !< \~english Local principle component values \~chinese 局部主成分值1
181+ arma::cube mLoadings ; // !< \~english Loadings for each component \~chinese 局部载荷矩阵1
182+ arma::mat mSDev ; // !< \~english Standard Deviation \~chinese 标准差矩阵1
183+ arma::cube mScores ; // !< \~english Scores for each variable \~chinese 得分矩阵1
184+ arma::uvec mWinner ; // !< \~english Winner variable at each sample \~chinese 优胜变量索引值1
146185
147186private: // Algorithm Runtime Variables
148- arma::mat mX ; // !< \~english Variable matrix \~chinese 变量矩阵
149- arma::vec mLatestWt ; // !< \~english Latest weigths \~chinese 最新的权重
187+ arma::mat mX ; // !< \~english Variable matrix \~chinese 变量矩阵1
188+ arma::vec mLatestWt ; // !< \~english Latest weigths \~chinese 最新的权重1
150189
151- Solver mSolver = &GWPCA::solveSerial; // !< \~english Calculator to solve \~chinese 模型求解函数
190+ Solver mSolver = &GWPCA::solveSerial; // !< \~english Calculator to solve \~chinese 模型求解函数1
152191};
153192
154193}
155194
156- #endif // GWPCA_H
195+ #endif // GWPCA_H
0 commit comments