¿Debería alguien interesado en hacer investigación de aprendizaje automático aprender NumPy o MATLAB?

Ambas serían mi respuesta. MATLAB en realidad se comporta exactamente como cabría esperar desde la perspectiva del álgebra lineal y NumPy no. Entonces, si desea aprender los algoritmos y usar la notación matemática como referencia, el código MATLAB casi se parece a la ecuación matemática.

Usemos algunos ejemplos de un video de la conferencia Stanford Machine Learning.

Modelo de regresión lineal donde [math] x_0 = 1 [/ math]
[matemáticas] h_ \ theta (x ^ {(i)}) = \ sum_ {j = 0} ^ n \ theta_jx_j ^ {(i)} = \ theta ^ Tx [/ matemáticas]

En MATLAB
h = theta'*x;

Aquí hay una función sigmoidea utilizada en el modelo de regresión logística.
[matemáticas] g (z) = \ frac {1} {1 + e ^ {- z}} [/ matemáticas]

En MATLAB
g = 1 ./ (1 + exp(-z));

NumPy usa la transmisión y eso no es parte del álgebra lineal y sus vectores pierden dimensión a menos que use explícitamente una matriz 2D. Siempre y cuando seas consciente de esas peculiaridades, está bien. De hecho, los usé a ambos, según sea necesario. Tiendo a usar MATLAB más si necesito implementar un nuevo algoritmo de un trabajo de investigación, mientras que necesito usar NumPy si estoy trabajando con alguien que no usa MATLAB.

Aquí hay un código NumPy que realiza un producto de puntos simple entre los vectores A y B, que es una transposición de A. Matemáticamente,
[matemáticas] C = AB [/ matemáticas].

Tenga en cuenta que debe especificar A como una matriz 2D; de lo contrario, la transposición no funcionará.

A = np.arange (1,6) # dimensioned 1D array, no puede transponer esto
A = np.arange (1,6) [np.newaxis ,:] # matriz 2D
B = AT # transponiendo A
C = A * B # este resultado en la multiplicación por elementos debido a la transmisión
C = np.dot (A, B) # tienes que hacer esto

Lo mismo en MATLAB

A = 1: 5;
B = A ‘;
C = A * B

Curiosamente, Andew Ng, cofundador de Coursera, dice en uno de sus videos en el curso de Machine Learning, explicando por qué fue con Octave para este curso (un clon de código abierto de MATLAB)

Lo que descubrí fue que los estudiantes podían aprender los algoritmos prototipo más productivos, más rápidos y más rápidos utilizando lenguajes de nivel relativamente alto como Octave

y continúa

Si conoces Python, NumPy, o si conoces R, veo que algunas personas lo usan, pero lo que veo es que la gente terminó desarrollándose algo más lentamente en estos lenguajes porque la sintaxis de Python NumPy es un poco más …

Creo que estaba hablando de que NumPy no seguía las convenciones de álgebra lineal con mayor fidelidad, tal vez para mantener una sintaxis similar a Python.

Solo por diversión, vea este segmento de video de la conferencia de Andrew Ng en Stanford donde habla sobre MATLAB y comparte una anécdota interesante (alrededor de 25 minutos en el video)

La pregunta realmente se reduce a: ¿Espera trabajar en una pequeña empresa / academia o en una gran corporación? Si es lo primero, entonces Python; De lo contrario, Matlab.

Matlab tiene un rendimiento más rápido listo para usar / ingenuo, mejor documentación, más soporte técnico y mejores capacidades de visualización. Pero existe como un jardín amurallado. Algunas personas encuentran eso como un desafío. Contrariamente a muchas opiniones ignorantes, ambas tienen rendimientos similares después de la optimización (la optimización de Python con numpy y BLAS es casi igualmente eficiente; Matlab tiene la ingenua ventaja de la velocidad de implementación).

Observe también las prácticas de codificación / entorno de sus grupos de investigación favoritos, cuyo trabajo desea recrear. Utilice el entorno en el que elijan liberar su fuente.

Muchas personas que trabajan con conjuntos de datos blandos (textos, xml, API web) eligen usar Python, pero las personas que trabajan con conjuntos de datos duros (imágenes, voz, señales de potencia) eligen trabajar con Matlab. Por ejemplo, la investigación de tecnología de bioimagen utiliza matlab exclusivamente.

Python tiene más bibliotecas relacionadas con ML (scikit-learn, Theano, PyBrain, etc.) y es de código abierto.

MATLAB es más fácil de aprender y sus representaciones matriciales son más intuitivas.

En mi opinión, Python es una mejor opción, especialmente si necesita usar algoritmos ML estándar.

Se realiza un gran trabajo muy bueno en matlab, pero si desea que más personas usen sus ideas, use Python o Java

Yo diría que si desea trabajar en una gran corporación, debe elegir algo de código abierto y escalable como Deeplearning4j: código abierto, aprendizaje profundo distribuido para la JVM. Muchas otras herramientas tienen problemas cuando intentan escalar.