
Olá Khabrozhiteli, entregamos à gráfica um novo livro
"Machine Learning: Algorithms for Business" . Aqui está um trecho sobre os métodos de conjunto, cujo objetivo é explicar o que os torna eficazes e como evitar erros comuns que levam ao mau uso das finanças.
6.2 Três fontes de erro
Os modelos MO geralmente sofrem de três
erros .
1. Viés: esse erro é causado por suposições irrealistas. Quando o viés é alto, isso significa que o algoritmo MO não conseguiu reconhecer as relações importantes entre as características e os resultados. Nesta situação, diz-se que o algoritmo está "mal ajustado".
2. Dispersão: esse erro é causado pela sensibilidade a pequenas alterações no subconjunto de treinamento. Quando a variação é alta, isso significa que o algoritmo é realinhado com o subconjunto de treinamento e, portanto, mesmo alterações mínimas no subconjunto de treinamento podem produzir previsões terrivelmente diferentes. Em vez de modelar padrões gerais em um subconjunto de treinamento, o algoritmo recebe por engano ruído para o sinal.
3. Ruído: Esse erro é causado pela dispersão dos valores observados, como alterações imprevisíveis ou erros de medição. Este é um erro fatal que não pode ser explicado por nenhum modelo.
Um método de conjunto é um método que combina muitos alunos fracos, que são baseados no mesmo algoritmo de aprendizado, com o objetivo de criar um aluno (mais forte), cujo desempenho é melhor do que qualquer um dos alunos. As técnicas de conjunto ajudam a reduzir o viés e / ou dispersão.
6.3 Agregação de Bootstrap
O empacotamento (agregação) ou agregação de amostras de autoinicialização é uma maneira eficaz de reduzir a variação nas previsões. Funciona da seguinte forma: primeiro, é necessário gerar N subconjuntos de dados de treinamento usando amostragem aleatória com retorno. Segundo, ajuste N avaliadores, um para cada subconjunto de treinamento. Esses avaliadores são ajustados independentemente um do outro, portanto, os modelos podem ser ajustados em paralelo. Em terceiro lugar, a previsão do conjunto é uma média aritmética simples das previsões individuais dos modelos N. No caso de variáveis categóricas, a probabilidade de uma observação pertencer a uma classe é determinada pela parcela de avaliadores que classificam essa observação como membro dessa classe (por maioria de votos, ou seja, por maioria). Quando o avaliador de base pode fazer previsões com a probabilidade de previsão, o classificador ensacado pode obter o valor médio das probabilidades.
Se você usar a classe baggingClassifier da biblioteca sklearn para calcular a precisão sem pacotes, deverá saber sobre esse defeito:
https://github.com/scikit-learn/scikitlearn/issues/8933 . Uma solução alternativa é renomear rótulos em uma ordem seqüencial de número inteiro.
6.3.1 Redução de dispersão
A principal vantagem do ensacamento é que ele reduz a variação das previsões, ajudando assim a resolver o problema do excesso de ajuste. A variação na previsão em saco (φi [c]) é uma função do número de avaliadores em saco (N), a variação média da previsão realizada por um avaliador (σ̄) e a correlação média entre suas previsões (ρ̄):
O bootstraping seqüencial (capítulo 4) é tornar a amostragem o mais independente possível, reduzindo assim ρ̄, o que deve reduzir a dispersão dos classificadores ensacados. Na fig. 6.1, plotamos o diagrama de desvio padrão da previsão em bolsa em função de N ∈ [5, 30], ρ̄ ∈ [0, 1] e σ̄ = 1.
6.3.2 Precisão aprimorada
Considere um classificador ensacado, que faz predições em k classes por um voto majoritário entre N classificadores independentes. Podemos designar previsões como {0,1}, em que 1 significa previsão correta. A precisão do classificador é a probabilidade p de marcar a previsão como 1. Em média, obtemos previsões de Np marcadas como 1 com uma variação de Np (1 - p). A votação majoritária faz a previsão correta quando a classe mais previsível é observada. Por exemplo, para N = 10 ek = 3, o classificador ensacado fez a previsão correta quando observado
Listagem 6.1. A correção do classificador ensacado
from scipy.misc import comb N,p,k=100,1./3,3. p_=0 for i in xrange(0,int(N/k)+1): p_+=comb(N,i)*p**i*(1-p)**(Ni) print p,1-p_
Esse é um argumento forte a favor de agrupar qualquer classificador no caso geral, quando os recursos computacionais permitirem. No entanto, diferentemente do impulso, o empacotamento não pode melhorar a precisão dos classificadores fracos:
Para uma análise detalhada deste tópico, aconselha-se o leitor a recorrer ao teorema do júri de Condorcet. Embora esse teorema tenha sido obtido com a finalidade de votação majoritária na ciência política, o problema abordado por esse teorema tem características comuns ao descrito acima.
6.3.3 Redundância de observações
No capítulo 4, examinamos uma das razões pelas quais as observações financeiras não podem ser consideradas igualmente distribuídas e independentes entre si. Observações excessivas têm dois efeitos prejudiciais no ensacamento. Em primeiro lugar, é mais provável que amostras colhidas com retorno sejam quase idênticas, mesmo que não tenham observações comuns. Faz

