quinta-feira, 18 de fevereiro de 2021

Começando na linguagem de programação Rust

Vamos começar sua jornada Rust! Há muito o que aprender, mas toda jornada começa em algum lugar. Neste capítulo, discutiremos:

  • Instalando o Rust no Linux, macOS e Windows.
  • Escrever um programa que imprime Hello, world!
  • Usando cargo, o gerenciador de pacotes e sistema de compilação do Rust.

Instalação

O primeiro passo é instalar o Rust. Faremos o download do Rust através do rustup, uma ferramenta de linha de comando para gerenciar versões do Rust e ferramentas associadas. Você precisará de uma conexão com a Internet para fazer o download.

Nota: Se você preferir não usar rustup por algum motivo, consulte a página de instalação do Rust para outras opções.

As etapas a seguir instalam a versão estável mais recente do compilador Rust. As garantias de estabilidade do Rust garantem que todos os exemplos no livro que compilam continuarão a compilar com as versões mais recentes do Rust. A saída pode ser um pouco diferente entre as versões, porque o Rust geralmente melhora as mensagens de erro e avisos. Em outras palavras, qualquer versão mais recente e estável do Rust que você instalar usando essas etapas deve funcionar conforme o esperado com o conteúdo deste livro.

Notação de linha de comando

Neste capítulo e em todo o livro, mostraremos alguns comandos usados no terminal. Todas as linhas que você deve inserir em um terminal começam $. Você não precisa digitar o caractere $; Esse caracter indica o início de cada comando. As linhas que não começam com $ normalmente mostram a saída do comando anterior. Além disso, exemplos específicos do PowerShell usarão > em vez de $.

Instalando rustup em Linux ou macOS

Se você estiver usando Linux ou macOS, abra um terminal e digite o seguinte comando:

$ curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh

O comando baixa um script e inicia a instalação da ferramenta rustup, que instala a versão estável mais recente do Rust. Sua senha pode ser solicitada. Se a instalação for bem-sucedida, a seguinte linha aparecerá:

Rust is installed now. Great!

Além disso, você precisará de algum tipo de vinculador (linker). É provável que um já esteja instalado, mas quando você tenta compilar um programa Rust e obtém erros indicando que um linker não pôde ser executado, isso significa que um linker não está instalado em seu sistema e você precisará instalá-lo manualmente. Os compiladores C geralmente vêm com o linker correto. Verifique a documentação da sua plataforma para saber como instalar um compilador C. Além disso, alguns pacotes Rust comuns dependem do código C e precisarão de um compilador C. Portanto, pode valer a pena instalar um agora.

Instalando rustup no Windows

No Windows, vá para https://www.rust-lang.org/tools/install e siga as instruções para instalar o Rust. Em algum ponto da instalação, você receberá uma mensagem explicando que também precisará das ferramentas de compilação C++ para Visual Studio 2013 ou posterior. A maneira mais fácil de adquirir as ferramentas de compilação é instalar as Ferramentas de Compilação para Visual Studio 2019. Quando questionado sobre quais pacotes de trabalho instalar, certifique-se de que "Ferramentas de compilação C++" esteja selecionado e que o SDK do Windows 10 e os componentes do pacote do idioma inglês estejam incluídos.

O restante deste livro usa comandos que funcionam em cmd.exe e PowerShell. Se houver diferenças específicas, explicaremos quais usar.

Atualizando e desinstalando

Depois de instalar o Rust via rustup, atualizar para a versão mais recente é fácil. Em seu shell, execute o seguinte script de atualização:

$ rustup update

Para desinstalar o Rust e rustup, execute o seguinte script de desinstalação em seu shell:

$ rustup self uninstall

Solução de problemas

Para verificar se você instalou o Rust corretamente, abra um shell e digite esta linha:

$ rustc --version

Você deve ver o número da versão, o hash do commit e a data do commit para a versão estável mais recente que foi lançada no seguinte formato:

rustc x.y.z (abcabcabc yyyy-mm-dd)

Se você vir esta informação, você instalou o Rust com sucesso! Se você não vir essas informações e estiver no Windows, verifique se Rust está na variável do sistema %PATH%. Se tudo estiver correto e o Rust ainda não estiver funcionando, há vários lugares onde você pode obter ajuda. O mais fácil é o canal #beginners no Rust Discord oficial. Lá, você pode conversar com outros Rustáceos (um apelido bobo que demos a nós mesmos) que podem ajudá-lo. Outros excelentes recursos incluem o fórum de usuários e o Stack Overflow.

Documentação Local

A instalação do Rust também inclui uma cópia da documentação localmente, para que você possa lê-la offline. Execute rustup doc para abrir a documentação local em seu navegador.

Sempre que um tipo ou função é fornecido pela biblioteca padrão e você não tem certeza do que ele faz ou como usá-lo, use a documentação da interface de programação de aplicativo (API) para descobrir!

Hello, World!

Agora que você instalou o Rust, vamos escrever seu primeiro programa Rust. É tradicional, ao aprender uma nova linguagem de programação, escrever um pequeno programa que imprima o texto Hello, world! na tela, então faremos o mesmo aqui!

Nota: este livro pressupõe familiaridade básica com a linha de comando. O Rust não faz exigências específicas sobre sua edição ou conjunto de ferramentas ou onde seu código reside, portanto, se você preferir usar um ambiente de desenvolvimento integrado (IDE) em vez da linha de comando, sinta-se à vontade para usar a sua IDE favorita. Muitas IDEs agora têm algum grau de suporte a Rust; verifique a documentação da IDE para obter detalhes. Recentemente, a equipe Rust tem se concentrado em habilitar um ótimo suporte de IDE, e o progresso tem sido feito rapidamente nessa frente!

Criação de um diretório de projeto

Você começará criando um diretório para armazenar seu código Rust. Não importa para Rust onde seu código reside, mas para os exercícios e projetos neste livro, sugerimos criar um diretório de projetos em seu diretório inicial e manter todos os seus projetos lá.

Abra um terminal e digite os seguintes comandos para criar um diretório projects e um diretório para o Hello, world! dentro do diretório projects.

Para Linux, macOS e PowerShell no Windows, digite:

$ mkdir ~/projects
$ cd ~/projects
$ mkdir hello_world
$ cd hello_world

Para Windows CMD, insira o seguinte:

> mkdir "%USERPROFILE%\projects"
> cd /d "%USERPROFILE%\projects"
> mkdir hello_world
> cd hello_world

Escrevendo e executando um programa Rust

Em seguida, faça um novo arquivo fonte e chame-o de main.rs. Os arquivos Rust sempre terminam com a extensão .rs. Se você estiver usando mais de uma palavra no nome do arquivo, use um sublinhado para separá-los. Por exemplo, use hello_world.rs em vez de helloworld.rs.

