<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jose Tandavala</title>
    <description>The latest articles on DEV Community by Jose Tandavala (@tandavala).</description>
    <link>https://dev.to/tandavala</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F208038%2F009b0d9f-6f96-464a-8394-18c1bff3ea33.jpg</url>
      <title>DEV Community: Jose Tandavala</title>
      <link>https://dev.to/tandavala</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tandavala"/>
    <language>en</language>
    <item>
      <title>Descomplicando Machine Learning - Parte V</title>
      <dc:creator>Jose Tandavala</dc:creator>
      <pubDate>Sat, 02 Dec 2023 23:06:01 +0000</pubDate>
      <link>https://dev.to/tandavala/descomplicando-machine-learning-parte-v-2md4</link>
      <guid>https://dev.to/tandavala/descomplicando-machine-learning-parte-v-2md4</guid>
      <description>&lt;h3&gt;
  
  
  Motivação
&lt;/h3&gt;

&lt;p&gt;Parabéns por chegares até aqui! Percorremos uma jornada significativa até aqui. No início da nossa jornada, abordamos conceitos fundamentais de machine learning, isto é, no &lt;a href="https://dev.to/tandavala/descomplicando-machine-learning-parte-i-2b2f"&gt;artigo I&lt;/a&gt;, também discutimos alguns desafios que podem se apresentar ao iniciar uma carreira nesta área empolgante. Caso ainda não tenhas lido, confira neste &lt;a href="https://dev.to/tandavala/descomplicando-machine-learning-parte-ii-3d05"&gt;link&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Mais adiante, introduzimos o &lt;a href="https://dev.to/tandavala/descomplicando-machine-learning-parte-iii-c80"&gt;CRISP-DM&lt;/a&gt;, que serviu como bússola para desenvolver o nosso &lt;a href="https://dev.to/tandavala/descomplicando-machine-learning-parte-iv-2p1m"&gt;projeto de estudo de caso&lt;/a&gt;. Agora, com um &lt;a href="https://www.kaggle.com/code/tandavala/modelo-preditivo-de-pre-os-residenciais"&gt;modelo&lt;/a&gt; de aprendizado de máquina em mãos, é o momento de levá-lo à produção. Tudo pronto para embarcar nesta próxima fase da nossa aventura? Então vamos nessa.&lt;/p&gt;

&lt;h4&gt;
  
  
  Agenda:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Explorando &lt;strong&gt;MLOps&lt;/strong&gt;: Uma visão abrangente&lt;/li&gt;
&lt;li&gt;Entendendo &lt;strong&gt;Drift&lt;/strong&gt; em Machine Learning: Uma breve introdução&lt;/li&gt;
&lt;li&gt;Construindo um &lt;strong&gt;Pipeline&lt;/strong&gt; de Desenvolvimento para Machine Learning&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  1. Explorando MLOps: Uma visão abrangente
&lt;/h3&gt;

&lt;p&gt;Para profissionais que atuam no desenvolvimento de software, é amplamente reconhecido que ao implantar uma solução em produção, a adoção de práticas de &lt;a href="https://pt.wikipedia.org/wiki/DevOps"&gt;DevOps&lt;/a&gt; é fundamental. No contexto de projetos de machine learning, a realidade não é diferente; para colocar uma solução em produção, recorremos a práticas de &lt;a href="https://pt.wikipedia.org/wiki/MLOps"&gt;MLOps&lt;/a&gt;. Diria que &lt;strong&gt;MLOps&lt;/strong&gt; é uma extensão do &lt;strong&gt;DevOps&lt;/strong&gt; direcionada ao aprendizado de máquina, acredito que só com este argumento já dá para ter uma visão abrangente dessa abordagem.&lt;/p&gt;

