Friday 17 November 2017

Moving average in r package no Brasil


Ajustando uma rede neural no pacote R neuralnet As redes neurais sempre foram um dos modelos de aprendizagem de máquinas mais fascinantes na minha opinião, não só por causa do algoritmo de backpropagation extravagante, mas também por sua complexidade (pense na aprendizagem profunda com muitas camadas ocultas) E estrutura inspirada no cérebro. As redes neurais nem sempre foram populares, em parte porque elas eram, e ainda são, em alguns casos, computacionalmente dispendiosas e, em parte, porque não pareciam produzir melhores resultados quando comparados com métodos mais simples, como máquinas de vetor de suporte (SVMs). No entanto, Neural Newtorks, mais uma vez, levantou atenção e tornou-se popular. Nesta publicação, vamos encaixar uma rede neural simples usando o pacote neuralnet e encaixamos um modelo linear como comparação. O conjunto de dados Vamos usar o conjunto de dados de Boston no pacote MASS. O conjunto de dados de Boston é uma coleção de dados sobre valores habitacionais nos subúrbios de Boston. Nosso objetivo é prever o valor médio das casas ocupadas pelo proprietário (medv) usando todas as outras variáveis ​​contínuas disponíveis. Primeiro, precisamos verificar se nenhum ponto de dados está faltando, caso contrário, precisamos corrigir o conjunto de dados. Não há dados em falta, bom. Procedemos dividindo aleatoriamente os dados em um trem e um conjunto de testes, então nos ajustamos a um modelo de regressão linear e testei-lo no conjunto de testes. Observe que estou usando a função gml () em vez do lm (), isso será útil mais tarde quando validar o modelo linear. A função de amostra (x, tamanho) simplesmente exibe um vetor do tamanho especificado de amostras selecionadas aleatoriamente do vetor x. Por padrão, a amostragem é sem substituição: o índice é essencialmente um vetor aleatório de indeces. Uma vez que estamos lidando com um problema de regressão, vamos usar o erro quadrático médio (MSE) como uma medida de quanto nossas previsões estão longe dos dados reais. Preparando-se para se ajustar à rede neural Antes de montar uma rede neural, é necessário fazer algumas preparações. As redes neurais não são tão fáceis de treinar e sintonizar. Como primeiro passo. Vamos abordar o pré-processamento de dados. É uma boa prática normalizar seus dados antes de treinar uma rede neural. Não consigo enfatizar o quanto é importante este passo: dependendo do seu conjunto de dados, evitar a normalização pode levar a resultados inúteis ou a um processo de treinamento muito difícil (a maioria das vezes o algoritmo não converge antes do número de iterações máximas permitidas). Você pode escolher diferentes métodos para dimensionar os dados (z-normalização, escala min-max, etc8230). Eu escolhi usar o método min-max e dimensionar os dados no intervalo 0,1. Normalmente, a escala nos intervalos 0,1 ou -1,1 tende a dar melhores resultados. Portanto, escalamos e dividimos os dados antes de avançar: note que a escala retorna uma matriz que precisa ser coagida em um data. frame. Parâmetros Tanto quanto eu sei, não há uma regra fixa quanto a quantas camadas e neurônios usar, embora existam várias regras mais ou menos aceitas. Normalmente, se for necessário, uma camada oculta é suficiente para um grande número de aplicações. No que diz respeito ao número de neurônios, ele deve estar entre o tamanho da camada de entrada e o tamanho da camada de saída, geralmente 23 do tamanho da entrada. Pelo menos na minha breve experiência testando novamente e novamente é a melhor solução, pois não há garantia de que qualquer uma dessas regras se encaixe melhor em seu modelo. Como este é um exemplo de brinquedo, vamos usar duas camadas ocultas com essa configuração: 13: 5: 3: 1. A camada de entrada tem 13 entradas, as duas camadas ocultas têm 5 e 3 neurônios e a camada de saída tem, claro, uma única saída, já que estamos fazendo regressão. Let8217s se encaixam na rede: por algum motivo, a fórmula y não é aceita na função neuralnet (). Você precisa primeiro escrever a fórmula e depois passar como um argumento na função de montagem. O argumento oculto aceita um vetor com o número de neurônios para cada camada oculta, enquanto o argumento linear. output é usado para especificar se queremos fazer regressão linear. outputTRUE ou classificação linear. outputFALSE O pacote neuralnet fornece uma boa ferramenta para traçar o Modelo: esta é a representação gráfica do modelo com os pesos em cada conexão: as linhas pretas mostram as conexões entre cada camada e os pesos em cada conexão enquanto as linhas azuis mostram o termo de polarização adicionado em cada etapa. O viés pode ser pensado como a interceptação de um modelo linear. A rede é essencialmente uma caixa preta, então não podemos dizer muito sobre o encaixe, os pesos e o modelo. Basta dizer que o algoritmo de treinamento convergiu e, portanto, o modelo está pronto para ser usado. Predicando medv usando a rede neural Agora, podemos tentar prever os valores para o conjunto de teste e calcular o MSE. Lembre-se de que a rede irá produzir uma previsão normalizada, então precisamos dimensioná-la de volta para fazer uma comparação significativa (ou apenas uma previsão simples). Então, comparamos as duas MSEs, aparentemente, a rede está fazendo um trabalho melhor do que o modelo linear na previsão medv. Mais uma vez, tenha cuidado porque este resultado depende da divisão do teste de trem realizada acima. Abaixo, após a trama visual, vamos realizar uma validação cruzada rápida para ter mais confiança nos resultados. Uma primeira abordagem visual para o desempenho da rede e o modelo linear no conjunto de teste é traçada abaixo. O gráfico de saída Ao verificar visualmente o gráfico, podemos ver que as previsões feitas pela rede neural são (em geral) mais atraídas em torno da linha (Um alinhamento perfeito com a linha indicaria um MSE de 0 e, portanto, uma previsão perfeita ideal) do que aqueles feitos pelo modelo linear. Uma validação cruzada de validação cruzada (rápida) é outro passo muito importante para a construção de modelos preditivos. Embora existam diferentes tipos de métodos de validação cruzada, a idéia básica está repetindo o seguinte processo uma série de tempo: Faça a divisão do teste do trem Ajuste o modelo ao conjunto do trem Teste o modelo no conjunto de teste Calcule o erro de predição Repita o processo K vezes Então, calculando o erro médio, podemos entender como o modelo está fazendo. Vamos implementar uma validação de cruzamento rápido usando um loop for para a rede neural e a função cv. glm () no pacote de inicialização para o modelo linear. Tanto quanto eu sei, não existe uma função incorporada em R para realizar a validação cruzada neste tipo de rede neural, se você conhece tal função, informe-me nos comentários. Aqui está o MSE validado cruzado 10 vezes para o modelo linear: agora a rede. Observe que estou dividindo os dados desta maneira: 90 conjuntos de trem e 10 conjuntos de teste de forma aleatória por 10 vezes. Também estou inicializando uma barra de progresso usando a biblioteca plyr porque eu quero manter um olho no status do processo, já que o encaixe da rede neural pode demorar um pouco. Depois de um tempo, o processo é feito, calculamos o MSE médio e traçamos os resultados como um boxplot O código para o gráfico de caixa: O código acima exibe o seguinte boxplot: como você pode ver, o MSE médio para a rede neural (10,33 ) É menor do que o do modelo linear, embora pareça haver um certo grau de variação nas MSEs da validação cruzada. Isso pode depender da divisão dos dados ou da inicialização aleatória dos pesos na rede. Ao executar a simulação em diferentes momentos com diferentes sementes, você pode obter uma estimativa de ponto mais precisa para a MSE média. Uma nota final sobre a interpretação do modelo As redes neurais se assemelham muito a caixas pretas: explicar seu resultado é muito mais difícil do que explicar o resultado de um modelo mais simples, como um modelo linear. Portanto, dependendo do tipo de aplicativo que você precisa, você pode querer levar em consideração esse fator também. Além disso, como você viu acima, é necessário um cuidado extra para se adequar a uma rede neural e pequenas mudanças podem levar a resultados diferentes. Um resumo com o código completo para esta postagem pode ser encontrado aqui. Obrigado por ler este post, deixe um comentário abaixo se tiver alguma dúvida. Ffdatascienceplusi2deTIjpRyf8: nw7fAMXigPI: D7DqB2pKExk ffdatascienceplusdqj6IDK7rITs ffdatascienceplusi2deTIjpRyf8: nw7fAMXigPI: gIN9vFwOqvQ Nunca perca uma atualização Assine os R-bloggers para receber e-mails com as últimas postagens R. (Você não verá esta mensagem novamente). Ferramentas computacionais Analogamente, o DataFrame possui um método cov para calcular covariâncias em pares entre as séries no DataFrame, excluindo valores NAnull. Supondo que os dados em falta faltam aleatoriamente, isso resulta em uma estimativa para a matriz de covariância que é imparcial. No entanto, para muitas aplicações, esta estimativa pode não ser aceitável porque a matriz de covariância estimada não é garantida como positiva semi-definida. Isso poderia levar a correlações estimadas com valores absolutos que são superiores a uma, e uma matriz de covariância não reversível. Consulte Estimativa de matrizes de covariância para obter mais detalhes. DataFrame. cov também suporta uma palavra-chave de minperiods opcional que especifica o número mínimo de observações necessário para cada par de colunas para ter um resultado válido. Os pesos utilizados na janela são especificados pela palavra-chave wintype. A lista de tipos reconhecidos são: boxcar triang blackman hamming bartlett parzen bohman blackmanharris nuttall barthann kaiser (precisa de beta) gaussian (needs std) generalgaussian (precisa de poder, largura) slepian (precisa de largura). Observe que a caixa de caixa é equivalente à média (). Para algumas funções de janelagem, parâmetros adicionais devem ser especificados: Para. sum () com um wintype. Não há normalização feita para os pesos para a janela. Passar pesos personalizados de 1, 1, 1 produzirá um resultado diferente do que os pesos de 2, 2, 2. por exemplo. Ao passar um tipo de vitória em vez de especificar explicitamente os pesos, os pesos já estão normalizados para que o maior peso seja 1. Em contraste, a natureza do cálculo. mean () é tal que os pesos são normalizados uns com os outros. Os pesos de 1, 1, 1 e 2, 2, 2 produzem o mesmo resultado. Rolling Tempo-consciente Novo na versão 0.19.0. Novos na versão 0.19.0 são a capacidade de passar um deslocamento (ou conversível) para um método. rolling () e fazer com que eles produza janelas de tamanho variável com base na janela de tempo passada. Para cada ponto de tempo, isso inclui todos os valores anteriores que ocorrem dentro do delta de tempo indicado. Isso pode ser particularmente útil para um índice de freqüência de tempo não regular. Este é um índice de frequência regular. Usar um parâmetro de janela inteira funciona para rolar ao longo da freqüência da janela. Especificar um deslocamento permite uma especificação mais intuitiva da freqüência de rolamento. Usando um índice não regular, mas monotônico, rolar com uma janela inteira não fornece nenhum cálculo especial. Usando a especificação de tempo gera janelas variáveis ​​para esses dados esparsos. Além disso, agora permitimos um parâmetro opcional para especificar uma coluna (em vez do padrão do índice) em um DataFrame. Time-aware Rolling vs. Resampling Usando. rolling () com um índice baseado em tempo é bastante semelhante ao reesscrito. Ambos operam e realizam operações redutoras em objetos de pandas indexados no tempo. Ao usar. rolling () com um deslocamento. O deslocamento é um delta de tempo. Faça uma janela de visualização para trás, e agregue todos os valores nessa janela (incluindo o ponto final, mas não o ponto de início). Este é o novo valor nesse ponto no resultado. Estas são janelas de tamanho variável no espaço de tempo para cada ponto da entrada. Você receberá o mesmo resultado de tamanho que a entrada. Ao usar. resample () com um deslocamento. Construa um novo índice que seja a frequência do deslocamento. Para cada compartimento de frequência, agregue pontos da entrada dentro de uma janela de visualização para trás que se encontra naquela lixeira. O resultado dessa agregação é o resultado desse ponto de freqüência. As janelas são tamanho de tamanho fixo no espaço de frequência. Seu resultado terá a forma de uma freqüência regular entre o mínimo e o máximo do objeto de entrada original. Para resumir. Rolling () é uma operação de janela baseada no tempo, enquanto que. resample () é uma operação de janela baseada em freqüência. Centrando o Windows Por padrão, as etiquetas são definidas para a borda direita da janela, mas uma palavra-chave central está disponível para que as etiquetas possam ser definidas no centro. Funções de janela binária cov () e corr () podem calcular estatísticas de janela em movimento sobre duas séries ou qualquer combinação de DataFrameSeries ou DataFrameDataFrame. Aqui está o comportamento em cada caso: duas séries. Calcular a estatística para o emparelhamento. DataFrameSeries. Computa as estatísticas de cada coluna do DataFrame com a série passada, devolvendo um DataFrame. DataFrameDataFrame. Por padrão, computa a estatística para combinar nomes de colunas, retornando um DataFrame. Se o argumento da palavra-chave pairwiseTrue for passado, ele calcula a estatística para cada par de colunas, retornando um Painel cujos itens são as datas em questão (veja a próxima seção). Computação de rolamento de covariâncias e correlações em pares Na análise de dados financeiros e outros campos, it8217s comuns às margens de covariância e correlação de cálculo para uma coleção de séries temporais. Muitas vezes, um também está interessado em covariância de janela móvel e matrizes de correlação. Isso pode ser feito passando o argumento da palavra-chave pairwise, que no caso das entradas do DataFrame produzirá um Painel cujos itens são as datas em questão. No caso de um único argumento do DataFrame, o argumento pairwise pode ser omitido: os valores ausentes são ignorados e cada entrada é calculada usando as observações completas pairwise. Veja a seção de covariância para as advertências associadas a este método de cálculo de matrizes de covariância e correlação. Além de não ter um parâmetro de janela, essas funções têm as mesmas interfaces que suas contrapartes. Como acima, os parâmetros que todos eles aceitam são: minperíodos. Limite de pontos de dados não nulos para exigir. Padrões mínimos necessários para calcular estatística. Nenhum NaNs será emitido uma vez que os pontos de dados não-nulos de minperiods tenham sido vistos. centro. Booleano, seja para definir os rótulos no centro (o padrão é Falso) A saída dos métodos. rolling e. expanding não retorna um NaN se houver pelo menos minperiods valores não nulos na janela atual. Isso difere do cumsum. Cumprod. Cummax. E cummin. Que retornam NaN na saída onde quer que um NaN seja encontrado na entrada. Uma estatística de janela em expansão será mais estável (e menos responsivo) do que a contrapartida da janela rolante, pois o tamanho crescente da janela diminui o impacto relativo de um ponto de dados individual. Como exemplo, aqui está a saída média () para o conjunto de dados da série temporal anterior: Windows ponderado exponencial Um conjunto de funções relacionadas são versões ponderadas exponencialmente de várias das estatísticas acima. Uma interface semelhante a. rolling e. expanding é acessada através do método. ewm para receber um objeto EWM. Uma série de métodos EW expandidos (ponderados exponencialmente) são fornecidos:

No comments:

Post a Comment