Menu
CoddyTech

Por que escalar os recursos

Parte da seção Estatística para ML do Journey de Machine Learning da Coddy. Lição 47 de 64.

Qual cliente mais se parece com um novo? Muitos modelos medem a distância entre amostras: elevam ao quadrado a diferença de cada característica, somam tudo e extraem a raiz quadrada.

Uma pessoa de 25 anos que ganha $52,000 em comparação com uma pessoa de 61 anos que ganha $53,000:

Duas barras mostrando quanto cada característica acrescenta à distância entre os dois clientes: idade, uma diferença de 36 anos, acrescenta 1,296, uma fatia fina demais para ser vista; renda, uma diferença de $1,000, acrescenta 1,000,000, uma barra longa

Para uma tabela inteira, axis=1 soma os quadrados de cada linha e .argmin() encontra a linha mais próxima:

a = np.array([25, 52000])  # idade, renda
X = np.array([[61, 53000],   # a pessoa de 61 anos
              [26, 55000]])  # uma pessoa de 26 anos que ganha $55,000
dists = np.sqrt(((X - a) ** 2).sum(axis=1))
print(np.round(dists, 2))
print(dists.argmin())

Isso imprime:

[1000.65 3000.  ]
0

A pessoa de 61 anos é a mais próxima: os dólares vêm em números maiores, então US$ 1.000 superam 36 anos. Sem normalização, as unidades maiores determinam o resultado.

Este capítulo dá a cada recurso a oportunidade de se expressar.

challenge icon

Desafio

Médio

Uma loja compara máquinas de lavar pelo preço ($), consumo de energia (kWh por ano) e consumo de água (litros por lavagem), chamados features. O programa lê as posições de duas máquinas, i e j. Imprima:

  1. Squared gaps: a diferença de cada característica, elevada ao quadrado.
  2. Distance: arredondada para 2 casas decimais.
  3. Dominant feature: o nome da característica com a maior diferença elevada ao quadrado.

Para outras duas máquinas:

Squared gaps: [2500 6400    1]
Distance: 94.35
Dominant feature: energy

Experimente você mesmo

import numpy as np

features = ["price", "energy", "water"]
# Uma linha por máquina de lavar: preço em dólares, energia em kWh por ano, água em litros por lavagem
machines = np.array([[499, 160, 48],
                     [349, 210, 55],
                     [899, 120, 42],
                     [529, 250, 50],
                     [279, 230, 60],
                     [749, 140, 45]])
i = int(input())
j = int(input())

# Escreva seu código abaixo
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Estatística para ML

Pratique por conta própria: Compilador de Python online