e o empacotamento não reduzirão a variação, independentemente de N. Por exemplo, se cada caso em t for marcado de acordo com um retorno financeiro entre t e t + 100, será necessário selecionar 1% dos casos por avaliador em saco, mas não mais. No capítulo 4, seção 4.5, são recomendadas três soluções alternativas, uma das quais foi definir max_samples = out ['tW']. Mean () na implementação da classe de classificador ensacado na biblioteca sklearn. Outra (melhor) solução foi a aplicação do método de seleção seqüencial de inicialização.
O segundo efeito prejudicial da redundância de observação é que a precisão de pacotes extras será inflada. Isso se deve ao fato de que a amostragem aleatória com amostragem retorna às amostras do subconjunto de treinamento que são muito semelhantes às de fora do pacote. Nesse caso, a validação cruzada correta do bloco k estratificado sem embaralhar antes da divisão mostrará muito menos precisão no subconjunto de teste do que o avaliado fora da embalagem. Por esse motivo, ao usar esta classe de biblioteca do sklearn, é recomendável definir stratifiedKFold (n_splits = k, shuffle = False), verificar o classificador ensacado e ignorar os resultados de precisão sem pacote. Um k baixo é preferível a um k alto, pois a divisão excessiva colocará novamente padrões no subconjunto de teste que são muito semelhantes aos usados no subconjunto de treinamento.
6.4 Floresta aleatória
As árvores de decisão são bem conhecidas, pois tendem a se ajustar demais, o que aumenta a variação das previsões. Para resolver esse problema, um método de floresta aleatória (RF) foi desenvolvido para gerar previsões de conjuntos com menor variação.
Uma floresta aleatória tem algumas semelhanças comuns com o empacotamento, no sentido de treinar avaliadores individuais independentemente em subconjuntos de dados com inicialização. A principal diferença do ensacamento é que um segundo nível de aleatoriedade é construído em florestas aleatórias: durante a otimização de cada fragmentação nodal, apenas uma subamostra aleatória (sem retorno) de atributos será avaliada, a fim de correlacionar ainda mais os avaliadores.
Como ensacamento, uma floresta aleatória reduz a variação das previsões sem superajustar (lembre-se disso até). A segunda vantagem é que uma floresta aleatória avalia a importância dos atributos, que discutiremos em detalhes no Capítulo 8. A terceira vantagem é que uma floresta aleatória fornece estimativas de precisão fora da embalagem, mas em aplicações financeiras é provável que elas sejam infladas (como descrito em Seção 6.3.3). Mas, como ensacamento, uma floresta aleatória não necessariamente apresenta viés menor do que as árvores de decisão individuais.
Se um grande número de amostras for redundante (não igualmente distribuído e independente mutuamente), ainda haverá um reajuste: a amostragem aleatória com retorno criará um grande número de árvores quase idênticas (), onde cada árvore de decisão é super ajustada (uma desvantagem pela qual as árvores de decisão são notórias) . Ao contrário do empacotamento, uma floresta aleatória sempre define o tamanho das amostras de bootstrap de acordo com o tamanho do subconjunto de dados de treinamento. Vejamos como podemos resolver esse problema de reajustar florestas aleatórias na biblioteca sklearn. Para fins de ilustração, vou me referir às classes da biblioteca sklearn; no entanto, essas soluções podem ser aplicadas a qualquer implementação:
1. Defina o parâmetro max_features como um valor mais baixo para obter uma discrepância entre as árvores.
2. Parada antecipada: defina o parâmetro de regularização min_weight_fraction_leaf para um valor suficientemente grande (por exemplo, 5%) para que a precisão fora do pacote converja para a correção fora da amostra (bloco k).
3. Use o avaliador BaggingClassifier no avaliador básico DecisionTreeClassifier, em que max_samples está definido como exclusividade média (avgU) entre as amostras.
- clf = DecisionTreeClassifier (critério = 'entropia', max_features = 'auto', class_weight = 'equilibrado')
- bc = BaggingClassifier (base_estimator = clf, n_estimators = 1000, max_samples = avgU, max_features = 1.)
4. Use o avaliador BaggingClassifier no avaliador base RandomForestClassifier, em que max_samples está definido como exclusividade média (avgU) entre as amostras.
- clf = RandomForestClassifier (n_estimators = 1, critério = 'entropia', autoinicialização = Falso, class_weight = 'balanced_subsample')
- bc = BaggingClassifier (base_estimator = clf, n_estimators = 1000, max_samples = avgU, max_features = 1.)
5. Modifique a classe de floresta aleatória para substituir as auto-inicialização padrão pelas auto-inicialização sequenciais.
Para resumir, a Listagem 6.2 mostra três maneiras alternativas de configurar uma floresta aleatória usando classes diferentes.
Listagem 6.2. Três maneiras de configurar uma floresta aleatória
clf0=RandomForestClassifier(n_estimators=1000, class_weight='balanced_ subsample', criterion='entropy') clf1=DecisionTreeClassifier(criterion='entropy', max_features='auto', class_weight='balanced') clf1=BaggingClassifier(base_estimator=clf1, n_estimators=1000, max_samples=avgU) clf2=RandomForestClassifier(n_estimators=1, criterion='entropy', bootstrap=False, class_weight='balanced_subsample') clf2=BaggingClassifier(base_estimator=clf2, n_estimators=1000, max_samples=avgU, max_features=1.)
Ao ajustar as árvores de decisão, a rotação do espaço do recurso na direção que coincide com os eixos reduz, em regra, o número de níveis necessários para a árvore. Por esse motivo, sugiro que você ajuste uma árvore aleatória no PCA de atributos, pois isso pode acelerar os cálculos e reduzir um pouco o reajuste (mais sobre isso no Capítulo 8). Além disso, conforme descrito no Capítulo 4, Seção 4.8, o argumento class_weight = 'balanced_subsample' ajudará a impedir que as árvores classifiquem erroneamente classes minoritárias.
6.5 Impulso
Kearns e Valiant [1989] foram os primeiros a perguntar se avaliadores fracos poderiam ser combinados para obter um avaliador altamente preciso. Logo depois, Schapire [1990] mostrou uma resposta afirmativa a essa pergunta usando um procedimento que chamamos de reforço hoje (aumento, aumento, amplificação). Em termos gerais, funciona da seguinte maneira: primeiro, gere um subconjunto de treinamento por seleção aleatória com retorno de acordo com determinados pesos de amostra (inicializados por pesos uniformes). Em segundo lugar, ajuste um avaliador usando este subconjunto de treinamento. Em terceiro lugar, se um único avaliador alcança precisão que excede o limite de aceitabilidade (por exemplo, em um classificador binário é de 50% para que o classificador funcione melhor do que a sorte), o avaliador permanece, caso contrário, ele é descartado. Quarto, dê mais peso às observações classificadas incorretamente e menos peso às observações classificadas corretamente. Quinto, repita as etapas anteriores até receber N avaliadores. Sexto, a previsão do conjunto é a média ponderada das previsões individuais dos modelos N, onde os pesos são determinados pela precisão de cada avaliador. Existem vários algoritmos aprimorados, dos quais o aumento adaptativo do AdaBoost é um dos mais populares (Geron [2017]). A Figura 6.3 resume o fluxo de decisão na implementação padrão do algoritmo AdaBoost.

