Como construir sua própria rede neural a partir do zero em Python

Um guia para iniciantes para entender o funcionamento interno do Deep Learning

Motivação: Como parte da minha jornada pessoal para obter uma melhor compreensão do Deep Learning, decidi construir uma Rede Neural a partir do zero sem uma biblioteca de aprendizado profunda como o TensorFlow. Acredito que entender o funcionamento interno de uma Rede Neural é importante para qualquer aspirante a Cientista de Dados. read more

O que frustra os cientistas de dados em projetos de aprendizado de máquina?

Há uma explosão de interesse na ciência de dados hoje. Basta inserir o tag-line ' Powered-by-AI ', e qualquer coisa vende.

Mas é aí que os problemas começam.

Os campos de vendas de ciência de dados geralmente prometem a lua. Então, os clientes aumentam as expectativas e lançam seus projetos lunáticos. Em última análise, cabe aos cientistas de dados levar clientes para a lua ou deixá-los abandonados. read more

A complexa relação entre aprendizado de máquina e seguro de saúde

Democratas e republicanos lutam pelo futuro do Obamacare é um debate que levantou muitas questões para o futuro dos cuidados de saúde. Nos Estados Unidos, que não tem sistema universal de saúde, a Lei de Proteção ao Paciente e Affordable Care do ex-presidente Obama impediu as seguradoras de discriminar pacientes com base em suas condições pré-existentes, introduzindo tetos anuais ou totais de despesas, recusando-se a renovar a política para pessoas que contraem certas doenças, ou aumentam os prêmios, entre outras coisas. read more

A Lei de Reforma do Seguro de Saúde Competitiva removeria a isenção antitruste, passou a Casa 416–7

Rep. Paul Gosar (R-AZ4), principal patrocinador da Câmara da Lei de Reforma do Seguro de Saúde Competitivo

A saúde é uma das questões mais contenciosas e partidárias no Capitólio, mas um projeto de lei destinado a aumentar a concorrência no mercado de seguro de saúde passou quase unanimemente em março. read more

Como registrar um domínio e hospedar seu próprio site

Um dos desafios que temos ao criar e compartilhar conteúdo on-line é que outras empresas controlam ou, em alguns casos, “possuem” nosso conteúdo. Como exemplo disso, muitas pessoas sugerem que sua casa principal na Internet é sua página no Facebook ou no LinkedIn. O problema é que, se uma dessas empresas mudasse o modelo de negócios ou fechasse, perderia todo o conteúdo que você compartilhou. read more

Como desabilitar a interface de status HTTP do MongoDB e a API REST

Saiba como desativar a interface de status HTTP e a API REST para impedir a exposição potencial de dados e a vulnerabilidade a invasores

Isenção de responsabilidade: este guia prático aplica-se somente a servidores MongoDB gerenciados automaticamente. Todos os provedores do "MongoDB as a Service" já desabilitam a HTTP Status Interface e a REST API preventivamente. read more

Como evitar condições de corrida assíncrona em JavaScript

Você pode ter uma corrida em um único segmento …

Fundo…

Eu comecei minha operadora de programação como um programador C #. Eu fazia parte de um projeto de back-end que tinha que executar bem sob carga de muitos pedidos, enquanto a maior parte do tratamento é IO em arquivos grandes, o que pode ser lento. Usamos tarefas para obter o desempenho necessário e tivemos que lidar com muitas lógicas assíncronas, bloqueios, gerenciamento de estados e assim por diante.

Depois de alguns anos, mudei para o desenvolvimento de aplicativos da web. Comecei com o TypeScript, uma vez que era uma mudança fácil do C #, mas tinha alguns projetos puramente JavaScript.

Lembro-me da minha primeira vez usando promessas e compreendendo que, embora o código seja assíncrono, você não precisa usar bloqueios para manipular o acesso multi-thread aos dados. Foi uma sensação incrível, eu não preciso bloquear coisas, para verificar e mudar para o thread da interface do usuário para alterar as coisas da interface do usuário, JavaScript é single threaded, foi incrível!

Mas por causa do meu passado, eu me senti enganado, deve haver algo que estou perdendo, não pode ser tão simples. Eu olhei como as coisas assíncronas funcionam no mundo do JavaScript e descobri as filas de mensagens. As filas de mensagens são usadas para comunicação entre trabalhadores em segundo plano e as mesmas filas são usadas para continuar o código assíncrono após a solicitação assíncrona. A idéia é que o JavaScript é singe threaded (a menos que usemos background workers), e quando alguma chamada assíncrona retorna, seu resultado é colocado em uma fila de mensagens, quando o thread principal terminar seu trabalho e livre (sem alternância de contexto, finalização completa) leva a próxima mensagem para lidar com isso.

Mais uma vez, me senti abençoado. Eu não preciso lidar com coisas assíncronas. Eu posso simplesmente escrever:

 buscar (url) 