Agora abra o arquivo main.rs que você acabou de criar e insira o código na Listagem 1-1.

Nome do arquivo: main.rs

fn main() {
    println!("Hello, world!");
}

Listagem 1-1: Um programa que imprime Hello, world!

Salve o arquivo e volte para a janela do terminal. No Linux ou macOS, digite os seguintes comandos para compilar e executar o arquivo:

$ rustc main.rs
$ ./main
Hello, world!

No Windows, digite o comando em .\main.exe vez de ./main:

> rustc main.rs
> .\main.exe
Hello, world!

Independentemente do seu sistema operacional, a string Hello, world! deve ser impressa no terminal. Se você não vir esta saída, consulte a seção “Solução de problemas” da seção Instalação para obter ajuda.

Se imprimiu Hello, world!, parabéns! Você escreveu oficialmente um programa Rust. Isso faz de você um programador Rust - bem-vindo!

Anatomia de um programa Rust

Vamos revisar em detalhes o que acabou de acontecer em seu programa "Hello, world!". Esta é a primeira peça do quebra-cabeça:

fn main() {

}

Essas linhas definem uma função em Rust. A função main é especial: é sempre o primeiro código a ser executado em cada programa executável Rust. A primeira linha declara uma função chamada main que não possui parâmetros e não retorna nada. Se houver parâmetros, eles ficarão entre parênteses ().

Além disso, observe que o corpo da função está entre colchetes {}. Rust requer isso em todos os corpos funcionais. É um bom estilo colocar o colchete de abertura na mesma linha da declaração da função, adicionando um espaço no meio.

Se você deseja manter um estilo padrão nos projetos Rust, pode usar uma ferramenta de formatação automática chamada rustfmt para formatar seu código em um estilo específico. A equipe Rust incluiu esta ferramenta com a distribuição padrão do Rust, como rustc, ela já deve estar instalada no seu computador! Verifique a documentação online para mais detalhes.

Dentro da função main está o seguinte código:

println!("Hello, world!");

Esta linha faz todo o trabalho neste pequeno programa: imprime texto na tela. Existem quatro detalhes importantes a serem observados aqui.

Primeiro, o estilo Rust é recuar com quatro espaços, não uma tabulação.

Em segundo lugar, println! chama uma macro Rust. Se, em vez disso, chamasse uma função, seria inserido como println (sem o !). Discutiremos as macros Rust com mais detalhes no Capítulo 19. Por enquanto, você só precisa saber que usar um ! significa que você está chamando uma macro em vez de uma função normal.

Terceiro, você vê a string "Hello, world!". Passamos essa string como um argumento para println! e a string é impressa na tela.

Em quarto lugar, terminamos a linha com um ponto-e-vírgula (;), o que indica que essa expressão acabou e a próxima está pronta para começar. A maioria das linhas do código Rust termina com um ponto e vírgula.

Compilar e executar são etapas separadas

Você acabou de executar um programa recém-criado, então vamos examinar cada etapa do processo.

Antes de executar um programa Rust, você deve compilá-lo usando o compilador Rust, digitando o comando rustc e passando o nome de seu arquivo de origem, como este:

$ rustc main.rs

Se você tiver experiência em C ou C++, notará que é semelhante a gcc ou clang. Depois de compilar com sucesso, o Rust gera um executável binário.

No Linux, macOS e PowerShell no Windows, você pode ver o executável digitando o comando ls em seu shell. No Linux e no macOS, você verá dois arquivos. Com o PowerShell no Windows, você verá os mesmos três arquivos que veria usando o CMD.

$ ls
main  main.rs

Com o CMD no Windows, você deve inserir o seguinte:

> dir /B %= the /B option says to only show the file names =%
main.exe
main.pdb
main.rs

Mostra o arquivo de código-fonte com a extensão .rs, o arquivo executável (main.exe no Windows, mas main em todas as outras plataformas) e, ao usar o Windows, um arquivo contendo informações de depuração com a extensão .pdb. A partir daqui, você executa o arquivo main ou main.exe, assim:

$ ./main # ou .\main.exe no Windows

Se main.rs fosse o seu programa Hello, World!, esta linha seria impressa em seu terminal: Hello, world!.

Se você está mais familiarizado com uma linguagem dinâmica, como Ruby, Python ou JavaScript, pode não estar acostumado a compilar e executar um programa como etapas separadas. Rust é uma linguagem compilada antecipadamente, o que significa que você pode compilar um programa e fornecer o executável para outra pessoa, e eles podem executá-lo mesmo sem ter o Rust instalado. Se você der a alguém um arquivo .rb, .py ou .js, eles precisam ter uma implementação Ruby, Python ou JavaScript instalada (respectivamente). Mas nessas linguagens, você só precisa de um comando para compilar e executar seu programa. Tudo é uma troca no design da linguagem.

Apenas compilar com rustc é bom para programas simples, mas conforme seu projeto cresce, você deseja gerenciar todas as opções e facilitar o compartilhamento de seu código. A seguir, apresentaremos a ferramenta Cargo, que o ajudará a escrever programas Rust do mundo real.

Olá, Cargo!

Cargo é o sistema de construção e gerenciador de pacotes do Rust. A maioria dos Rustáceos usa essa ferramenta para gerenciar seus projetos Rust porque o Cargo lida com muitas tarefas para você, como construir seu código, baixar as bibliotecas das quais seu código depende e construir essas bibliotecas. (Chamamos de bibliotecas suas dependências de código.)

Os programas Rust mais simples, como o que escrevemos até agora, não têm dependências. Então, se tivéssemos construído o projeto Hello, world! com o Cargo, ele usaria apenas a parte do Cargo que lida com a construção de seu código. Conforme você escreve programas Rust mais complexos, você adicionará dependências e, se iniciar um projeto usando Cargo, adicionar dependências será muito mais fácil de fazer.

Como a grande maioria dos projetos do Rust usa Cargo, o restante deste livro pressupõe que você também esteja usando Cargo. O Cargo vem instalado com o Rust se você usou os instaladores oficiais discutidos na seção “Instalação”. Se você instalou o Rust por algum outro meio, verifique se o Cargo está instalado inserindo o seguinte em seu terminal:

$ cargo --version

Se você vir um número de versão, você o tem! Se você vir um erro, como command not found, consulte a documentação do seu método de instalação para determinar como instalar o Cargo separadamente.

Criando um Projeto com Cargo

Vamos criar um novo projeto usando Cargo e ver como ele difere do nosso projeto original “Hello, world!”. Navegue de volta ao diretório de seus projetos (ou onde quer que você decidiu armazenar seu código). Em seguida, em qualquer sistema operacional, execute o seguinte:

