Actually, it makes more sense to change

    B = safe_sparse_dot(Q.T, M)

To
    B = safe_sparse_dot(Q.T.conj(), M)

On 10 August 2017 at 16:56, André Melo <andre.nascimento.m...@gmail.com> wrote:
> Hi Olivier,
>
> Thank you very much for your reply. I was convinced it couldn't be a
> fundamental mathematical issue because the singular values were coming
> out exactly right, so it had to be a problem with the way complex
> values were being handled.
>
> I decided to look at the source code and it turns out the problem is
> when the following transformation is applied:
>
> U = np.dot(Q, Uhat)
>
> Replacing this by
>
> U = np.dot(Q.conj(), Uhat)
>
> solves the issue! Should I report this on github?
>
> On 10 August 2017 at 16:13, Olivier Grisel <olivier.gri...@ensta.org> wrote:
>> I have no idea whether the randomized SVD method is supposed to work for
>> complex data or not (from a mathematical point of view). I think that all
>> scikit-learn estimators assume real data (or integer data for class labels)
>> and our input validation utilities will cast numeric values to float64 by
>> default. This might be the cause of your problem. Have a look at the source
>> code to confirm. The reference to the paper can also be found in the
>> docstring of those functions.
>>
>> --
>> Olivier
>>
>> _______________________________________________
>> scikit-learn mailing list
>> scikit-learn@python.org
>> https://mail.python.org/mailman/listinfo/scikit-learn
>>
_______________________________________________
scikit-learn mailing list
scikit-learn@python.org
https://mail.python.org/mailman/listinfo/scikit-learn

Reply via email to