.then (dados => data.json ())
. then (itens => updateState (itens));

Mas! (Há sempre um mas)

O problema…

Vamos pensar por um segundo, quando essa chamada de busca é invocada?

  • Toda vez que um usuário está clicando em um botão?
  • A cada X segundos?
  • A cada X pixels o mouse se move sobre um mapa?

Quanto tempo demora para a resposta retornar, no pior dos casos? 1,2,10 segundos? Talvez mais em rede muito lenta?

Vamos supor que temos um cenário como este:

  • Nós temos um mapa
  • Queremos mostrar algumas informações relacionadas à localização do usuário
  • Toda vez que um usuário está se movendo no mapa, buscamos os dados
  • Somos espertos e até debitamos as buscas por 0,5 segundos
  • Os dados são retornados após 5 segundos (estamos em rede lenta)

Agora vamos pensar no próximo caso:

  • O usuário abre o mapa
  • A primeira solicitação de busca é acionada
  • Após 2 segundos, o usuário se move no mapa novamente porque ele sentiu que encontrou algo interessante
  • Após outros 0,5 segundos, outra busca é disparada

Agora, se por algum motivo para a primeira busca levou 5 segundos para retornar e para a segunda busca levou 1 segundo para retornar (o sinal da rede ficou melhor ou o tamanho de busca / computação é muito menor ou não temos servidor ocupado para o segunda vez), o que acontecerá agora?

Bem, isso depende, uma coisa que sabemos com certeza, o updateState será chamado duas vezes, a primeira vez com a segunda resposta e a segunda com a primeira resposta.

Qual será o estado final da aplicação? Em um bom cenário, acumulamos as respostas e é realmente válido mostrar os dois resultados para o usuário. Em outro bom cenário, usamos algum cache e as duas respostas serão armazenadas em cache, e o mapa mostrará apenas os dados da área visualizada.

O pior caso (e provavelmente o real) é se, em cada chamada updateState, excluirmos o estado atual e definirmos o novo estado. Neste caso, o que acontecerá é um bug assíncrono estranho, nós olhamos para area2 mas vemos os itens de area1.

Meu ponto é que mesmo que você não precise gerenciar o código assíncrono usando bloqueios, você ainda precisa pensar sobre problemas assíncronos. Neste caso, uma condição de corrida. Quando vejo código JavaScript, ele geralmente não lida com isso.

Algumas soluções…