6.6 Bagging vs aumento de finanças
A partir da descrição acima, vários aspectos tornam o impulso completamente diferente do
ensacamento :
- O ajuste dos classificadores individuais é realizado sequencialmente.
- Classificadores ruins são rejeitados.
- A cada iteração, as observações são ponderadas de maneira diferente.
A previsão do conjunto é a média ponderada de cada aluno.
A principal vantagem do aumento é que ele reduz a variação e o viés nas previsões. No entanto, a correção do viés ocorre devido a um maior risco de excesso de ajuste. Pode-se argumentar que, em aplicações financeiras, o ensacamento é geralmente preferível ao reforço. A ensacamento resolve o problema de ajuste excessivo, enquanto o aumento resolve o problema de ajuste excessivo. Overfitting é frequentemente um problema mais sério do que underfitting, pois ajustar o algoritmo MO com muita força aos dados financeiros não é de todo difícil devido à baixa relação sinal / ruído. Além disso, o ensacamento pode ser paralelo, enquanto o reforço geralmente requer execução sequencial.
6.7 Ensacamento para escalabilidade
Como você sabe, alguns algoritmos populares de MO não escalam muito bem, dependendo do tamanho da amostra. O método de máquinas de vetores de suporte (SVM) é um excelente exemplo. Se você tentar ajustar o avaliador SVM em mais de um milhão de observações, poderá levar muito tempo até o algoritmo convergir. E mesmo depois da convergência, não há garantia de que a solução seja ótima global ou que não seja realinhada.
Uma abordagem prática é criar um algoritmo ensacado, em que o avaliador de base pertence a uma classe que não escala bem com o tamanho da amostra, como o SVM. Ao definir esse avaliador básico, introduzimos uma condição estrita para uma parada antecipada. Por exemplo, na implementação de máquinas de vetores de suporte (SVMs) na biblioteca sklearn, você pode definir um valor baixo para o parâmetro max_iter, por exemplo, iterações 1E5. O valor padrão é max_iter = -1, que instrui o avaliador a continuar iterando até que os erros caiam abaixo do nível de tolerância. Por outro lado, você pode aumentar o nível de tolerância com o parâmetro tol, cujo padrão é tol = iE-3. Qualquer uma dessas duas opções levará a uma parada antecipada. É possível parar outros algoritmos com antecedência usando parâmetros equivalentes, como o número de níveis em uma floresta aleatória (max_depth) ou a fração ponderada mínima da soma total de pesos (todas as amostras de entrada) necessárias para estar em um nó folha (min_weight_fraction_leaf).
Dado que os algoritmos ensacados podem ser paralelos, transformamos uma grande tarefa seqüencial em uma série de tarefas menores que são executadas simultaneamente. Obviamente, uma parada antecipada aumentará a variação dos resultados dos avaliadores de base individuais; no entanto, esse aumento pode ser mais do que compensado pela diminuição da variação associada ao algoritmo ensacado. Você pode controlar essa redução adicionando novos avaliadores de base independentes. Utilizada dessa maneira, a embalagem permite obter estimativas rápidas e robustas em conjuntos de dados muito grandes.
»Mais informações sobre o livro podem ser encontradas no
site do editor»
Conteúdo»
TrechoDesconto de 25% para os livros de pré-venda da Khabrozhiteley em um cupom -
Machine Learning