Dicas para lidar com grandes volumes de dados em python

Usando Python para lidar com dados reais às vezes é um pouco mais complicado do que os exemplos que você lê sobre. dados reais, além de ser confuso, também pode ser bastante grande na ciência de dados - às vezes tão grande que não pode caber na memória, não importa o que as especificações de memória da sua máquina são.

Determinar quando há muitos dados

Em um projeto de ciência de dados, os dados podem ser considerados grandes quando uma destas duas situações:

  • Ele não pode caber na memória do computador disponível.

  • Mesmo que o sistema tem memória suficiente para armazenar os dados, o aplicativo não pode elaborar os dados usando algoritmos de aprendizagem de máquina em uma quantidade razoável de tempo.

    Video: Aulas Python - 104 - Módulo winsound

Implementação Stochastic Gradient Descent

Quando você tem muitos dados, você pode usar o Stochastic Gradient Descent Regressor (SGDRegressor) ou Stochastic Gradient Descent Classificador (SGDClassifier) ​​como um preditor linear. A única diferença com a maioria dos outros métodos é que eles realmente otimizar seus coeficientes utilizando apenas uma observação de cada vez. É, portanto, leva mais iterações antes do código atinge resultados comparáveis ​​usando um cume ou regressão lasso, mas exige muito menos memória e tempo.

Isso ocorre porque ambos os preditores contar com Stochastic Gradient Descent (SGD) otimização - uma espécie de otimização em que ocorre o ajuste dos parâmetros após a entrada de cada observação, levando a um longo e jornada um pouco mais errático para minimizar a função de erro. Claro, otimizando com base em observações individuais, e não em matrizes de dados enormes, pode ter um impacto benéfico tremendo no tempo de treinamento do algoritmo e a quantidade de recursos de memória.

Ao usar os SGDS, além de diferentes funções de custo que você tem que testar o seu desempenho, você também pode tentar usar L1, L2, e Elasticnet regularização apenas definindo o pena e o parâmetro de controlo correspondentes alfa e l1_ratio parâmetros. Alguns dos SGDS são mais resistentes a outliers, tal como modified_huber para a classificação ou Huber para a regressão.

SGD é sensível à escala de variáveis, e isso não é só por causa da regularização, é por causa da forma como ele funciona internamente. Consequentemente, você deve sempre padronizar suas características (por exemplo, usando StandardScaler) Ou você forçá-los na faixa [0, + 1] ou [-1, + 1]. Não fazer isso vai levar a maus resultados.



Ao usar SGDS, você sempre tem que lidar com blocos de dados a menos que você pode esticar todos os dados de treinamento na memória. Para fazer o treinamento eficaz, você deve padronizar por ter o StandardScaler inferir a média e o desvio padrão a partir do primeiro dado disponível. A média eo desvio padrão de todo o conjunto de dados é mais provável diferente, mas a transformação de uma estimativa inicial será suficiente para desenvolver um processo de aprendizagem trabalhando.

sklearn.linear_model de importação SGDRegressorfrom sklearn.preprocessing importação StandardScalerSGD = SGDRegressor (perda = ‘squared_loss’, penalidade = ‘l2’, alfa = 0,0001, 
l1_ratio = 0,15, n_iter = 2,000) de escala = StandardScaler () scaling.fit (polyX) scaled_X = scaling.transform (polyX) de impressão `CV MSE:% .3f` % abs (np.mean (cross_val_score (SGD, scaled_X, y , pontuação = `mean_squared_error`, CV = validação cruzada, n_jobs = 1))) CV MSE: 12,802

No exemplo anterior, você usou o em forma método, que requer que você pré-carregar todos os dados de treinamento na memória. Você pode treinar o modelo em etapas sucessivas, utilizando o partial_fit método em vez disso, que corre uma única iteração nos dados fornecidos, em seguida, mantém-lo na memória e ajusta-lo quando receber novos dados.

Video: Aulas Python - 109 - Ferramentas de Sistema V: Argumentos do Terminal

de sklearn.metrics importar mean_squared_errorfrom sklearn.cross_validation importação train_test_splitX_train, X_test, y_train, y_test = train_test_split (scaled_X, y, test_size = 0,20, random_state = 2) SGD = SGDRegressor (perda = `squared_loss`, penalidade = `l2`, alfa = 0,0001, 
l1_ratio = 0,15) = melhorias lista () para Z na gama (1000): SGD.partial_fit (X_train, y_train) improvements.append (mean_squared_error (y_test, SGD.predict (X_test)))

Tendo mantido a par de melhorias parciais do algoritmo durante 1000 iterações sobre os mesmos dados, você pode produzir um gráfico e entender como as melhorias trabalhar como mostrado no código a seguir. É importante notar que você poderia ter usado dados diferentes em cada etapa.

Video: como instalar o pacote geopandas

matplotlib.pyplot importação como pltplt.subplot (1,2,1) plt.plot (gama (1,11), np.abs (melhorias [: 10]), `O -`) plt.xlabel ( `ajuste parcial iterações iniciais `) plt.ylabel (` conjunto de teste do erro quadrático médio `) plt.subplot (1,2,2) plt.plot (gama (100,1000,100), np.abs (melhorias [100: 1000: 100 ]), `O -`) ( `plt.xlabel ajuste terminando iterações parciais`) plt.show ()

O algoritmo inicialmente começa com uma elevada taxa de erros, mas consegue reduzi-la em apenas algumas iterações, normalmente 5. Depois disso, a taxa de erro aumenta lentamente por uma quantidade menor de cada iteração. Após 700 iterações, a taxa de erro atinge um mínimo e começa a aumentar. Nesse ponto, você está começando a overfit porque os dados já chamou as regras e você está realmente forçando o SGD para aprender mais quando não há mais nada em outras do que o ruído de dados. Consequentemente, ele começa ruído aprendendo e regras erráticos.

Video: Aulas Python - 140 - Programação para Internet VI: POP e SMTP

A otimização lenta descida erro quadrado.
A otimização lenta descida erro quadrado.

A menos que você está trabalhando com todos os dados na memória, grade pesquisa e cross-validando o melhor número de iterações será difícil. Um bom truque é manter um pedaço de dados de treinamento a ser usado para validação separados na memória ou armazenamento. Ao verificar o seu desempenho nessa parte intocada, você pode ver quando SGD desempenho de aprendizagem começa a diminuir. Nesse ponto, você pode interromper iteração de dados (um método conhecido como interrupção precoce).


Publicações relacionadas