Então você me pergunta o que eu posso fazer?

  • Você pode salvar a última solicitação e cancelá-la na próxima. Para o momebt de escrever este artigo buscar não tem uma API de cancelamento ( https://github.com/whatwg/fetch/issues/27 ). Mas por causa do argumento aqui está um código com setTimeout:
 if (this.lastRequest) { 
clearTimeout (this.lastRequest);
}

this.lastRequest = setTimeout (() => {
updateState ([1,2,3]);
this.lastRequest = nulo;
}, 5000);

read more

Introdução à Teoria dos Jogos (Parte 1)

Jogos sequenciais para dois jogadores – Estratégias Dominantes, Equilíbrio de Nash e Cooperação vs. Deserção

Fonte

A teoria dos jogos geralmente se refere ao estudo de modelos matemáticos que descrevem o comportamento de tomadores de decisão lógicos. É amplamente utilizado em muitos campos, como economia, ciência política, política e ciência da computação, e pode ser usado para modelar muitos cenários do mundo real. Geralmente, um jogo refere-se a uma situação envolvendo um conjunto de jogadores, cada um com um conjunto de escolhas possíveis, em que o resultado para qualquer jogador individual depende parcialmente das escolhas feitas por outros jogadores. read more

Copa do Mundo FIFA 2018: uma abordagem baseada em dados para os escalões de equipes ideais

Com a Copa do Mundo de 2018 chegando neste verão na Rússia, todo fã de futebol de todo o mundo está ansioso para fazer sua previsão sobre qual equipe vencerá este ano. Outra questão para os torcedores é como as equipes nacionais favoritas devem se alinhar: que formação deve ser usada? Quais jogadores devem ser escolhidos? Quais devem ser deixadas no banco ou eliminadas do torneio?

Adepto de futebol entusiasta, comecei a pensar: por que não construir minha própria formação de sonho para minhas equipes favoritas na Copa do Mundo? Como alguém que adora a ciência de dados e cresceu jogando FIFA, percebi que posso usar os dados do extremamente popular video game FIFA18 da EA Sport lançado no ano passado para fazer minha análise.

Neste post, eu mostrarei passo a passo que eu usei para construir a formação mais formidável para as 8 melhores equipes reconhecidas neste torneio: França, Alemanha, Espanha, Inglaterra, Brasil, Argentina, Bélgica e Portugal.

O conjunto de dados FIFA18

Eu encontrei o Dataset FIFA18 no Kaggle . O conjunto de dados contém mais de 17.000 jogadores no FIFA18, cada um com mais de 70 atributos. Ele é extraído do site SoFiFa , extraindo dados pessoais dos jogadores, ID, jogando e estatísticas de estilo. Existem vários recursos interessantes, como valor do jogador, salário, idade e classificação de desempenho que eu realmente quero aprofundar.

Depois de carregar os dados, escolhi apenas as colunas mais interessantes que quero analisar:

interesting_columns = [
'Nome',
'Era',
'Nacionalidade',
'No geral',
'Potencial',
'Clube',
'Valor',
'Salário',
'Posições preferidas'
]
FIFA18 = pd.DataFrame (FIFA18, colunas = colunas_cointerativas) read more

Como usar resoluções altas (4K) com hardware mais antigo

Pensando em comprar monitores 4K UHD, mas seu hardware atual não suporta? Comprou um monitor e ficou com 30Hz? Adie a atualização.
TL; DR: 3840 × 2160 a 43 Hz, 3200 x 1800 a 60 Hz. 2560 × 1440 a 86 Hz com Intel HD 3000 (Sandy Bridge); 3840 × 2160 @ 52 Hz com Intel Iris 5100 (Haswell).

Introdução

Muito tempo atrás, quando todos os monitores eram gordos e pesados, os computadores usavam resoluções fixas e timings para produzir algo na tela. Ele foi padronizado como Display Monitor Timings (DMT) e não havia nenhuma maneira universal de calcular as temporizações para resoluções personalizadas. Os monitores costumavam enviar resoluções suportadas do DMT usando um protocolo especial chamado EDID (Extended Display Identification Data) que armazenava a tabela DMT com os modos suportados. Conforme os tempos passam, os monitores sentiram o limite do DMT. Em 1999, a VESA anunciou a Generalized Timing Formula (GTF), cálculo de tempo universal (com precisão fixa). Apenas em 3 anos, em 2002, foi substituído pelo padrão Coordinated Video Timings (CVT), que era um pouco mais preciso.

Ambas as normas foram projetadas com a consciência da característica do tubo de raios odeodo, houve um atraso especial para o campo magnético se configurar adequadamente. Os ecrãs LCD eram muito mais rápidos e não havia necessidade de tais atrasos, o padrão CVT Reduced Blanking (CVT-R ou CVT-RB) nasceu exatamente como o CVT, mas para o novo tipo de ecrãs. Isso permitiu reduzir significativamente a largura de banda de interface necessária. Existe uma versão mais nova deste padrão, CVT-R2, mas não está disponível para acesso público, a VESA vende por US $ 350.

A história

Finalmente, depois de tantos anos, conseguimos comprar display de alta densidade para PC. Todos esses anos nós vimos um teatro absurdo onde os dispositivos móveis têm telas de 1920 × 1080 5 ", as lojas estavam cheias de TVs 4K (apesar de assistirmos de 2 a 4 metros de distância), mas os monitores estavam com os pixels do tamanho original. Digamos que Full HD é "bom o suficiente" para um monitor de 27 ", esquecendo completamente o último" bom o suficiente "para ir com o lançamento do iPad Retina. Na minha opinião, isso acontece principalmente porque as versões mais antigas do Windows não suportam densidade de pixel diferente e ficam bem apenas no Windows 8.1.

Bem, vamos encarar isso. Agora, em 2015, temos 246 modelos de TV e apenas 36 modelos de monitores, um dos quais – DELL P2415Q – tive a sorte de comprar por um preço relativamente baixo (€ 377). Esta é uma tela IPS de 23,8 "com resolução de 3840 × 2160 e densidade de pixels de 185 PPI com portas DisplayPort 1.2 e HDMI 1.4. Os primeiros monitores 4K foram detectados pelo SO como dois monitores diferentes e combinados em um por um driver de placa de vídeo. aconteceu porque os primeiros escaladores foram incapazes de operar em resolução total e os fabricantes de displays colocaram 2 scalers para metade (1920 × 2160) de resolução em cada monitor. Os monitores modernos se livraram de tal invasão, mas agora exigem adaptadores de vídeo mais poderosos. O Thinkpad X220 não suporta resoluções superiores a 2560 × 1440 de acordo com informações nos sites da Intel e da Lenovo. Podemos fazer alguma coisa com ele?

Padrões padrão e não-padrão

Monitores modernos e videocards não dão a mínima para resoluções e timings fixos de tempos de DMT. Eles podem trabalhar em uma ampla gama de resoluções e taxas de atualização. Vamos dar uma olhada nos detalhes técnicos do meu monitor :

 Faixa de varredura horizontal: 31 kHz a 140 kHz (automático) 
Faixa de varredura vertical: 29 Hz a 76 Hz (automático)

E a predefinição máxima:

Modo de exibição: VESA, 3840 x 2160
Freqüência Horizontal (kHz): 133.3
Freqüência Vertical (Hz): 60.0
Clock de Pixel (MHz): 533.25
Polaridade de Sincronização (Horizontal / Vertical): +/- read more

3 perguntas importantes que você deve fazer ao procurar contratar alguém

Você quer adicionar de maneira inteligente e rápida excelentes funcionários que ajudarão seu negócio a prosperar e crescer.

Afinal, recrutar e contratar pessoas não é barato. Leva tempo e dinheiro para anunciar a posição aberta, entrevistar candidatos e treinar seus novos contratados. read more

11 fatos surpreendentes que você pode não saber sobre chatbots

Chatbots são a próxima grande coisa.

O que é um chatbot? Eles vêm em dois sabores:

Assistentes virtuais , que ajudam você a encontrar informações, lembrar de coisas ou comprar coisas. Pense na Siri da Apple, na Alexa da Amazon, na Cortana da Microsoft e no Assistente do Google. Estes são alimentados por aprendizado de máquina, o que significa que eles confiam na inteligência artificial para aprender e descobrir o que você quer. read more

21 lugares para aprender habilidades que melhoram sua vida

Nós tendemos a pensar em aprender uma nova habilidade ou “voltar para a escola” como algo que você faria quando mudasse de carreira ou se atualizasse dentro da sua atual.

Mas a aprendizagem ao longo da vida tem benefícios incríveis, tanto pessoais como profissionais, dizem os pesquisadores . Isso torna as comunidades mais produtivas e inovadoras e dá aos funcionários a capacidade de lidar com locais de trabalho em constante mudança . Aprendizagem ao longo da vida nos ajuda a permanecer afiados à medida que envelhecemos, e também é importante para uma economia de sucesso. read more

10 dicas de e-mail frias Eu costumava receber 60.000 inscrições

Eu trabalhei na Toggl desde 2015 e, nos dois anos, eu conduzi mais de 150.000 visitas à Toggl (* que podem ser contabilizadas diretamente) graças, quase exclusivamente, a emails frios.

Meu foco tem sido em colocações de mídia, negociação de parcerias de conteúdo e garantia de guest posts e menções em blogs relevantes do setor e, geralmente, aumento do tráfego de links de referência para o site da Toggl. read more

Como falar com uma empresa sobre blockchain: o exemplo do IBM Hyperledger – 2/2

No primeiro artigo desta minissérie propusemos uma possível abordagem para a apresentação da tecnologia blockchain às empresas.

Agora vamos descer mais detalhadamente. Existem várias soluções para implementar blockchains corporativos. O Hyperledger é um metaprojeto de código aberto sob a égide da Linux Foundation, que visa criar tecnologias de blockchain inter-setoriais interoperáveis. Existem várias variações, incluindo Sawtooth e Iroha , cada um com características e funcionalidades únicas. Outro metaprojeto, não open source, para o desenvolvimento do blockchain de negócios é o framework Corda do consórcio R3 . read more

Como as bibliotecas podem adicionar silenciosamente permissões ao seu aplicativo Android

Outro dia, eu estava checando pedidos de suporte para o Glucosio , um aplicativo de Diabetes que estou construindo, quando encontrei um e-mail de um usuário reclamando sobre algumas “permissões invasivas” que estávamos pedindo.

Minha primeira reação foi: o que? Estávamos apenas pedindo permissões de gravação de armazenamento (para exportar dados e estatísticas), acesso ao sensor NFC para receber dados de sensores (como FreeStyle Libre) e acesso à rede , para nossa API de pesquisa e feedback do usuário. Eles não eram invasivos, considerando que hoje muitos aplicativos na loja precisam de acesso à Internet.

Então, decidi visitar nosso Console do desenvolvedor do Google Play para verificar as permissões com o apk de produção . Isso é o que eu encontrei:

Mais uma vez, minha reação foi: o quê? Gravar audio? Acesso de microfone? Mesmo?

Eu abri meu editor e verifiquei o Manifesto de Glucosio novamente.

<? xml version = "1.0" encoding = "utf-8"?>
<manifest xmlns: android = "http://schemas.android.com/apk/res/android"
xmlns: tools = "http://schemas.android.com/tools"
package = "org.glucosio.android">

<usa-permission android: nome = "android.permission.NFC" android: required = "false" />
<usa-recurso android: nome = "android.hardware.nfc" android: required = "false" />
<uses-permission android: name = "android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android: name = "android.permission.WRITE_EXTERNAL_STORAGE" />

<! - Obrigatório para Instabug ->
<uses-permission android: name = "$ {applicationId} .permission.C2D_MESSAGE" />
<permissão
android: name = "$ {applicationId} .permission.C2D_MESSAGE"
android: protectionLevel = "assinatura" /> read more