$ cargo new hello_cargo
$ cd hello_cargo

O primeiro comando cria um novo diretório chamado hello_cargo. Chamamos nosso projeto de hello_cargo e Cargo cria seus arquivos em um diretório com o mesmo nome.

Vá para o diretório hello_cargo e liste os arquivos. Você verá que o Cargo gerou dois arquivos e um diretório para nós: um arquivo Cargo.toml e um diretório src com um arquivo main.rs dentro.

Ele também inicializou um novo repositório Git junto com um arquivo .gitignore. Os arquivos Git não serão gerados se você executar cargo new em um repositório Git existente; você pode substituir esse comportamento usando cargo new --vcs=git.

Nota: Git é um sistema de controle de versão comum. Você pode mudar cargo new para usar um sistema de controle de versão diferente ou nenhum sistema de controle de versão usando o sinalizador --vcs. Execute cargo new --help para ver as opções disponíveis.

Abra Cargo.toml no editor de texto de sua escolha. Deve ser semelhante ao código da Listagem 1-2.

Nome do arquivo: Cargo.toml

[package]
name = "hello_cargo"
version = "0.1.0"
authors = ["Your Name <you@example.com>"]
edition = "2018"

[dependencies]

Listagem 1-2: Conteúdo de Cargo.toml gerado por cargo new

