文章目录
- 前言
- matlab代码
- 作用
- EEGLAB 中的代码
- 总结
- 参考文献
前言
- 在 EEGLAB 的使用中,运行程序时出现了
矩阵接近奇异值,或者缩放错误。结果可能不准确。RCOND = 1.873732e-20
的 bug,调查 EEGLAB 后发现是 raw 数据的问题。
matlab代码
A_1 = inv(A) % 矩阵的逆
A_2 = pinv(A) % 矩阵的伪逆
作用
- 在机器学习中,伪逆常用于低秩矩阵近似
- 在控制系统中,伪逆用于设计控制器,即使系统可能不可完全控制或观测。伪逆通过最小二乘方法计算控制规律,从而减少误差。
EEGLAB 中的代码
% 这行代码计算sphering矩阵。首先,cov(data')计算数据矩阵data的协方差矩阵。% 然后,sqrtm函数计算协方差矩阵的平方根。% inv函数计算这个平方根矩阵的逆矩阵。最后,将结果乘以2得到sphering矩阵。% 这个矩阵将被用来转换数据,使其具有单位方差和零相关性。% disp(data')sphere = 2.0*inv(sqrtm(double(cov(data')))); % find the "sphering" matrix = spher()
% meanvar = zeros(ncomps,1); % size of the projectionsif ncomps == urchans % if weights are square . . .winv = inv(weights*sphere);
-
removeICA,得到了非常奇怪的结果(Topograph 形状相同):
-
尝试将代码的
inv
改为pinv
,得到了非常奇怪的结果
-
由于矩阵不可逆,最后回去检查 EEG.data,发现有一行数据为直线,删除后数据正常。
总结
参考文献
[1]https://www.chenk.top/%E7%9F%A9%E9%98%B5%E4%BD%8E%E7%A7%A9%E8%BF%91%E4%BC%BC%20%E2%80%94%E2%80%94%20%E4%BC%AA%E9%80%86/