Permítanme responder a la pregunta en un meme.
Por qué (siempre) aprendizaje profundo? Todas las redes neuronales qué es la regresión lineal (x*w+b) entre los no-linealidad en torno a la (intermedio) de la respuesta.
Vamos a hablar de la máquina de aprendizaje, mejor aún, de optimización. La obvia general de la clase de problemas te refieres es la función de la aproximación (no de regresión de por sí). Así que, ¿por qué no utilizar el método que fue desarrollado para hacer exactamente esto: que la escritura de programas. En teoría, sí, puede usar 'inteligencia artificial' métodos para crear programas y uno de ellos, teniendo en cuenta la cantidad suficiente de datos y el tiempo, teóricamente, puede ser FizzBuzz. O a un programa que calcula los números primos (y que programa podría ser teóricamente el mismo cuando está escrito por un ser humano). -- No hay aprendizaje profundo aquí -.
Aprendizaje a partir de los datos
Así, podemos aprender a partir de los datos? Sí, podemos. Pero primero debemos entender los datos y el ingeniero de algunas características. Porque sólo uno numérico no es una función expresiva suficiente... (por ahora).
Código entrante:
library(tidyverse)
theData <- data_frame(a = as.double(1:100),
a3 = as.double(a %% 3 == 0),
a5 = as.double(a %% 5 == 0),
cl = case_when((a3 > 0) & (a5 > 0) ~ 'FizzBuzz',
a3 > 0 ~ 'Fizz',
a5 > 0 ~ 'Buzz',
TRUE ~ 'Number')) %>%
mutate(cl = factor(cl))
Ahora tenemos una característica numérica de una (números) y a3 y a5 te ayuda con la decisión ...
... árbol. (╯°□°)╯︵ ┻━┻ de nuevo, no aprendizaje profundo aquí. Pero una apilada modelo: el primer nivel es el DT y scond nivel (uso de Viola-Jones-Cascadas o simple filtro en la Number
de respuestas), un viejo y simple de regresión lineal con la solución de $y=a$.
El DT de primera:
treeModel <- rpart::rpart(cl ~ ., theData,
control = rpart::rpart.control(minsplit = 5))
rattle::fancyRpartPlot(treeModel, caption = '')
ESO ES DE LOCOS! Un simple árbol de decisión aprendido FizzBuzz! Pero lo hizo?
Aplicar algunos de los datos de prueba:
testData <- data_frame(a = as.double(200:300),
a3 = as.double(a %% 3 == 0),
a5 = as.double(a %% 5 == 0),
cl = case_when((a3 > 0) & (a5 > 0) ~ 'FizzBuzz',
a3 > 0 ~ 'Fizz',
a5 > 0 ~ 'Buzz',
TRUE ~ 'Number'))
predictions <- predict(treeModel, testData, type = 'class')
table(testData$cl, predictions)
predictions
Buzz Fizz FizzBuzz Number
Buzz 14 0 0 0
Fizz 0 27 0 0
FizzBuzz 0 0 7 0
Number 0 0 0 53
Perfecto en el examen del conjunto de los números 200 a 300!
Bien, la segunda capa es fácil:
lmModel <- lm(arep ~ a - 1, mutate(theData, arep = a))
El error de la estimación del número de
testData %>%
mutate(pred = predict(treeModel, ., type = 'class')) %>%
filter(pred == 'Number') %>%
mutate(apred = predict(lmModel, .),
error = a - apred) %>%
pull(error) %>%
summary()
Min. 1st Qu. Median Mean 3rd Qu. Max.
5.684e-14 5.684e-14 5.684e-14 5.684e-14 5.684e-14 5.684e-1
... bueno, muy cercano a 0. Tada!
Hemos aprendido FizzBuzz a partir de los datos!
Derp de aprendizaje
Probablemente usted puede hacer lo mismo con el aprendizaje profundo. Usted también puede hacer apilados modelos con LSTM capas y de convolución (ya saben, porque de módulo 3 y 5), y con una enorme cantidad de datos que usted puede tener una oportunidad para generalizar algunos patrones... sí... no.
Así que espero que esta respuesta ayuda a aclarar que sí es posible. Y no, usted no necesita aprendizaje profundo para hacer el trabajo. Y ahora, a partir de una sola característica a
incluso lo profundo de aprendizaje no ser capaz de aprender FizzBuzz.
Como para los números primos... si calcular/ingeniero tantas características como hay números primos, usted puede aprender a partir de los datos, también. _(ツ)_/