&lt;p&gt;Neste artigo veremos, como automatizar o cíclo de vida de desenvolvimento de um projeto ML usando ferramentas e práticas de MLOps. Abaixo, apresentamos uma lista das principais ferramentas que contribuem para a cultura de &lt;strong&gt;MLOps&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cookiecutter&lt;/strong&gt;: ferramenta de linha de comando que facilita a criação de projetos a partir de templates pré-definidos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;git/github&lt;/strong&gt;: ferramentas de versionamento e hospegagem de código&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data version control (DVC)&lt;/strong&gt;: ferramenta projetada para gerenciar o versionamento de dados em projetos de ciência de dados e machine learning (&lt;strong&gt;não veremos aqui&lt;/strong&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MLFlow&lt;/strong&gt;: Registro e organização (

&lt;code&gt;versionamento&lt;/code&gt;

) de experimentos de machine learning. Isso inclui a gravação de parâmetros, métricas e artefatos associados a um modelo durante o treinamento. (

&lt;code&gt;usaremos apenas para o veriosnamento e gravação de artifatos&lt;/code&gt;

)
- &lt;strong&gt;Docker&lt;/strong&gt;: plataforma de código aberto que automatiza o processo de implantação de aplicativos dentro de container&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Outras ferramentas:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Flask&lt;/strong&gt;: framework para desenvolvimento de apps web e restfull em Python&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pytest&lt;/strong&gt;: framework de teste em Python que facilita a escrita de testes unitários, de integração e funcionais&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ReactJs&lt;/strong&gt;: biblioteca JavaScript para a construção de interfaces de usuário&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Entendendo Drift em Machine Learning: Uma breve introdução
&lt;/h3&gt;

&lt;p&gt;Em machine learning, o termo &lt;strong&gt;&lt;em&gt;drift&lt;/em&gt;&lt;/strong&gt; refere-se a um fenômeno em que a distribuição dos dados utilizados para treinar um modelo de machine learning muda ao longo do tempo de maneira não esperada. Esse fenômeno pode ter um impacto significativo no desempenho do modelo, pois o modelo foi treinado com base em uma distribuição específica de dados, e sua eficácia pode diminuir quando confrontado com dados que diferem dessa distribuição original.&lt;/p&gt;

&lt;p&gt;Existem dois tipos principais de drift em machine learning:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Drift de Conceito (Concept Drift)&lt;/strong&gt;: Isso ocorre quando a relação entre as variáveis de entrada e a variável de saída (rótulo) muda ao longo do tempo&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Drift de Dados (Data Drift):&lt;/strong&gt; Refere-se a mudanças na distribuição dos dados de entrada ao longo do tempo, ou seja, Se o modelo foi treinado em uma distribuição específica e é exposto a dados que não seguem mais essa distribuição, sua eficácia pode diminuir.&lt;/p&gt;

&lt;p&gt;Abaixo, estão algumas práticas para prevenir drift em projetos de Machine Learning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Monitoramento Contínuo&lt;/li&gt;
&lt;li&gt;Re-treinamento Incremental (a importância desse tópico será abordada no próximo ponto)&lt;/li&gt;
&lt;li&gt;Desenvolvimento de Modelos Robustos&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Construindo um Pipeline de Desenvolvimento para Machine Learning
&lt;/h3&gt;

&lt;p&gt;Pipeline em machine learning, refere - se a uma sequência de processos automatizados encadeados para realizar tarefas específicas, desde a preparação dos dados até a avaliação do modelo. O ciclo de vida de um modelo de machine learning não se encerra após o treinamento inicial e a implantação, como discutimos anteriormente, o cíclo de vida do projeto é transformado em um processo contínuo para evitar problemas como o Drift. É nesse contexto que os pipelines se destacam, essa abordagem sistemática é projetada para facilitar a reprodutibilidade, modularidade e eficiência no desenvolvimento e implementação de modelos de machine learning.&lt;/p&gt;

&lt;p&gt;Os pipelines em machine learning geralmente incluem as seguintes etapas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Coleta de Dados&lt;/strong&gt;: Aquisição e importação dos dados necessários para treinar e testar o modelo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pré-processamento de Dados&lt;/strong&gt;: Manipulação e limpeza dos dados brutos para torná-los adequados para treinamento de modelos&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Engenharia de Recursos (Feature Engineering)&lt;/strong&gt;: Criação ou modificação de variáveis para melhorar o desempenho do modelo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treinamento do Modelo&lt;/strong&gt;: Utilização de algoritmos de machine learning para treinar o modelo nos dados preparados&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validação do Modelo&lt;/strong&gt;: Avaliação do desempenho do modelo utilizando dados de validação ou testes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ajuste do Modelo (Fine-Tuning)&lt;/strong&gt;: Ajuste dos hiperparâmetros do modelo para melhorar o desempenho.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Implantação&lt;/strong&gt;: Colocação do modelo em produção para que ele possa ser usado para fazer previsões em dados novos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Já que estamos utilizando o scikit-learn em nosso projeto de caso de uso, então veremos na pratica a construção da pipeline usando esta ferramenta.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusão
&lt;/h3&gt;

&lt;p&gt;Agora que estabelecemos os fundamentos para a implantação de um projeto de machine learning, é importante recordar que abordamos temas cruciais, tais como MLOps, sua relevância, estratégias para evitar o drift em projetos de machine learning, e concluímos a discussão com o conceito de &lt;strong&gt;pipeline&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;No próximo artigo, iremos colocar tudo isso em prática. Vamos construir nossa pipeline de machine learning, incorporando práticas de MLOps para automatizar o fluxo de re-treinamento e implantação do nosso modelo em produção. Até lá, cuide-se, e nos encontramos no próximo artigo.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Descomplicando Machine Learning - Parte IV</title>
      <dc:creator>Jose Tandavala</dc:creator>
      <pubDate>Sat, 18 Nov 2023 16:52:32 +0000</pubDate>
      <link>https://dev.to/tandavala/descomplicando-machine-learning-parte-iv-2p1m</link>
      <guid>https://dev.to/tandavala/descomplicando-machine-learning-parte-iv-2p1m</guid>
      <description>&lt;h2&gt;
  
  
  Motivação
&lt;/h2&gt;

&lt;p&gt;No ultimo &lt;a href="https://dev.to/tandavala/descomplicando-machine-learning-parte-iii-c80"&gt;artigo&lt;/a&gt;, falamos da importancia do &lt;a href="https://www.datascience-pm.com/crisp-dm-2/"&gt;CRISP-DM e vimos  que o CRISP-DM&lt;/a&gt; emerge como uma estrutura proeminente, oferecendo uma abordagem sistemática e flexível para enfrentar os desafios complexos da mineração de dados. Também vimos que o CRISP-DM está subdividado em 6 parte, onde falamos das três primeiras fase e hoje vamos falar da quarta (&lt;strong&gt;Modelagem&lt;/strong&gt;) e a Quinta fase (&lt;strong&gt;Evolutation&lt;/strong&gt;)  do CRISP-DM&lt;/p&gt;

&lt;p&gt;Apesar que num projeto de machine learning gasta - se mas tempo na fase de preparação de dados, não é com isso que a fase da modelagem é a mais facil, pelo contrário dependendo da dimensão do projeto, modelagem é uma das fase complexa no ciclo de vida de desenvolvimento de um modelo de aprendezagem de máquina. E o nosso objectivo com este artigo de hoje é propor uma abordagem que pode servir de boilerplace na hora de fazer modelegam. Vamos á isso?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTA:&lt;/strong&gt; Com o intuito de evitar que o artigo se transforme em um tutorial, iremos enfatizar apenas as partes essenciais. Para uma experiência mais completa ao seguir o artigo, não deixe de consultar o &lt;a href="https://www.kaggle.com/code/tandavala/modelo-preditivo-de-pre-os-residenciais?scriptVersionId=151256622"&gt;notebook do projeto&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  4º Fase do CRISP-DM - Modelagem
&lt;/h3&gt;

&lt;p&gt;Criar modelos em machine learning refere-se à etapa em que um modelo é desenvolvido usando algoritmos específicos e dados de trainamento para realizar tarefas específicas.&lt;/p&gt;

&lt;p&gt;Na minha opinião, esta é a fase mais fascinante de um projeto de machine learning, pois é aqui que os elementos se entrelaçam para criar um produto utilizável pelo utilizador final. Para conduzir esta fase, vamos seguir os seguintes pontos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Compreender a correlação entre a variável preditiva (o target) e as outras variáveis explicativas.&lt;/li&gt;
&lt;li&gt;Preparar os dados para os algoritmos de machine learning.&lt;/li&gt;
&lt;li&gt;Aplicar o dimensionamento de características (feature scaling)&lt;/li&gt;
&lt;li&gt;Selecionar, treinar o modelo e avaliar o desempenho.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  1. Compreender a correlação entre a variável preditiva (o target)
&lt;/h3&gt;

&lt;p&gt;A correlação de dados em machine learning refere-se à medida estatística que avalia a relação entre duas variáveis. Essa relação pode ser positiva, negativa ou neutra, indicando como as variáveis mudam em relação uma à outra. A correlação é uma ferramenta crucial na fase de preparação de dados e na escolha de variáveis para construir modelos eficazes.&lt;/p&gt;

&lt;p&gt;O coeficiente de correlação varia de –1 a 1. Quando está próximo de 1, significa que há uma forte correlação positiva; olhando no nosso &lt;a href="https://www.kaggle.com/code/tandavala/modelo-preditivo-de-pre-os-residenciais?scriptVersionId=151256622"&gt;exemplo&lt;/a&gt;, o valor médio das casas tende a subir quando a renda média aumenta. Quando o coeficiente está próximo de –1, significa que há uma forte correlação negativa como podem observar na imagem abaixo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--s9q5b3VM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dd0cnfqgfi1xurh293zi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--s9q5b3VM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dd0cnfqgfi1xurh293zi.png" alt="Correlações entre variáveis" width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Preparar os dados para os algoritmos de machine learning
&lt;/h3&gt;

&lt;p&gt;Quando abordamos a segunda fase do CRISP-DM, realizamos o carregamento do nosso conjunto de dados. Para uma compreensão mais aprofundada, essa etapa nos permitiu explorar a distribuição dos dados, enquanto lidamos com dados ausentes ao realizar imputações. Dessa forma, nosso conjunto de dados está pronto para as próximas fases.&lt;/p&gt;

&lt;p&gt;Agora que percebemos a correlação entre os dados, uma das ações que tomaremos é a divisão dos dados, reservando 80% para o treinamento do modelo e 20% para testar o modelo treinado. Essa abordagem visa evitar tanto o subajuste (&lt;strong&gt;overfitting&lt;/strong&gt;) quanto o sobreajuste (&lt;strong&gt;underfitting&lt;/strong&gt;) do modelo em produção. No nosso caso, utilizamos a biblioteca scikit-learn, como mostrado no trecho de código abaixo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;sklearn.model_selection&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;train_test_split&lt;/span&gt;

&lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x_test&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_train&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_test&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;train_test_split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;features&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;test_size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;random_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Aplicar o dimensionamento de características (feature scaling)
&lt;/h3&gt;

&lt;p&gt;Como observamos nas sessões anteriores, um conjunto de dados pode apresentar muitos atributos. No nosso caso, o conjunto de dados possui 9 atributos, e esses atributos podem ter magnitudes, variâncias, desvios padrão e médias diferentes. Por exemplo, a população pode estar na casa dos milhares, enquanto o preço pode estar na faixa de dois dígitos.&lt;/p&gt;

&lt;p&gt;A discrepância nas escalas ou magnitudes dos atributos pode impactar o modelo. Por exemplo, variáveis com valores mais altos podem predominar sobre aquelas com valores menores em modelos lineares, como é o nosso caso. É ali onde entra a importancia do dimensionamento de características (feature scaling). Entretanto existem três abordagens comuns para o feature scaling:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Padronização (Standardization):&lt;/strong&gt; Essa técnica ajusta os valores para ter uma média zero e um desvio padrão de um.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Normalização Min/Max (Min/Max Scaling):&lt;/strong&gt; Redimensiona os valores para um intervalo específico, comumente entre 0 e 1.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Normalização pela Média (Mean Normalization):&lt;/strong&gt; Ajusta os valores para ter uma média zero.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Considerando que já temos os dados separados em um conjunto de &lt;code&gt;treino&lt;/code&gt; e outro de &lt;code&gt;teste&lt;/code&gt; para evitar overfitting ou underfitting, optaremos pela primeira técnica: aplicar dimensionamento de características (feature scaling). A aplicação dessa técnica é bastante simples. Basta instanciar a classe e, em seguida, chamar o método fit_transform, que realizará o feature scaling automaticamente para nós, como demonstrado no trecho de código abaixo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;sklearn.preprocessing&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;StandardScaler&lt;/span&gt;

&lt;span class="n"&gt;scaler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;StandardScaler&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;X_train&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;scaler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fit_transform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;x_test&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;scaler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x_test&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Selecionar, treinar o modelo e avaliar o desempenho
&lt;/h3&gt;

&lt;p&gt;Finalmente! Nós definimos o problema, carregamos os dados e os exploromos, separamos um conjunto de &lt;code&gt;treinamento&lt;/code&gt; e um conjunto de &lt;code&gt;teste&lt;/code&gt;, aplicamos as devidas transformação agora estamos prontos para treinar o nosso modelo. &lt;/p&gt;

&lt;p&gt;Antes de escolher um possivel algorimo, é importante saber o tipo de problema que estamos a resolver, pois este passo, vai indicar qual o algoritmo selecionar. No caso do aprendizado supervisionado temos dois tipo de problemas.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Regressão linear:&lt;/strong&gt; A regressão linear é um método estatístico que busca estabelecer uma relação linear entre uma variável dependente (alvo) e uma ou mais variáveis independentes (características). O objetivo é criar um modelo que represente a relação linear entre essas variáveis, permitindo fazer previsões ou inferências sobre a variável dependente com base nas variáveis independentes,por exemple prever o preço de imóveis&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Regressão logística:&lt;/strong&gt; A regressão logística é um método estatístico utilizado para modelar a probabilidade de um evento ocorrer como uma função das variáveis independentes. Ela é particularmente adequada para problemas de classificação binária, onde o resultado desejado pode ser categorizado em duas classes, como sim OU não, positivo OU negativo, ou 1 OU 0, True OU False. por exemplo prever ser o paciente tem ou não covid-19&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Uma vez que o problema que estamos modelando se enquadra na primeira categoria, vamos escolher entre uma série de algoritmos para treinar nosso modelo. Aquele que apresentar a melhor acurácia será selecionado para produção. Abaixo, vou listar os algoritmos selecionados:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linear Regression&lt;/li&gt;
&lt;li&gt;Decision Tree Regressor&lt;/li&gt;
&lt;li&gt;Random Forest Regression&lt;/li&gt;
&lt;li&gt;Support Vector Regression (SVR)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para treinar nosso modelo, basta escrever o código abaixo, lembrando que vamos repetir até encontrarmos o melhor modelo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;sklearn.linear_model&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;LinearRegression&lt;/span&gt;

&lt;span class="n"&gt;lin_reg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;LinearRegression&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;lin_reg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_train&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;y_pred&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;lin_reg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;predict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x_test&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Vamos selecionar um registo aleatório no conjunto de dados para testar
&lt;/span&gt;&lt;span class="n"&gt;dado_entrada&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;scaler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;features&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;reshape&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;previsao&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;lin_reg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;predict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dado_entrada&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;previsao&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora que treinamos e testamos vários modelos, é hora de escolher o melhor para colocarmos em produção. Antes de escolhermos o melhor &lt;code&gt;modelo&lt;/code&gt;, realizamos alguns testes que nos levaram ao resultado conforme mostrado na imagem abaixo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--301WPnPg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t7xawpu5ojle5qksvzhn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--301WPnPg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t7xawpu5ojle5qksvzhn.png" alt="Resultado de teste do modelos" width="800" height="187"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTA:&lt;/strong&gt; Escolher o melhor modelo depende do objectivo, por exemplo:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Baixo MSE/MAE:&lt;/strong&gt; Se o seu principal objetivo é realizar previsões precisas e minimizar erros, você pode preferir o modelo com o menor MSE ou MAE&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Eficiência Computacional:&lt;/strong&gt; Árvores de decisão geralmente são computacionalmente menos dispendiosas do que florestas aleatórias. Se houver restrições de tempo de computação, uma árvore de decisão pode ser uma opção mais rápida.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Interpretabilidade:&lt;/strong&gt; Regressão Linear e Árvores de Decisão geralmente são mais interpretáveis do que Florestas Aleatórias. Se a interpretabilidade for crucial, você pode preferir esses modelos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Trade-offs:&lt;/strong&gt; A Floresta Aleatória aprimorada tem um MSE ligeiramente menor que a primeira instância, mas possui um RMSE maior. Considere os trade-offs entre diferentes métricas de erro.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Generalização:&lt;/strong&gt; Certifique-se de que o modelo escolhido generalize bem para dados não vistos. Você pode querer usar técnicas como validação cruzada para avaliar o desempenho de generalização.&lt;/p&gt;

&lt;h3&gt;
  
  
  5ª Fase do CRISP-DM - Refinar o modelo e escolher a melhor abordagem possível.
&lt;/h3&gt;

&lt;p&gt;Após o treinamento inicial, é possível que o modelo não atinja seu máximo desempenho. A etapa de refinamento, permite ajustar hiperparâmetros, modificar arquiteturas de rede ou fazer pequenas modificações no modelo para otimizar seu desempenho. Para esse demostração usamos o algoritmo Grid Search, para retreinar o algoritmo &lt;code&gt;Random Forest Regression&lt;/code&gt; como mostro no trecho de código abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;sklearn.ensemble&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;RandomForestRegressor&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;sklearn.model_selection&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;GridSearchCV&lt;/span&gt;

&lt;span class="n"&gt;param_grid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;'n_estimators'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s"&gt;'max_features'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt; &lt;span class="c1"&gt;# Tente 12 (3×4) combinações de hiperparâmetros
&lt;/span&gt;    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;'bootstrap'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s"&gt;'n_estimators'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s"&gt;'max_features'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;&lt;span class="c1"&gt;# então tente 6 (2×3) combinações com o bootstrap definido como False
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;forest_reg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;RandomForestRegressor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# treine em 5 dobras, totalizando (12+6)*5=90 rodadas de treinamento
&lt;/span&gt;&lt;span class="n"&gt;grid_search&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;GridSearchCV&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;forest_reg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;param_grid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cv&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                        &lt;span class="n"&gt;scoring&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;'neg_mean_squared_error'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                        &lt;span class="n"&gt;return_train_score&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;grid_search&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_train&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;grid_search&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;best_params_&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Após executar este trecho de código, obtemos os melhores parâmetros para retrainar nosso modelo e verificar se isso resulta em um desempenho aprimorado. Para mais detalhes, não deixe de consultar o &lt;a href="https://www.kaggle.com/code/tandavala/modelo-preditivo-de-pre-os-residenciais#2.-Data-Understanding"&gt;notebook do projecto&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TG1pvShp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hbcfqqwzqrcku37qw0q2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TG1pvShp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hbcfqqwzqrcku37qw0q2.png" alt="Resultado dos melhores paramtros a considerar" width="800" height="76"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora que identificamos os parâmetros ideais, resta-nos retrainar nosso modelo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;forest_reg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;RandomForestRegressor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_features&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n_estimators&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;random_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;forest_reg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_train&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;y_pred&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;forest_reg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;predict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x_test&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Escolher o &lt;code&gt;modelo&lt;/code&gt; para por em produção
&lt;/h3&gt;

&lt;p&gt;No nosso caso, optaremos pelo modelo &lt;strong&gt;Support Vector Regression Machine&lt;/strong&gt;, e a métrica que nos levou a essa escolha foi o baixo MSE. A alternativa seria o Random Forest Regression (aprimorado); no entanto, este modelo demanda considerável poder computacional em comparação com a opção escolhida&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusão
&lt;/h3&gt;

&lt;p&gt;Hoje, abordamos as etapas 4 e 5 do &lt;a href="https://www.datascience-pm.com/crisp-dm-2/"&gt;CRISP-DM&lt;/a&gt;. Na prática, exploramos como identificar a correlação entre a variável dependente e as variáveis independentes, aprendemos a preparar os dados para os algoritmos de machine learning, aplicamos o dimensionamento de características (feature scaling), discutimos como selecionar, treinar o modelo e avaliar seu desempenho, e, por fim, refinamos o modelo para escolher a melhor abordagem possível.&lt;/p&gt;

&lt;p&gt;No próximo artigo, colocaremos nosso modelo em produção, utilizando ferramentas como Docker para aproveitar o conceito de infraestrutura imutável, Flask para o backend, React JS para o frontend. Estou empolgado para levar nosso modelo à produção. E você, está animado? Sendo assim, nos vemos no próximo sábado. Cuide-se!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Descomplicando Machine Learning - Parte III</title>
      <dc:creator>Jose Tandavala</dc:creator>
      <pubDate>Sat, 11 Nov 2023 06:32:24 +0000</pubDate>
      <link>https://dev.to/tandavala/descomplicando-machine-learning-parte-iii-c80</link>
      <guid>https://dev.to/tandavala/descomplicando-machine-learning-parte-iii-c80</guid>
      <description>&lt;h3&gt;
  
  
  Motivação
&lt;/h3&gt;

&lt;p&gt;No último artigo da série, discutimos diversos desafios enfrentados por iniciantes na área, que vão desde crenças autolimitantes até a procrastinação, frequentemente justificada pela espera do momento ideal para iniciar uma carreira como engenheiro de machine learning. Agora, para aqueles que acabaram de chegar aqui por acaso, recomendo iniciar sua jornada lendo este &lt;a href="https://dev.to/tandavala/descomplicando-machine-learning-parte-i-2b2f"&gt;artigo&lt;/a&gt; para se familiarizarem com o projecto.&lt;/p&gt;

&lt;p&gt;Hoje, nossa jornada começa a ganhar impulso, e a partir de agora, vamos pôr a mão na massa. No final, completaremos o projeto funcional para enriquecer o portfólio de projetos paralelos. Para aceder o &lt;a href="https://medium.com/@pedrofullstack/introdu%C3%A7%C3%A3o-ao-jupyter-notebook-para-python-b2cf79cea31d"&gt;notebook do projeto&lt;/a&gt;, clique neste &lt;a href="https://www.kaggle.com/code/tandavala/modelagem-preditiva-de-pre-os-residenciais/notebook"&gt;link&lt;/a&gt;. Minha recomendação é que abra seu próprio notebook e programe em paralelo comigo.&lt;/p&gt;

&lt;h3&gt;
  
  
  pre-requisito
&lt;/h3&gt;

&lt;p&gt;Para quem deseja pôr a mão na massa comigo, há três opções disponíveis:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Utilize o &lt;a href="https://colab.research.google.com/"&gt;Google Colab&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Utilize o &lt;a href="https://www.kaggle.com/"&gt;Kaggle&lt;/a&gt; (minha recomendação).&lt;/li&gt;
&lt;li&gt;Instale o &lt;a href="https://www.anaconda.com/download"&gt;Anaconda&lt;/a&gt; em seu computador&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Entendendo CRISP-DM na prática
&lt;/h3&gt;

&lt;p&gt;Segundo a wikipedia &lt;a href="https://pt.wikipedia.org/wiki/Cross_Industry_Standard_Process_for_Data_Mining"&gt;CRISP-DM&lt;/a&gt; é a abreviação de Cross Industry Standard Process for Data Mining, que pode ser traduzido como Processo Padrão Inter-Indústrias para Mineração de Dados. Ele descreve abordagens comumente usadas por especialistas em mineração de dados para atacar problemas.O CRISP-DM consiste em seis fases sequenciais, a saber:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Compreensão do negócio (&lt;strong&gt;Business understanding&lt;/strong&gt;) – O que o negócio precisa?&lt;/li&gt;
&lt;li&gt;Compreensão dos dados (&lt;strong&gt;Data understanding&lt;/strong&gt;) – Que dados temos/precisamos? Estão limpos?&lt;/li&gt;
&lt;li&gt;Preparação dos dados (&lt;strong&gt;Data preparation&lt;/strong&gt;) – Como organizamos os dados para modelagem?&lt;/li&gt;
&lt;li&gt;Modelagem (&lt;strong&gt;Modeling&lt;/strong&gt;) – Quais técnicas de modelagem devemos aplicar?&lt;/li&gt;
&lt;li&gt;Avaliação (&lt;strong&gt;Evaluation&lt;/strong&gt;) – Qual modelo atende melhor aos objetivos do negócio?&lt;/li&gt;
&lt;li&gt;Implantação (&lt;strong&gt;Deployment&lt;/strong&gt;) – Como os interessados acessam os resultados?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Neste artigo veremos as fases 1, 2 e o 3 do &lt;a href="https://www.datascience-pm.com/crisp-dm-2/"&gt;CRISP-DM&lt;/a&gt;. Estás pronto para começar?&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Compreensão do negócio
&lt;/h3&gt;

&lt;p&gt;É fundamental compreender os objetivos e requisitos do negócio, pois isso permite a subsequente transformação desses objetivos em metas de mineração de dados. No &lt;a href="https://www.kaggle.com/code/tandavala/modelagem-preditiva-de-pre-os-residenciais/notebook"&gt;notebook&lt;/a&gt; do projeto, durante a primeira fase do &lt;strong&gt;CRISP-DM&lt;/strong&gt;, detalhamos minuciosamente os objetivos da fictícia empresa Vitari Imobiliárias. Ao final desta etapa, convertemos esses requisitos em metas específicas de mineração de dados, delineando o projeto da empresa para a construção de um modelo preditivo de aprendizado de máquina. Veja o print abaixo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FTpUsOWn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6dkuhcqzphnqj2m39y3c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FTpUsOWn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6dkuhcqzphnqj2m39y3c.png" alt="Entendendo o negócio" width="800" height="140"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Minha sugestão é que você crie sua própria empresa fictícia e pratique cada fase do CRISP-DM, acompanhando-me com seu notebook aberto. Isso proporcionará uma experiência prática e enriquecedora.  &lt;/p&gt;

&lt;h3&gt;
  
  
  2. Compreensão dos dados
&lt;/h3&gt;

&lt;p&gt;Todo modelo de aprendizado de máquina é orientado a dados. No nosso caso, estamos abordando um problema no setor imobiliário, com foco no desenvolvimento de um modelo de aprendizado de máquina que prevê os preços de casas no estado da Califórnia, nos Estados Unidos. Para o efeito usamos o dataset da &lt;a href="https://lib.stat.cmu.edu/datasets/"&gt;statlib&lt;/a&gt;, e quanto as ferramentas usamos o pandas para carregar os dados. Veja no print abaixo &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--N3fD9WXk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/83a7zz89536es4tckzrz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--N3fD9WXk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/83a7zz89536es4tckzrz.png" alt="Compreensão dos dados" width="800" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nesta fase do projeto, utilizamos os conceitos de análise de dados para criar gráficos fundamentais que auxiliam na compreensão e interpretação dos atributos do conjunto de dados. No final desse processo, por meio dos gráficos construídos, constatamos uma forte associação entre os preços dos imóveis e sua localização, destacando-se especialmente a proximidade ao mar e a densidade populacional.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--H-uHDBBq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3ksqz80sobewduxqjk9y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--H-uHDBBq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3ksqz80sobewduxqjk9y.png" alt="Analisar a relação dos preços" width="800" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Preparação dos dados
&lt;/h3&gt;

&lt;p&gt;Esta é a fase do projeto em que o engenheiro de machine learning dedica mais de 80% do seu tempo, coletando os dados necessários, explorando-os para compreender sua qualidade, conteúdo e estrutura, e identificando possíveis problemas. No nosso caso, aqui estão os pontos que abordamos nesta fase:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Seleção de Características Relevantes&lt;/strong&gt;: Identificamos as variáveis explicativas e a variável resposta cruciais para o nosso modelo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Limpeza e Pré-processamento dos Dados&lt;/strong&gt;: Realizamos a imputação de dados faltantes e aplicamos a codificação de rótulos (Label Encoding) em variáveis categóricas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transformação dos Dados para Formato Adequado aos Algoritmos de ML&lt;/strong&gt;: Após separar e tratar os dados numéricos e categóricos, reintegramos ambos para formar um conjunto unificado, facilitando a criação das variáveis explicativas&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Proximo passo
&lt;/h3&gt;

&lt;p&gt;Para evitar que o artigo se torne extenso, encerraremos por hoje. Não deixe de acompanhar o &lt;a href="https://www.kaggle.com/code/tandavala/modelagem-preditiva-de-pre-os-residenciais/notebook"&gt;código fonte&lt;/a&gt; do projeto para ver os conceitos do &lt;strong&gt;CRISP-DM&lt;/strong&gt; na prática. No próximo artigo, abordaremos as partes 4 e 5 do CRISP-DM, e a parte 6 será discutida em um artigo separado já que vamos falar de implantação do nosso modelo de apredizando de máquina. &lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusão
&lt;/h3&gt;

&lt;p&gt;Hoje, iniciamos a exploração do &lt;strong&gt;CRISP-DM&lt;/strong&gt;, reconhecendo-o como uma ferramenta fundamental para profissionais da área de dados. Essa metodologia desempenha um papel crucial na padronização do processo de mineração de dados, fornecendo uma estrutura robusta para orientar cada etapa do projeto.&lt;/p&gt;

&lt;p&gt;Com o objetivo de pôr o CRISP-DM em prática, começamos a desenvolver um &lt;a href="https://www.kaggle.com/code/tandavala/modelagem-preditiva-de-pre-os-residenciais/notebook"&gt;projeto&lt;/a&gt; (&lt;strong&gt;um modelo de aprendizado de máquina para prever preços de imóveis&lt;/strong&gt;) que será progressivamente desenvolvido até a conclusão, abrangendo todas as fases. Este projeto representará uma oportunidade valiosa para aplicar os conceitos aprendidos, enfrentar desafios reais e aprimorar as habilidades práticas em mineração de dados. Estamos ansiosos para acompanhar esse desenvolvimento até a fase de depuração, consolidando assim o entendimento e a aplicação efetiva do CRISP-DM. Cuidem-se e até a próxima!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Descomplicando Machine Learning - Parte II</title>
      <dc:creator>Jose Tandavala</dc:creator>
      <pubDate>Sat, 04 Nov 2023 07:21:03 +0000</pubDate>
      <link>https://dev.to/tandavala/descomplicando-machine-learning-parte-ii-3d05</link>
      <guid>https://dev.to/tandavala/descomplicando-machine-learning-parte-ii-3d05</guid>
      <description>&lt;h2&gt;
  
  
  Obstáculos que têm impedido as pessoas de iniciar uma carreira como engenheiro de machine learning
&lt;/h2&gt;

&lt;p&gt;Bem-vindo à segunda parte da nossa série "&lt;strong&gt;Descomplicando Machine Learning&lt;/strong&gt;". Na &lt;a href="https://dev.to/tandavala/descomplicando-machine-learning-parte-i-2b2f"&gt;primeira parte&lt;/a&gt; desta série, exploramos a motivação por trás deste projeto. Também definimos o que é Machine Learning e, posteriormente, mergulhamos em alguns conceitos essenciais em ML. Entre esses conceitos, destacamos a Aprendizagem Supervisionada, a Aprendizagem Não Supervisionada e a Aprendizagem por Reforço. &lt;/p&gt;

&lt;h2&gt;
  
  
  Motivação
&lt;/h2&gt;

&lt;p&gt;Hoje, falaremos de alguns obstáculos que têm impedido as pessoas de iniciar uma carreira como engenheiro de machine learning. Antes de começar, quero dar credito ao Prof. &lt;a href="https://machinelearningmastery.com/about"&gt;Jason Brownlee, PhD&lt;/a&gt;, pois grande parte do conteúdo deste artigo é baseado em seu trabalho intitulado &lt;a href="https://machinelearningmastery.com/what-is-holding-you-back-from-your-machine-learning-goals/"&gt;"What Is Holding You Back From Your Machine Learning Goals?"&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Identificar e Superar Suas Crenças Limitadoras Pessoais e, Finalmente, Fazer Progresso
&lt;/h2&gt;

&lt;p&gt;Começar algo do zero não é fácil, ainda mais ao iniciar uma carreira em um mundo cheio de ruídos e inundado de informações. Mas tenho boas notícias: é possível superar os obstáculos que nos impedem de avançar. Segundo o Prof. &lt;a href="https://machinelearningmastery.com/about"&gt;Jason Brownlee, PhD&lt;/a&gt;, existem três tipos de obstáculos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Crenças autolimitantes&lt;/li&gt;
&lt;li&gt;Esperar o momento certo para começar&lt;/li&gt;
&lt;li&gt;Esperando Condições Perfeitas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Crenças autolimitantes:&lt;/strong&gt; São ideias que você assume como verdadeiras e que estão restringindo seu progresso. Isso geralmente começa com crenças que vão contra os objetivos que você estabeleceu ou os que deseja alcançar. No final do dia, você acaba acreditando mais nesse pensamento negativo do que no primeiro pensamento que o motivou a embarcar em um projeto ou jornada de sucesso.&lt;/p&gt;

&lt;p&gt;Existem três tipos de crenças autolimitantes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Se-então Crenças:&lt;/strong&gt; por ex. Se eu começar a carreira de machine learning engineer, falharei porque não sou bom o suficiente&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Crenças Universais:&lt;/strong&gt; por ex. Todos os cientistas de dados têm doutorado. e são deuses da matemática&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Crenças Pessoais e de Autoestima:&lt;/strong&gt; por ex. Eu não sou bom o suficiente&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Como diz o ditado, "um bom entendedor meia palavra basta". Isso significa que é essencial acreditar em nós mesmos e lutar pelos nossos sonhos. Um sábio já disse que tudo é possível para aqueles que acreditam. Fica a dica&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Esperar o momento certo para começar&lt;/strong&gt;: essa é uma das crenças mais difíceis de abandonar, pois geralmente traz consigo outros maus hábitos, sendo a procrastinação um deles. No caso de machine learning, acredita-se que é necessário primeiro se tornar um deus da matemática e estatística e, em seguida, dominar a programação de A a Z, para só então começar a estudar machine learning efetivamente.  No entanto, quero lhe dizer que isso não é verdade. (&lt;strong&gt;&lt;em&gt;De fato, o fato de você estar aqui já indica que está no caminho certo. Aqui, desenvolveremos alguns modelos que podem servir de inspiração para continuar praticando sem precisar antes ser o deus da matemática e  estatística&lt;/em&gt;&lt;/strong&gt;). O problema com esse tipo de crença é que o conhecimento prévio que você acredita precisar dominar na íntegra não é, na verdade, necessário para dar os primeiros passos. Para ser mais prático, você pode começar a desenvolver seu primeiro modelo de aprendizado de máquina sem ser um deus da matemática e estatística, pois essas ciências são tão vastas em escopo que mesmo especialistas no assunto não sabem tudo.&lt;/p&gt;

&lt;p&gt;Abaixo estão algumas das &lt;strong&gt;crenças autolimitantes&lt;/strong&gt; mais comuns sobre habilidades ou conhecimento prévio que devem ser adquiridos antes de você começar a se aventurar no mundo de machine learning.&lt;/p&gt;

&lt;p&gt;Não posso iniciar uma carreira de machine learning engineer até...&lt;/p&gt;

&lt;p&gt;...eu obter um diploma ou pós-graduação&lt;br&gt;
...eu concluir um curso&lt;br&gt;
...eu ser bom em álgebra linear&lt;br&gt;
...eu entender estatísticas e teoria da probabilidade&lt;br&gt;
...eu dominar a linguagem de programação R&lt;/p&gt;

&lt;p&gt;Embora todos esses aspectos sejam importantes, eles não necessariamente precisam vir antes de você começar a praticar machine learning. É possível começar a desenvolver habilidades em machine learning desde o início e, à medida que você constrói sua base em desenvolvimento de modelos de aprendizado, pode estudar gradualmente cada tópico essencial, seja matemática ou estatística&lt;/p&gt;

&lt;h2&gt;
  
  
  Esperando Condições Perfeitas
&lt;/h2&gt;

&lt;p&gt;Esta é uma crença autolimitante clássica, e não preciso entrar em detalhes sobre isso. Em vez disso, gostaria de compartilhar histórias inspiradoras de sucesso de pessoas que superaram essa crença e se tornaram exemplos para milhares de outras pessoas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Mark Zuckerberg, fundador do Facebook, iniciou sua jornada com colegas de quarto em Harvard.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Larry Page e Sergey Brin começaram a Alphabet na garagem.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Valentina Vladimirovna Tereshkova, a primeira cosmonauta e a primeira mulher a ir para o espaço, cresceu em uma família humilde. Seu pai era um motorista de trator que desapareceu durante a Guerra Russo-Finlandesa em 1940. Valentina entrou na escola aos oito anos e começou a trabalhar em uma fábrica têxtil aos dezoito anos.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Essas histórias demonstram que o sucesso não espera por condições perfeitas. Elas nos inspiram a continuar, independentemente das circunstâncias iniciais, e a acreditar que podemos alcançar nossos objetivos. Portanto, faça um favor a si mesmo: deixe para trás a ideia de precisar de um computador poderoso ou de esperar terminar a faculdade para iniciar sua jornada. Simplesmente comece hoje.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Concordarias que leva tempo para se tornar habilidoso em qualquer coisa? Requer muita prática, repetição, dedicação e a crença de que você pode alcançar o sucesso. Portanto, quero estender um convite a você: deixe de lado o excesso de preocupações com as dificuldades, não se cobre demais e junte-se a mim nessa jornada na série "&lt;strong&gt;Descomplicando Machine Learning&lt;/strong&gt;". Quem sabe, no final, você estará no ritmo, construindo um portfólio sólido e se inspirando com as dicas e exemplos que veremos aqui. Sendo assim, espero por você no próximo artigo, onde vamos falar sobre: &lt;a href="https://dev.to/tandavala/descomplicando-machine-learning-parte-iii-c80"&gt;CRISP-DM na prática&lt;/a&gt;. Até lá, cuide-se&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Descomplicando Machine Learning - Parte II</title>
      <dc:creator>Jose Tandavala</dc:creator>
      <pubDate>Sat, 04 Nov 2023 07:21:03 +0000</pubDate>
      <link>https://dev.to/tandavala/descomplicando-machine-learning-parte-ii-3m7d</link>
      <guid>https://dev.to/tandavala/descomplicando-machine-learning-parte-ii-3m7d</guid>
      <description>&lt;h2&gt;
  
  
  Obstáculos que têm impedido as pessoas de iniciar uma carreira como engenheiro de machine learning
&lt;/h2&gt;

&lt;p&gt;Bem-vindo à segunda parte da nossa série "&lt;strong&gt;Descomplicando Machine Learning&lt;/strong&gt;". Na &lt;a href="https://dev.to/tandavala/descomplicando-machine-learning-parte-i-2b2f"&gt;primeira parte&lt;/a&gt; desta série, exploramos a motivação por trás deste projeto. Também definimos o que é Machine Learning e, posteriormente, mergulhamos em alguns conceitos essenciais em ML. Entre esses conceitos, destacamos a Aprendizagem Supervisionada, a Aprendizagem Não Supervisionada e a Aprendizagem por Reforço. &lt;/p&gt;

&lt;h2&gt;
  
  
  Motivação
&lt;/h2&gt;

&lt;p&gt;Hoje, falaremos de alguns obstáculos que têm impedido as pessoas de iniciar uma carreira como engenheiro de machine learning. Antes de começar, quero dar credito ao Prof. &lt;a href="https://machinelearningmastery.com/about"&gt;Jason Brownlee, PhD&lt;/a&gt;, pois grande parte do conteúdo deste artigo é baseado em seu trabalho intitulado &lt;a href="https://machinelearningmastery.com/what-is-holding-you-back-from-your-machine-learning-goals/"&gt;"What Is Holding You Back From Your Machine Learning Goals?"&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Identificar e Superar Suas Crenças Limitadoras Pessoais e, Finalmente, Fazer Progresso
&lt;/h2&gt;

&lt;p&gt;Começar algo do zero não é fácil, ainda mais ao iniciar uma carreira em um mundo cheio de ruídos e inundado de informações. Mas tenho boas notícias: é possível superar os obstáculos que nos impedem de avançar. Segundo o Prof. &lt;a href="https://machinelearningmastery.com/about"&gt;Jason Brownlee, PhD&lt;/a&gt;, existem três tipos de obstáculos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Crenças autolimitantes&lt;/li&gt;
&lt;li&gt;Esperar o momento certo para começar&lt;/li&gt;
&lt;li&gt;Esperando Condições Perfeitas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Crenças autolimitantes:&lt;/strong&gt; São ideias que você assume como verdadeiras e que estão restringindo seu progresso. Isso geralmente começa com crenças que vão contra os objetivos que você estabeleceu ou os que deseja alcançar. No final do dia, você acaba acreditando mais nesse pensamento negativo do que no primeiro pensamento que o motivou a embarcar em um projeto ou jornada de sucesso.&lt;/p&gt;

&lt;p&gt;Existem três tipos de crenças autolimitantes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Se-então Crenças:&lt;/strong&gt; por ex. Se eu começar a carreira de machine learning engineer, falharei porque não sou bom o suficiente&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Crenças Universais:&lt;/strong&gt; por ex. Todos os cientistas de dados têm doutorado. e são deuses da matemática&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Crenças Pessoais e de Autoestima:&lt;/strong&gt; por ex. Eu não sou bom o suficiente&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Como diz o ditado, "um bom entendedor meia palavra basta". Isso significa que é essencial acreditar em nós mesmos e lutar pelos nossos sonhos. Um sábio já disse que tudo é possível para aqueles que acreditam. Fica a dica&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Esperar o momento certo para começar&lt;/strong&gt;: essa é uma das crenças mais difíceis de abandonar, pois geralmente traz consigo outros maus hábitos, sendo a procrastinação um deles. No caso de machine learning, acredita-se que é necessário primeiro se tornar um deus da matemática e estatística e, em seguida, dominar a programação de A a Z, para só então começar a estudar machine learning efetivamente.  No entanto, quero lhe dizer que isso não é verdade. (&lt;strong&gt;&lt;em&gt;De fato, o fato de você estar aqui já indica que está no caminho certo. Aqui, desenvolveremos alguns modelos que podem servir de inspiração para continuar praticando sem precisar antes ser o deus da matemática e  estatística&lt;/em&gt;&lt;/strong&gt;). O problema com esse tipo de crença é que o conhecimento prévio que você acredita precisar dominar na íntegra não é, na verdade, necessário para dar os primeiros passos. Para ser mais prático, você pode começar a desenvolver seu primeiro modelo de aprendizado de máquina sem ser um deus da matemática e estatística, pois essas ciências são tão vastas em escopo que mesmo especialistas no assunto não sabem tudo.&lt;/p&gt;

&lt;p&gt;Abaixo estão algumas das &lt;strong&gt;crenças autolimitantes&lt;/strong&gt; mais comuns sobre habilidades ou conhecimento prévio que devem ser adquiridos antes de você começar a se aventurar no mundo de machine learning.&lt;/p&gt;

&lt;p&gt;Não posso iniciar uma carreira de machine learning engineer até...&lt;/p&gt;

&lt;p&gt;...eu obter um diploma ou pós-graduação&lt;br&gt;
...eu concluir um curso&lt;br&gt;
...eu ser bom em álgebra linear&lt;br&gt;
...eu entender estatísticas e teoria da probabilidade&lt;br&gt;
...eu dominar a linguagem de programação R&lt;/p&gt;

&lt;p&gt;Embora todos esses aspectos sejam importantes, eles não necessariamente precisam vir antes de você começar a praticar machine learning. É possível começar a desenvolver habilidades em machine learning desde o início e, à medida que você constrói sua base em desenvolvimento de modelos de aprendizado, pode estudar gradualmente cada tópico essencial, seja matemática ou estatística&lt;/p&gt;

&lt;h2&gt;
  
  
  Esperando Condições Perfeitas
&lt;/h2&gt;

&lt;p&gt;Esta é uma crença autolimitante clássica, e não preciso entrar em detalhes sobre isso. Em vez disso, gostaria de compartilhar histórias inspiradoras de sucesso de pessoas que superaram essa crença e se tornaram exemplos para milhares de outras pessoas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Mark Zuckerberg, fundador do Facebook, iniciou sua jornada com colegas de quarto em Harvard.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Larry Page e Sergey Brin começaram a Alphabet na garagem.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Valentina Vladimirovna Tereshkova, a primeira cosmonauta e a primeira mulher a ir para o espaço, cresceu em uma família humilde. Seu pai era um motorista de trator que desapareceu durante a Guerra Russo-Finlandesa em 1940. Valentina entrou na escola aos oito anos e começou a trabalhar em uma fábrica têxtil aos dezoito.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Essas histórias demonstram que o sucesso não espera por condições perfeitas. Elas nos inspiram a continuar, independentemente das circunstâncias iniciais, e a acreditar que podemos alcançar nossos objetivos. Portanto, faça um favor a si mesmo: deixe para trás a ideia de precisar de um computador poderoso ou de esperar terminar a faculdade para iniciar sua jornada. Simplesmente comece hoje.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Concordarias que leva tempo para se tornar habilidoso em qualquer coisa? Requer muita prática, repetição, dedicação e a crença de que você pode alcançar o sucesso. Portanto, quero estender um convite a você: deixe de lado o excesso de preocupações com as dificuldades, não se cobre demais e junte-se a mim nessa jornada na série "&lt;strong&gt;Descomplicando Machine Learning&lt;/strong&gt;". Quem sabe, no final, você estará no ritmo, construindo um portfólio sólido e se inspirando com as dicas e exemplos que veremos aqui. Sendo assim, espero por você no próximo artigo, onde vamos falar sobre: &lt;strong&gt;CRISP-DM na prática&lt;/strong&gt;. Até lá, cuide-se&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Descomplicando Machine Learning - Parte I</title>
      <dc:creator>Jose Tandavala</dc:creator>
      <pubDate>Wed, 01 Nov 2023 16:47:49 +0000</pubDate>
      <link>https://dev.to/tandavala/descomplicando-machine-learning-parte-i-2b2f</link>
      <guid>https://dev.to/tandavala/descomplicando-machine-learning-parte-i-2b2f</guid>
      <description>&lt;h2&gt;
  
  
  Motivação
&lt;/h2&gt;

&lt;p&gt;Como programador, reconheço a importância do big data nos dias de hoje. Como deves saber, a velocidade com que geramos dados atualmente é sem precedentes. Aqui vai algumas estatísticas:&lt;/p&gt;

&lt;p&gt;Segundo a Exploding Topics &lt;a href="https://explodingtopics.com/blog/data-generated-per-day"&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Aproximadamente 328,77 milhões de terabytes de dados são criados a cada dia&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cerca de 120 zettabytes de dados serão gerados este ano (2023)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Estima-se que serão gerados 181 zettabytes de dados em 2025&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Simplesmente não há como não se impressionar com esses números. Não achas? Entretanto, nessa série de artigos, veremos como machine learning pode ajudar as empresas a extrair insights valiosos para ajudar a tomar decisões críticas informadas nos negócios e ajudar os demais a entender as tendências cada vez mais ferozes na geração contínua de dados.&lt;/p&gt;

&lt;p&gt;Por esse motivo, estou começando uma série de artigos com o título "&lt;strong&gt;Descomplicando Machine Learning&lt;/strong&gt;", com o objetivo de documentar e compartilhar os conhecimentos que estou adquirindo na área. Vamos começar?&lt;/p&gt;

&lt;h2&gt;
  
  
  Definição
&lt;/h2&gt;

&lt;p&gt;Machine Learning (Aprendizagem de máquina) é um conjunto de regras e práticas que permite ao computador agir e tomar decisões baseadas em dados. Ainda podemos dizer que machine learning é um subcampo da inteligência artificial (IA) que se concentra no desenvolvimento de algoritmos e modelos estatísticos que permitem que computadores aprendam e façam previsões ou tomem decisões sem serem programados explicitamente.&lt;/p&gt;

&lt;p&gt;Vale ressaltar que machine learning está presente em nosso dia a dia. Provavelmente, já está tão integrado em sua rotina que já nem percebes mais. &lt;/p&gt;

&lt;p&gt;Vamos destacar alguns produtos de sucesso nos quais machine learning desempenha um papel fundamental: Google search (com suas recomendações de pesquisa), Youtube (com suas recomendações de vídeo), Twitter (que sugere pessoas para seguir), Spotify (que faz recomendações de músicas), Netflix (com suas sugestões de filmes) e Amazon (que sugere itens para comprar).&lt;/p&gt;

&lt;h2&gt;
  
  
  Entendendo as subdivisões da ML (machine learning)
&lt;/h2&gt;

&lt;p&gt;A ciência tem uma tendência natural de se ramificar em diversas áreas, e ML não é diferente. No caso, temos dentro do mundo ML três ramificações principais:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A aprendizagem supervisionada;&lt;/li&gt;
&lt;li&gt;A aprendizagem não supervisionada;&lt;/li&gt;
&lt;li&gt;A aprendizagem por reforço.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Antes de detalharmos cada ponto dos tipos de aprendizagem de máquina, vale trazer um pouco de luz sobre o conceito de &lt;strong&gt;modelos&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é um modelo
&lt;/h2&gt;

&lt;p&gt;Em aprendizagem de máquina, um "modelo" é uma representação matemática ou estatística de um processo, sistema, fenômeno ou relação entre variávies. Esse modelo é criado com base em algoritmos e é treinado com dados para aprender a fazer previsões, tomar decisões ou extrair informações úteis a partir de novos dados. Um modelo pode ser considerado como uma simplificação da realidade que captura as características essenciais dos dados de trainamento.&lt;/p&gt;

&lt;h2&gt;
  
  
  Aprendizagem supervisionada
&lt;/h2&gt;

&lt;p&gt;É um tipo de aprendizado no qual um modelo é supervisinado durante o treinamento, com base em exemplos rotulados.&lt;/p&gt;

&lt;p&gt;Por exemplo, consideremos um modelo que prevê se um paciente tem ou não Covid-19. Para construir esse modelo, precisamos de um conjunto de dados de pacientes. A partir desses dados, extraímos dois grupos de variáveis: as &lt;strong&gt;variáveis explicativas&lt;/strong&gt;, como idade, sexo, nome do paciente, presença de febre, tosse seca, etc.; e outro tipo de variável que chamamos de &lt;strong&gt;variável resposta&lt;/strong&gt;. Neste caso, o valor da variável resposta pode ser positivo se o paciente tiver Covid-19 e negaivo caso contrário. A variável resposta é o rótulo que usamos no aprendizado supervisionado para treindar o modelo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Aprendizagem não supervisionada
&lt;/h2&gt;

&lt;p&gt;É o tipo de aprendizado em que o algoritmo é treinado em um conjunto de dados que não inclui rótulos.&lt;/p&gt;

&lt;p&gt;Por exemplo, podemos usá-la para descobrir novos padrões em um conjunto de dados de uma loja de varejo, como classificar ou agrupar os clientes por região, volume de compras. O objetivo é agrupar itens ou objetos que compartilham padrões semelhantes. &lt;/p&gt;

&lt;h2&gt;
  
  
  Aprendizagem por reforço
&lt;/h2&gt;

&lt;p&gt;Ao contrário da aprendizagem supervisionada, na qual os modelos são treinados com exemplos rotulados, e da aprendizagem não supervisionada, na qual os algoritmos descobrem padrões nos dados, a aprendizagem por reforço envolve um processo de tentativa e erros. O agente (computador) toma ações, recebe recompensas com base no feedback das tentativas (no caso positivo); no caso das negativas ajusta seu comportamento para otimizar as próximas tentativas ou o processo.&lt;/p&gt;

&lt;p&gt;Por exemplo, imagine um robô semelhante a um ser humano que deseja aprender a andar de maneira eficaz. A tarefa do robô é manter o equilíbrio e dar passos para a frente. Este é um desafio complexo, pois o robô precisa constantemente ajustar seu equilíbrio para evitar quedas ou tropeços. Tudo isso é baseado no princípio de tentativa e erro, com recompensas associadas a ações corretas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;No início do artigo, exploramos a motivação que me levou a iniciar esta série de artigos com o tema: "&lt;strong&gt;Descomplicando machine learning&lt;/strong&gt;". Em seguida, definimos o termo machine learning, e destacamos as suas subdivisões. Ainda destacamos alguns exemplos de produtos de sucesso que fazem uso de machine learning e que impactam a nossas vidas no dia a dia.&lt;/p&gt;

&lt;p&gt;Espero que estejam tão emplogados quanto eu para a segunda parte deste artigo onde falaremos sobre &lt;a href="https://dev.to/tandavala/descomplicando-machine-learning-parte-ii-3d05"&gt;obstáculos que têm impedido as pessoas de iniciar uma carreira como engenheiro de machine learning&lt;/a&gt;. Cuidem-se  e até a próxima!&lt;/p&gt;

</description>
      <category>machinelearning</category>
      <category>regression</category>
      <category>classification</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Node.js, Accept arguments from the command line</title>
      <dc:creator>Jose Tandavala</dc:creator>
      <pubDate>Thu, 04 Feb 2021 05:15:21 +0000</pubDate>
      <link>https://dev.to/tandavala/node-js-accept-arguments-from-the-command-line-2m7i</link>
      <guid>https://dev.to/tandavala/node-js-accept-arguments-from-the-command-line-2m7i</guid>
      <description>&lt;p&gt;When invoking a Node.js application on the terminal you can pass any number of arguments and arguments can be standalone or have a key and a value.&lt;/p&gt;

&lt;p&gt;For example, let consider the below command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node app.js jose
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What happens in a nutshell node.js expose an &lt;strong&gt;argv&lt;/strong&gt; property, which is an array that contains all the command line invocation arguments.&lt;/p&gt;

&lt;p&gt;The first element is the full path of the &lt;strong&gt;node&lt;/strong&gt; command, the second element is the full path of the file being executed and all the additional arguments are present from the third position going forward, to check this out see the snippet below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can get only the additional arguments by creating a new array that excludes the first 2 params:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This said consider the below snippet&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can execute this program now&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node app.js jose
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is the result&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;jose
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now that we know how to accept arguments from the command line, let us built a simple calculator on top of this knowledge&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Pass two numbers to add&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;We need two numbers to add them&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; 

&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nb"&gt;parseInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`The sum of &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;&lt;span class="s2"&gt; with &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;&lt;span class="s2"&gt; is &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Running the app&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node app.js 2 3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The result&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The sum of 2 with 3 is 5.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I hope that you enjoy it, stay awesome!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Install OpenSSL from source code on Ubuntu 16.04</title>
      <dc:creator>Jose Tandavala</dc:creator>
      <pubDate>Tue, 05 Jan 2021 05:38:46 +0000</pubDate>
      <link>https://dev.to/tandavala/how-to-install-openssl-from-source-code-on-ubuntu-16-04-j5j</link>
      <guid>https://dev.to/tandavala/how-to-install-openssl-from-source-code-on-ubuntu-16-04-j5j</guid>
      <description>&lt;p&gt;SSL is the foundation of a secure internet and it protects our sensitive information as it travels across the world's computer network, in this article I will show you how to install OpenSSL from source code.&lt;/p&gt;

&lt;p&gt;First, we need to download OpenSSL from the source, by doing this we can always have the last version running on our machine. To download it type the following command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd /usr/local/src/
sudo wget https://www.openssl.org/source/openssl-1.1.1c.tar.gz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Before we proceed, make sure that you have the necessary dependencies for building packages from the source code, go back to the terminal, and type the following.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install build-essential checkinstall zlib1g-dev -y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The above command installs three packages build essential which is a reference for all packages needed to compile a Debian package, checkinstall is self-explanatory it is used to check if a given package is installed and zlib1g-dev library allows applications to conveniently read and write gzip compatible files.&lt;/p&gt;

&lt;p&gt;Now that we have downloaded the source code and installed all the necessary dependencies packages, we need to extract the downloaded file using the command below, make sure that you are in the same directory where you have downloaded the file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo tar -xf openssl-1.1.1c.tar.gz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After extracting the file, navigate to the extracted directory&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd openssl-1.1.1c
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We are now going to install OpenSSL which we downloaded using the command below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib

sudo make
sudo make test
sudo make install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If no error, so far so good, now let us configure OpenSSL Shared Libraries, using nano text editor you can anyone of your choice.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd /etc/ld.so.conf.d/
sudo nano openssl-1.1.1c.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command will open nano text editor with an empty file, type the below text and save.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/usr/local/ssl/lib
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, reload the dynamic link by issuing the command below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo ldconfig -v
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Last but not least, we need to configure OpenSSL binary,  inserting the binary of our new version of OpenSSL installed &lt;strong&gt;(located at /usr/local/ssl/bin/openssl)&lt;/strong&gt; to replace the default openssl binary &lt;strong&gt;(located at /usr/bin/openssl or /bin/openssl)&lt;/strong&gt;. But first, we need to backup the binary files.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo mv /usr/bin/c_rehash /usr/bin/c_rehash.backup
sudo mv /usr/bin/openssl /usr/bin/openssl.backup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next we need to edit &lt;strong&gt;/etc/environment&lt;/strong&gt; file using nano&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo nano /etc/environment
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With nano opened, let us update the &lt;strong&gt;/etc/environment&lt;/strong&gt; file as the following after that we'll save the file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/ssl/bin"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, reload the OpenSSL environment and check the PATH bin directory using the commands below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;source /etc/environment
echo $PATH
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can now check and verify our installation of OpenSSL using the command below&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;which openssl
openssl version -a
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Happy coding day!&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