Este arquivo está no formato TOML (Tom's Obvious, Minimal Language), que é o formato de configuração do Cargo.

A primeira linha, [package] é um título de seção que indica que as instruções a seguir estão configurando um pacote. À medida que adicionarmos mais informações a este arquivo, adicionaremos outras seções.

As próximas quatro linhas definem as informações de configuração de que o Cargo precisa para compilar seu programa: o nome, a versão, quem o escreveu e a edição do Rust a ser usada. O Cargo obtém seu nome e informações de e-mail de seu ambiente, então se essas informações não estiverem corretas, corrija as informações agora e salve o arquivo. Falaremos sobre a chave de edition no Apêndice E.

A última linha, [dependencies] é o início de uma seção para você listar qualquer uma das dependências do seu projeto. No Rust, os pacotes de código são chamados de crates. Não precisaremos de nenhum outro crates para este projeto, mas iremos no primeiro projeto no Capítulo 2, então usaremos esta seção de dependências.

Agora abra src/main.rs e dê uma olhada:

Nome do arquivo: src/main.rs

fn main() {
    println!("Hello, world!");
}

Cargo gerou um programa Hello, world! para você, assim como o que escrevemos na Listagem 1-1! Até agora, as diferenças entre nosso projeto anterior e o projeto que o Cargo gera é que o Cargo colocou o código no diretório src, e temos um arquivo de configuração Cargo.toml no diretório superior.

O Cargo espera que seus arquivos de origem residam no diretório src. O diretório do projeto de nível superior é apenas para arquivos README, informações de licença, arquivos de configuração e qualquer outra coisa não relacionada ao seu código. Usar o Cargo ajuda a organizar seus projetos. Há um lugar para tudo e tudo está em seu lugar.

Se você iniciou um projeto que não usa Cargo, como fizemos com o projeto Hello, world!, você pode convertê-lo em um projeto que use Cargo. Mova o código do projeto para o diretório src e crie um arquivo Cargo.toml apropriado.

Construindo e executando um projeto Cargo

Agora vamos ver o que é diferente quando construímos e executamos o programa “Hello, world!” com Cargo! A partir do seu diretório hello_cargo, construir o seu projeto, digitando o seguinte comando:

$ cargo build
    Compiling hello_cargo v0.1.0 (file:///projects/hello_cargo)
        Finished dev [unoptimized + debuginfo] target(s) in 2.85 secs

Este comando cria um arquivo executável em target/debug/hello_cargo (ou target\debug\hello_cargo.exe no Windows) em vez de em seu diretório atual. Você pode executar o executável com este comando:

$ ./target/debug/hello_cargo # or .\target\debug\hello_cargo.exe on Windows
Hello, world!

Se tudo correr bem, Hello, world! deve ser imprisso no terminal. A execução de cargo build pela primeira vez também faz com que Cargo crie um novo arquivo no nível superior: Cargo.lock. Este arquivo controla as versões exatas das dependências em seu projeto. Este projeto não tem dependências, então o arquivo é um pouco esparso. Você nunca precisará alterar este arquivo manualmente; Cargo gerencia seu conteúdo para você.

Acabamos de construir um projeto cargo build e executá-lo ./target/debug/hello_cargo, mas também podemos usar cargo run para compilar o código e, em seguida, executar o executável resultante em um único comando:

$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.0 secs
     Running `target/debug/hello_cargo`
Hello, world!

Observe que, desta vez, não vimos uma saída indicando que o Cargo estava compilando hello_cargo. Cargo descobriu que os arquivos não haviam mudado, então apenas executou o binário. Se você tivesse modificado seu código-fonte, o Cargo teria reconstruído o projeto antes de executá-lo e você teria visto esta saída:

$ cargo run
Compiling hello_cargo v0.1.0 (file:///projects/hello_cargo)
 Finished dev [unoptimized + debuginfo] target(s) in 0.33 secs
  Running `target/debug/hello_cargo`
Hello, world!

Cargo também fornece um comando chamado cargo check. Este comando verifica rapidamente seu código para garantir que ele compila, mas não produz um executável:

$ cargo check
 Checking hello_cargo v0.1.0 (file:///projects/hello_cargo)
  Finished dev [unoptimized + debuginfo] target(s) in 0.32 secs

Por que você não quer um executável? Frequentemente, cargo check é muito mais rápido do que cargo build, porque pula a etapa de produção de um executável. Se você está verificando continuamente o seu trabalho enquanto escreve o código, usar cargo check irá acelerar o processo! Como tal, muitos Rustáceos executam cargo check periodicamente enquanto escrevem seu programa para garantir que ele seja compilado. Em seguida, eles executam cargo build quando estão prontos para usar o executável.

Vamos recapitular o que aprendemos até agora sobre o Cargo:

  • Podemos construir um projeto usando cargo build.
  • Podemos construir e executar um projeto em uma etapa usando cargo run.
  • Podemos construir um projeto sem produzir um binário para verificar se há erros usando cargo check.
  • Em vez de salvar o resultado da construção no mesmo diretório do nosso código, o Cargo o armazena no diretório de destino/debug.

Uma vantagem adicional de usar o Cargo é que os comandos são os mesmos, não importa em qual sistema operacional você está trabalhando. Portanto, neste ponto, não forneceremos mais instruções específicas para Linux e macOS versus Windows.

Construindo para Lançamento

Quando seu projeto estiver finalmente pronto para lançamento, você pode usar cargo build --release para compilá-lo com otimizações. Este comando criará um executável em target/release em vez de target/debug. As otimizações tornam o código do Rust mais rápido, mas ativá-las prolonga o tempo de compilação do programa. É por isso que existem dois perfis diferentes: um para o desenvolvimento, quando você deseja reconstruir rápida e frequentemente, e outro para construir o programa final que você dará a um usuário que não será reconstruído repetidamente e que será executado tão rápido quanto possível. Se você estiver comparando o tempo de execução do seu código, certifique-se de executar cargo build --release e avaliar com o executável no destino/release.

Cargo como Convenção

Com projetos simples, o Cargo não fornece muito valor em relação ao rustc, mas provará seu valor à medida que seus programas se tornam mais complexos. Com projetos complexos compostos de vários crates, é muito mais fácil deixar o Cargo coordenar a construção.

Embora o projeto hello_cargo seja simples, agora ele usa muitas das ferramentas reais que você usará no resto de sua carreira no Rust. Na verdade, para trabalhar em qualquer projeto existente, você pode usar os seguintes comandos para verificar o código usando Git, mudar para o diretório desse projeto e compilar:

$ git clone someurl.com/someproject
$ cd someproject
$ cargo build

Para mais informações sobre o Cargo, verifique sua documentação.

Resumo

Você já começou bem sua jornada com Rust! Neste capítulo, você aprendeu como:

  • Instale a última versão estável do Rust usando rustup.
  • Atualize para uma versão mais recente do Rust.
  • Abrir a documentação instalada localmente.
  • Escrever e executar um programa "Hello, Wold!" usando rustc diretamente.
  • Criar e execute um novo projeto usando as convenções do Cargo.

Traduzido por Acervo Lima. O original pode ser acessado aqui.

Licença

Introdução a linguagem de programação Rust

Observação: esta edição do livro é igual a The Rust Programming Language, disponível em formato impresso e e-book na No Starch Press.

Bem-vindo ao The Rust Programming Language, um livro introdutório sobre o Rust. A linguagem de programação Rust ajuda a escrever software mais rápido e confiável. Ergonomia de alto nível e controle de baixo nível estão freqüentemente em desacordo no projeto de linguagem de programação; Rust desafia esse conflito. Ao equilibrar uma capacidade técnica poderosa e uma ótima experiência de desenvolvedor, o Rust oferece a opção de controlar detalhes de baixo nível (como o uso de memória) sem todo o incômodo tradicionalmente associado a esse controle.

Para quem é a linguagem de programação Rust

Rust é ideal para muitas pessoas por diversos motivos. Vejamos alguns dos grupos mais importantes.

Equipes de desenvolvedores

Rust está provando ser uma ferramenta produtiva para colaboração entre grandes equipes de desenvolvedores com vários níveis de conhecimento de programação de sistemas. O código de baixo nível está sujeito a uma variedade de bugs sutis, que na maioria das outras linguagens podem ser detectados apenas por meio de testes extensivos e revisão cuidadosa do código por desenvolvedores experientes. No Rust, o compilador desempenha um papel de guardião, recusando-se a compilar o código com esses bugs elusivos, incluindo bugs de simultaneidade. Trabalhando junto com o compilador, a equipe pode gastar seu tempo focando na lógica do programa ao invés de perseguir bugs.

Rust também traz ferramentas de desenvolvedor contemporâneas para o mundo da programação de sistemas:

  • Cargo, o gerenciador de dependências incluído e a ferramenta de construção, torna a adição, compilação e gerenciamento de dependências fácil e consistente em todo o ecossistema Rust.
  • Rustfmt garante um estilo de codificação consistente entre os desenvolvedores.
  • O Rust Language Server capacita a integração com as IDEs (Integrated Development Environment) para conclusão de código e mensagens de erro em linha.

Ao usar essas e outras ferramentas no ecossistema Rust, os desenvolvedores podem ser produtivos ao escrever código em nível de sistema.

Alunos

Rust é para estudantes e interessados ​​em aprender sobre conceitos de sistemas. Usando o Rust, muitas pessoas aprenderam sobre tópicos como desenvolvimento de sistemas operacionais. A comunidade é muito acolhedora e fica feliz em responder às perguntas dos alunos. Por meio de esforços como este livro, as equipes de Rust desejam tornar os conceitos de sistema mais acessíveis a mais pessoas, especialmente as novas em programação.

Empresas

Centenas de empresas, grandes e pequenas, usam Rust na produção para uma variedade de tarefas. Essas tarefas incluem ferramentas de linha de comando, serviços da web, ferramentas DevOps, dispositivos incorporados, análise e transcodificação de áudio e vídeo, criptomoedas, bioinformática, mecanismos de pesquisa, aplicativos da Internet das coisas, aprendizado de máquina e até mesmo partes importantes do navegador Firefox.

Desenvolvedores de código aberto

Rust é para pessoas que desejam construir a linguagem de programação, comunidade, ferramentas de desenvolvedor e bibliotecas Rust. Adoraríamos que você contribuísse com a linguagem Rust.

Pessoas que valorizam velocidade e estabilidade

Rust é para pessoas que desejam velocidade e estabilidade em um idioma. Por velocidade, queremos dizer a velocidade dos programas que você pode criar com o Rust e a velocidade com que o Rust permite que você os escreva. As verificações do compilador Rust garantem a estabilidade por meio de adições de recursos e refatoração. Isso contrasta com o código legado frágil em linguagens sem essas verificações, que os desenvolvedores geralmente têm medo de modificar. Buscando abstrações de custo zero, recursos de nível superior que compilam para código de nível inferior tão rápido quanto o código escrito manualmente, Rust se empenha em fazer com que o código seguro seja um código rápido também.

A linguagem Rust espera oferecer suporte a muitos outros usuários também; aqueles mencionados aqui são apenas alguns dos maiores interessados. No geral, a maior ambição de Rust é eliminar os trade-offs que os programadores aceitaram por décadas, fornecendo segurança e produtividade, velocidade e ergonomia. Experimente o Rust e veja se as escolhas funcionam para você.

Para quem é este livro

Este livro pressupõe que você escreveu código em outra linguagem de programação, mas não faz suposições sobre qual. Tentamos tornar o material amplamente acessível para aqueles com uma ampla variedade de experiências de programação. Não gastamos muito tempo falando sobre o que é programação ou como pensar sobre isso. Se você é totalmente novo em programação, seria melhor ler um livro que fornece especificamente uma introdução à programação.

Como usar este livro

Em geral, este livro presume que você o está lendo em sequência, do início ao fim. Os capítulos posteriores baseiam-se nos conceitos dos capítulos anteriores, e os capítulos anteriores podem não se aprofundar nos detalhes de um tópico; normalmente revisitamos o tópico em um capítulo posterior.

Você encontrará dois tipos de capítulos neste livro: capítulos de conceitos e capítulos de projetos. Nos capítulos conceituais, você aprenderá sobre um aspecto do Rust. Nos capítulos do projeto, construiremos pequenos programas juntos, aplicando o que você aprendeu até agora. Os capítulos 2, 12 e 20 são capítulos de projeto; o resto são capítulos de conceitos.

O Capítulo 1 explica como instalar o Rust, como escrever um programa Hello, world! e como usar o Cargo, o gerenciador de pacotes e ferramenta de compilação do Rust. O Capítulo 2 é uma introdução prática à linguagem Rust. Aqui, cobrimos os conceitos em alto nível e os capítulos posteriores fornecerão detalhes adicionais. Se você quiser sujar as mãos imediatamente, o Capítulo 2 é o lugar para isso. A princípio, você pode até querer pular o Capítulo 3, que cobre os recursos do Rust semelhantes aos de outras linguagens de programação, e ir direto para o Capítulo 4 para aprender sobre o sistema de propriedade do Rust. No entanto, se você for um aluno particularmente meticuloso que prefere aprender todos os detalhes antes de passar para o próximo, você pode querer pular o Capítulo 2 e ir direto para o Capítulo 3, voltando ao Capítulo 2 quando quiser trabalhar em um projeto aplicando os detalhes que você aprendeu.

O Capítulo 5 discute estruturas e métodos, e o Capítulo 6 cobre enums, expressões match e a construção de fluxo de controle if let. Você usará structs e enums para criar tipos personalizados em Rust.

No Capítulo 7, você aprenderá sobre o sistema de módulo de Rust e sobre as regras de privacidade para organizar seu código e sua API (Interface de Programação de Aplicativo) pública. O Capítulo 8 discute algumas estruturas de coleta de dados comuns que a biblioteca padrão fornece, como vetores, strings e mapas hash. O Capítulo 9 explora a filosofia e as técnicas de tratamento de erros de Rust.

O Capítulo 10 investiga genéricos, características e tempos de vida, que lhe dão o poder de definir o código que se aplica a vários tipos. O Capítulo 11 trata de testes, que mesmo com as garantias de segurança de Rust são necessários para garantir que a lógica de seu programa está correta. No Capítulo 12, construiremos nossa própria implementação de um subconjunto de funcionalidades da ferramenta de linha de comando grep que pesquisa texto em arquivos. Para isso, usaremos muitos dos conceitos que discutimos nos capítulos anteriores.

O Capítulo 13 explora fechamentos e iteradores: recursos do Rust que vêm de linguagens de programação funcionais.

No Capítulo 14, examinaremos o Cargo com mais detalhes e falaremos sobre as melhores práticas para compartilhar suas bibliotecas com outras pessoas.

O Capítulo 15 discute ponteiros inteligentes que a biblioteca padrão fornece e as características que permitem sua funcionalidade.

No Capítulo 16, examinaremos diferentes modelos de programação simultânea e falaremos sobre como o Rust o ajuda a programar em vários threads sem medo. O Capítulo 17 examina como os idiomas do Rust se comparam aos princípios de programação orientada a objetos com os quais você pode estar familiarizado.

O Capítulo 18 é uma referência sobre padrões e correspondência de padrões, que são maneiras poderosas de expressar ideias em programas Rust. O Capítulo 19 contém uma miscelânea de tópicos avançados de interesse, incluindo Rust inseguro, macros e muito mais sobre vidas, características, tipos, funções e encerramentos.

No Capítulo 20, concluiremos um projeto no qual implementaremos um servidor da web multithread de baixo nível!

Finalmente, alguns apêndices contêm informações úteis sobre a linguagem Rust em um formato mais parecido com uma referência. O Apêndice A cobre as palavras-chave do Rust, o Apêndice B cobre os operadores e símbolos do Rust, o Apêndice C cobre as características deriváveis ​​fornecidas pela biblioteca padrão, o Apêndice D cobre algumas ferramentas de desenvolvimento úteis e o Apêndice E explica as edições do Rust.

Não há maneira errada de ler este livro: se você quiser pular, vá em frente! Você pode ter que voltar aos capítulos anteriores se sentir alguma confusão. Mas faça o que funcionar para você.

Uma parte importante do processo de aprendizagem do Rust é aprender a ler as mensagens de erro que o compilador exibe: elas o guiarão para o código de trabalho. Como tal, forneceremos muitos exemplos que não compilam junto com a mensagem de erro que o compilador mostrará a você em cada situação. Saiba que se você inserir e executar um exemplo aleatório, ele pode não ser compilado! Certifique-se de ler o texto ao redor para ver se o exemplo que você está tentando executar está destinado a erro. Ferris também o ajudará a distinguir o código que não foi feito para funcionar:

Ferris Significado
Esse código não compila Este código não compila!
Este código entra em pânico Este código entra em pânico!
Este bloco de código contém código não seguro Este bloco de código contém código não seguro.
Este código não produz o comportamento desejado Este código não produz o comportamento desejado.

Na maioria das situações, levaremos você à versão correta de qualquer código que não compila.

Código fonte

Os arquivos de origem a partir dos quais este livro é gerado podem ser encontrados no GitHub.

Traduzido por Acervo Lima. O original pode ser acessado aqui.

Licença

Prefácio

Nem sempre foi tão claro, mas a linguagem de programação Rust é fundamentalmente sobre empoderamento : não importa que tipo de código você está escrevendo agora, Rust permite que você vá mais longe, para programar com confiança em uma variedade maior de domínios do que você fazia antes.

Considere, por exemplo, o trabalho de “nível de sistema” que lida com detalhes de baixo nível de gerenciamento de memória, representação de dados e simultaneidade. Tradicionalmente, esse reino da programação é visto como misterioso, acessível apenas a alguns poucos selecionados que devotaram os anos necessários para aprender a evitar suas armadilhas infames. E mesmo aqueles que o praticam o fazem com cautela, para que seu código não fique aberto a exploits, travamentos ou corrupção.

Rust quebra essas barreiras eliminando as velhas armadilhas e fornecendo um conjunto de ferramentas amigável e polido para ajudá-lo ao longo do caminho. Os programadores que precisam “mergulhar” no controle de nível inferior podem fazer isso com Rust, sem assumir o risco habitual de travamentos ou falhas de segurança e sem ter que aprender os detalhes de uma cadeia de ferramentas inconstante. Melhor ainda, a linguagem foi projetada para guiá-lo naturalmente em direção a um código confiável e eficiente em termos de velocidade e uso de memória.

Os programadores que já estão trabalhando com código de baixo nível podem usar Rust para aumentar suas ambições. Por exemplo, a introdução do paralelismo no Rust é uma operação de risco relativamente baixo: o compilador detectará os erros clássicos para você. E você pode lidar com otimizações mais agressivas em seu código com a confiança de que não introduzirá acidentalmente travamentos ou vulnerabilidades.

Mas Rust não está limitado à programação de sistemas de baixo nível. É expressivo e ergonômico o suficiente para tornar aplicativos CLI, servidores da web e muitos outros tipos de código bastante agradáveis ​​de escrever - você encontrará exemplos simples de ambos posteriormente neste livro. Trabalhar com Rust permite que você desenvolva habilidades que são transferidas de um domínio para outro; você pode aprender Rust escrevendo um aplicativo da web e, em seguida, aplicar essas mesmas habilidades para direcionar seu Raspberry Pi.

Este livro abrange totalmente o potencial do Rust para capacitar seus usuários. É um texto amigável e acessível que visa ajudá-lo a evoluir não apenas em seu conhecimento sobre Rust, mas também em seu alcance e confiança como programador em geral. Então mergulhe, prepare-se para aprender e bem-vindo à comunidade Rust!

- Nicholas Matsakis e Aaron Turon

Tradução feita por Acervo Lima. O original pode ser acessado aqui.

Licença

A Linguagem de Programação Rust

por Steve Klabnik e Carol Nichols, com contribuições da Comunidade Rust

Esta versão do texto presume que você está usando o Rust 1.48 ou posterior com edition="2018" no arquivo Cargo.toml em todos os projetos para usar a linguagem da edição Rust 2018. Consulte a seção “Instalação” do Capítulo 1 para instalar ou atualizar o Rust e consulte o novo Apêndice E para obter informações sobre as edições.

A edição 2018 da linguagem Rust inclui uma série de melhorias que tornam o Rust mais ergonômico e fácil de aprender. Esta iteração do livro contém uma série de alterações para refletir essas melhorias:

  • O Capítulo 7, “Gerenciando projetos em crescimento com pacotes, crates e módulos”, foi quase todo reescrito. O sistema de módulos e a forma como os caminhos funcionam na edição 2018 ficaram mais consistentes.
  • O Capítulo 10 tem novas seções intituladas “Características como parâmetros” e “Tipos de retorno que implementam características” que explicam a nova sintaxe impl Trait.
  • O Capítulo 11 tem uma nova seção intitulada “Usando Result<T, E> em testes” que mostra como escrever testes que usam o operador ?.
  • A seção “Tempo de vida avançado” no Capítulo 19 foi removida porque as melhorias do compilador tornaram as construções nessa seção ainda mais raras.
  • O Apêndice D anterior, “Macros”, foi expandido para incluir macros procedimentais e foi movido para a seção “Macros” no Capítulo 19.
  • O Apêndice A, “Palavras-chave”, também explica o novo recurso de identificadores brutos que permite a interoperação de códigos escritos nas edições 2015 e 2018.
  • O Apêndice D agora é intitulado “Ferramentas úteis de desenvolvimento” e cobre as ferramentas lançadas recentemente que ajudam a escrever código Rust.
  • Corrigimos uma série de pequenos erros e redação imprecisa ao longo do livro. Obrigado aos leitores que os relataram!

Observe que qualquer código em iterações anteriores do The Rust Programming Language que compilou continuará a compilar sem edition="2018" no arquivo Cargo.toml do projeto, mesmo que você atualize a versão do compilador Rust que está usando. Essas são as garantias de compatibilidade com versões anteriores do Rust em ação!

O formato HTML está disponível online em https://doc.rust-lang.org/stable/book/ e offline com instalações do Rust feitas com rustup; execute rustup docs --book para abrir.

Este texto está disponível em formato de brochura e e-book na No Starch Press .

Tradução feita por Acervo Lima. O original pode ser acessado aqui.

Licença

quinta-feira, 4 de fevereiro de 2021

Aplicações do Machine Learning

Introdução

O aprendizado de máquina é uma das tecnologias mais interessantes que alguém já encontrou. Como fica evidente pelo nome, ele confere ao computador aquilo que o torna mais parecido com o ser humano: a capacidade de aprender. O aprendizado de máquina está sendo usado ativamente hoje, talvez em muitos mais lugares do que seria de se esperar. Provavelmente usamos um algoritmo de aprendizado dezenas de vezes, mesmo sem saber. As aplicações de aprendizado de máquina incluem:

  • Mecanismo de busca na web: uma das razões pelas quais mecanismos de busca como google, bing etc funcionam tão bem é porque o sistema aprendeu como classificar as páginas por meio de um algoritmo de aprendizado complexo.
  • Aplicativos de marcação de fotos: seja no Facebook ou qualquer outro aplicativo de marcação de fotos, a capacidade de marcar amigos torna isso ainda mais acontecendo. Tudo isso é possível por causa de um algoritmo de reconhecimento de rosto executado por trás do aplicativo.
  • Detector de spam: nosso agente de e-mail, como Gmail ou Hotmail, faz um grande trabalho duro para nós, classificando os e-mails e movendo-os para a pasta de spam. Isso é novamente alcançado por um classificador de spam executado no back-end do aplicativo de e-mail.

Hoje, as empresas estão usando o aprendizado de máquina para melhorar as decisões de negócios, aumentar a produtividade, detectar doenças, prever o clima e fazer muito mais coisas. Com o crescimento exponencial da tecnologia, não só precisamos de melhores ferramentas para entender os dados que temos atualmente, mas também precisamos nos preparar para os dados que teremos. Para atingir esse objetivo, precisamos construir máquinas inteligentes. Podemos escrever um programa para fazer coisas simples. Mas, na maioria das vezes, conectar a inteligência com hardware é difícil. A melhor maneira de fazer isso é ter uma maneira de as próprias máquinas aprenderem as coisas. Um mecanismo de aprendizagem - se uma máquina pode aprender com a entrada, ela faz o trabalho difícil para nós. É aqui que o Machine Learning entra em ação. Alguns exemplos de aprendizado de máquina são:

  • Mineração de banco de dados para o crescimento da automação: as aplicações típicas incluem dados de cliques da Web para uma melhor experiência do usuário (experiência do usuário), registros médicos para uma melhor automação em saúde, dados biológicos e muito mais.
  • Aplicativos que não podem ser programados: Existem algumas tarefas que não podem ser programadas porque os computadores que usamos não são modelados dessa forma. Os exemplos incluem direção autônoma, tarefas de reconhecimento de dados não ordenados (reconhecimento facial / reconhecimento de caligrafia), processamento de linguagem natural, visão por computador etc.
  • Compreendendo a aprendizagem humana: isso é o mais próximo que entendemos e imitamos o cérebro humano. É o início de uma nova revolução, A verdadeira IA. Agora, após um breve insight, vamos chegar a uma definição mais formal de aprendizado de máquina.
  • Arthur Samuel (1959): “Aprendizado de máquina é um campo de estudo que dá aos computadores a capacidade de aprender sem ser explicitamente programado.” Samuel escreveu um programa de jogo Checker que poderia aprender com o tempo. No início, poderia ser facilmente vencido. Mas, com o tempo, aprendeu toda a posição do tabuleiro que o levaria à vitória ou derrota e, portanto, tornou-se um jogador de xadrez melhor que o próprio Samuel. Esta foi uma das primeiras tentativas de definir o Aprendizado de Máquina e é um pouco menos formal.
  • Tom Michel (1999): “Diz-se que um programa de computador aprende com a experiência E com relação a alguma classe de tarefas T e medida de desempenho P, se o seu desempenho nas tarefas em T, conforme medido por P, melhora com a experiência E.” Esta é uma definição mais formal e matemática. Para o programa de xadrez anterior.

No próximo tutorial, classificaremos os tipos de problemas de aprendizado de máquina e também discutiremos sobre pacotes úteis e ambiente de configuração para aprendizado de máquina e como podemos usá-lo para criar novos projetos.

Artigo escrito por Abhishek Sharma e traduzido por Acervo Lima de Machine Learning – Applications.

Desmistificando o Machine Learning

Aprendizado de máquina. Essa é uma palavra que tem um impacto! O aprendizado de máquina está na moda atualmente! E por que não séria assim? Quase todo novo desenvolvimento “atraente” no campo da Ciência da Computação e Desenvolvimento de Software em geral tem algo relacionado ao aprendizado de máquina por trás dos véus. Cortana da Microsoft - Aprendizado de Máquina. Reconhecimento de objetos e faces - Aprendizado de máquina e visão computacional. Programas avançados de melhoria de UX - Aprendizado de máquina (sim! A recomendação de produto da Amazon que você acabou de receber foi o esforço de processamento de números de algum algoritmo de aprendizado de máquina).

E nem é só isso. O aprendizado de máquina e a ciência de dados em geral estão EM TODA PARTE. É tão onipotente quanto o próprio Deus, se ele tivesse gostado de computadores! Por quê? Porque os dados estão em toda parte!

Portanto, é natural que qualquer pessoa que tenha cérebros acima da média e possa diferenciar os Paradigmas de Programação dando uma espiada no Código fique intrigada com o Aprendizado de Máquina.

Mas o que é aprendizado de máquina? E quão grande é o aprendizado de máquina? Vamos desmistificar o aprendizado de máquina de uma vez por todas. E para fazer isso, em vez de apresentar especificações técnicas, seguiremos uma abordagem “Entenda pelo Exemplo”.

Aprendizado de máquina: o que é realmente?

Bem, o Aprendizado de Máquina é um subcampo da Inteligência Artificial que evoluiu a partir da teoria do Reconhecimento de Padrões e Aprendizagem Computacional. Arthur Lee Samuel define Aprendizado de Máquina como: "Campo de estudo que dá aos computadores a capacidade de aprender sem serem programados explicitamente".

Então, basicamente, a área de Ciência da Computação e Inteligência Artificial “aprende” com dados sem intervenção humana.

Mas essa visão tem uma falha. Como resultado dessa percepção, sempre que a palavra Aprendizado de Máquina é usada, as pessoas geralmente pensam em "IA", "Redes Neurais que podem imitar cérebros humanos (a partir de agora, isso não é possível)", Carros que dirigem sozinho e mais. Mas o aprendizado de máquina está muito além disso. Abaixo, descobrimos algumas facetas esperadas e algumas facetas geralmente não esperadas da computação moderna, onde o aprendizado de máquina está em ação.

Aprendizado de máquina: O esperado

Começaremos com alguns lugares onde você pode esperar que o aprendizado de máquina desempenhe um papel.

  • Reconhecimento de fala (processamento de linguagem natural em termos mais técnicos): você conversa com Cortana em dispositivos Windows. Mas como ele entende o que você diz? Em seguida, surge o campo do Processamento de Linguagem Natural, ou PNL, que trata do estudo das interações entre Máquinas e Humanos, por meio da Lingüística. Adivinhe o que está no coração da PNL: Algoritmos e Sistemas de Aprendizado de Máquina (Modelos Ocultos de Markov sendo um).
  • Visão computacional: Visão computacional é um subcampo da IA ​​que lida com a interpretação (provável) de uma máquina do mundo real. Em outras palavras, todo reconhecimento facial, reconhecimento de padrões e técnicas de reconhecimento de caracteres pertencem à visão computacional. E o Aprendizado de Máquina, mais uma vez, com sua ampla variedade de Algoritmos, está no coração da Visão Computacional.
  • Carro autônomo do Google: bem. Você pode imaginar o que realmente o impulsiona. Mais vantagens do Machine Learning.

Mas essas eram aplicações esperadas. Até mesmo um pessimista teria um bom insight sobre esses feitos da tecnologia sendo trazidos à vida por alguma “magia de computador mística (e extremamente difícil) esmagadora de mente”.

Aprendizado de máquina: O inesperado

Vamos visitar alguns lugares que as pessoas normais não associam facilmente com o aprendizado de máquina:

  • Recomendações de produtos da Amazon: Você já se perguntou como a Amazon sempre tem uma recomendação que tenta aliviar sua carteira. Bem, esse é um algoritmo(s) de aprendizado de máquina chamado “Sistemas de recomendação” trabalhando em segundo plano. Ele aprende as preferências pessoais de cada usuário e faz recomendações de acordo com isso.
  • Youtube / Netflix: Eles funcionam exatamente como acima!
  • Data Mining / Big Data: Isso pode não ser um choque para muitos. Mas Data Mining e Big Data são apenas manifestações de estudo e aprendizagem de dados em uma escala maior. E onde quer que haja o objetivo de extrair informações dos dados, você encontrará o aprendizado de máquina à espreita.
  • Mercado de Capitais / Financiamento Habitacional / Imobiliário: Todos estes campos, incorporam muitos sistemas de Aprendizagem de Máquina para melhor avaliar o mercado, nomeadamente “Técnicas de Regressão”, para coisas tão medíocres como prever o preço de uma Casa, prever e analisando as tendências do mercado de ações.

Então, como você deve ter visto agora. O aprendizado de máquina realmente está em toda parte. De Pesquisa e Desenvolvimento à melhoria de negócios de Pequenas Empresas. Está em todo lugar. E, portanto, é uma opção de carreira e tanto, já que a indústria está em ascensão e o benefício não vai parar tão cedo.

Então, é isso por enquanto. Isso conclui nosso aprendizado de máquina 101. Esperamos nos encontrar novamente e, quando o fizermos, nos aprofundaremos em alguns detalhes técnicos do aprendizado de máquina, quais ferramentas são usadas no setor e como iniciar sua jornada para a proeza do aprendizado de máquina.

Artigo escrito por Sarthak Yadav e traduzido por Acervo Lima de Demystifying Machine Learning.

Introdução ao aprendizado de máquina

Este artigo discute as categorias de problemas de aprendizado de máquina e terminologias usadas no campo do aprendizado de máquina.

Tipos de problemas de aprendizado de máquina

Existem várias maneiras de classificar os problemas de aprendizado de máquina. Aqui, discutimos os mais óbvios.

1. Com base na natureza do "sinal" ou "feedback" de aprendizagem disponível para um sistema de aprendizagem.

  • Aprendizagem supervisionada: O computador é apresentado com exemplos de entradas e suas saídas desejadas, fornecidas por um “professor”, e o objetivo é aprender uma regra geral que mapeia entradas em saídas. O processo de treinamento continua até que o modelo atinja o nível desejado de precisão nos dados de treinamento. Alguns exemplos da vida real são:
    • Classificação de imagens: Você treina com imagens / rótulos. Então, no futuro, você fornece uma nova imagem esperando que o computador reconheça o novo objeto.
    • Previsão / regressão do mercado: você treina o computador com dados históricos do mercado e pede que ele preveja o novo preço no futuro.
  • Aprendizagem não supervisionada: nenhum rótulo é dado ao algoritmo de aprendizagem, deixando-o sozinho para encontrar a estrutura em sua entrada. É usado para agrupar a população em grupos diferentes. A aprendizagem não supervisionada pode ser um objetivo em si (descobrir padrões ocultos nos dados).
    • Clustering: você pede ao computador para separar dados semelhantes em clusters, isso é essencial na pesquisa e na ciência.
    • Visualização de alta dimensão: Use o computador para nos ajudar a visualizar dados de alta dimensão.
    • Modelos gerativos: depois que um modelo captura a distribuição de probabilidade de seus dados de entrada, ele será capaz de gerar mais dados. Isso pode ser muito útil para tornar seu classificador mais robusto.

Um diagrama simples que esclarece o conceito de aprendizagem supervisionada e não supervisionada é mostrado abaixo:

Como você pode ver claramente, os dados da aprendizagem supervisionada são rotulados, enquanto os dados da aprendizagem não supervisionada não são rotulados.

  • Aprendizagem semissupervisionada: os problemas em que você tem uma grande quantidade de dados de entrada e apenas alguns dos dados são rotulados são chamados de problemas de aprendizagem semissupervisionada. Esses problemas ficam entre o aprendizado supervisionado e o não supervisionado. Por exemplo, um arquivo de fotos onde apenas algumas das imagens estão etiquetadas (por exemplo, cachorro, gato, pessoa) e a maioria não está etiquetada.
  • Aprendizagem por reforço: um programa de computador interage com um ambiente dinâmico no qual deve realizar um determinado objetivo (como dirigir um veículo ou jogar um jogo contra um oponente). O programa recebe feedback em termos de recompensas e punições à medida que navega no espaço do problema.

2. Com base na "saída" desejada de um sistema aprendido por máquina

  • Classificação: as entradas são divididas em duas ou mais classes, e o aluno deve produzir um modelo que atribua entradas não vistas a uma ou mais (classificação multi-rótulo) dessas classes. Normalmente, isso é resolvido de forma supervisionada. A filtragem de spam é um exemplo de classificação, onde as entradas são mensagens de e-mail (ou outras) e as classes são “spam” e “não spam”.
  • Regressão: também é um problema de aprendizado supervisionado, mas as saídas são contínuas ao invés de discretas. Por exemplo, prever os preços das ações usando dados históricos.

Um exemplo de classificação e regressão em dois conjuntos de dados diferentes é mostrado abaixo:

  • Clustering: aqui, um conjunto de entradas deve ser dividido em grupos. Ao contrário da classificação, os grupos não são conhecidos de antemão, o que torna essa tarefa normalmente não supervisionada.
    Como você pode ver no exemplo abaixo, os pontos do conjunto de dados fornecidos foram divididos em grupos identificáveis ​​pelas cores vermelho, verde e azul.
  • Estimativa de densidade: A tarefa é encontrar a distribuição de entradas em algum espaço.
  • Redução de dimensionalidade: simplifica as entradas mapeando-as em um espaço de dimensão inferior. A modelagem de tópicos é um problema relacionado, em que um programa recebe uma lista de documentos em linguagem humana e tem a tarefa de descobrir quais documentos cobrem tópicos semelhantes.

Com base nessas tarefas / problemas de aprendizado de máquina, temos uma série de algoritmos que são usados ​​para realizar essas tarefas. Alguns algoritmos de aprendizado de máquina comumente usados ​​são Regressão Linear, Regressão Logística, Árvore de Decisão, SVM (máquinas de vetor de suporte), Naive Bayes, KNN (K vizinhos mais próximos), K-Means, Floresta Aleatória, etc.

Observação: todos esses algoritmos serão abordados em artigos futuros.

Terminologias de aprendizado de máquina

  • Modelo
    Um modelo é uma representação específica aprendida de dados aplicando algum algoritmo de aprendizado de máquina. Um modelo também é chamado de hipótese .
  • Recurso
    Um recurso é uma propriedade individual mensurável de nossos dados. Um conjunto de recursos numéricos pode ser convenientemente descrito por um vetor de recursos . Os vetores de recursos são alimentados como entrada para o modelo. Por exemplo, para prever uma fruta, pode haver características como cor, cheiro, sabor, etc.
    Nota: A escolha de características informativas, discriminativas e independentes é uma etapa crucial para algoritmos eficazes. Geralmente empregamos um extrator de recursos para extrair os recursos relevantes dos dados brutos.
  • Alvo (rótulo)
    Uma variável ou rótulo alvo é o valor a ser previsto por nosso modelo. Para o exemplo de fruta discutido na seção de recursos, o rótulo com cada conjunto de entrada seria o nome da fruta como maçã, laranja, banana, etc.
  • Treinamento
    A ideia é dar um conjunto de entradas (recursos) e suas saídas esperadas (rótulos), portanto, após o treinamento, teremos um modelo (hipótese) que mapeará os novos dados para uma das categorias treinadas.
  • Predição Assim
    que nosso modelo estiver pronto, ele pode ser alimentado com um conjunto de entradas para as quais fornecerá uma saída prevista (rótulo).

A figura mostrada abaixo esclarece os conceitos acima:

Artigos relacionados:

Referências:

Artigo escrito por Nikhil Kumar e traduzido por Acervo Lima de Getting started with Machine Learning.