AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-5423080

cicciodevoto's questions

Martin Hope
cicciodevoto
Asked: 2025-04-16 01:03:25 +0800 CST

Erro percentual absoluto médio do PyTorchMetrics, valor extremamente alto

  • 5

Estou usando PyTorchpara um curso de reconhecimento facial e preciso calcular o valor MAPE.

Minha primeira tentativa foi com torchmetrics.MeanAbsolutePercentageErrorclasse, mas o resultado não faz sentido.

Por esse motivo, escrevi uma função para calculá-lo e parece funcionar bem.

Investigando um pouco, parece-me que o problema está relacionado à presença de 0no array de valores verdade, mas não encontrei nada na torchmetricsdocumentação.

Existe uma maneira de evitar esse problema em torchmetrics?

É possível que o epsilonvalor na fórmula MAPE não esteja definido? Se for o caso, como posso atribuir um valor a ele?

Estou feliz em usar a outra função, mas estou curioso para entender o motivo desses resultados com torchmetrics.

Estas são as 2 funções para calcular o MAPE:

def calculate_mape_torch(preds, targets):
    """Calculate MAPE using PyTorch method.
    
    Args:
        preds: array with ground truth values
        targets: array with predictions from model

    Returns:
        MAPE
    """
    if not isinstance(preds, torch.Tensor):
        preds = torch.tensor(preds)
    if not isinstance(targets, torch.Tensor):
        targets = torch.tensor(targets)

    mape = MeanAbsolutePercentageError()

    return mape(preds, targets) * 100


def calculate_mape(preds, targets, epsilon=1):
    """Calculate the Mean Absolute Percentage Error.
    
    Args:
        preds: array with ground truth values
        targets: array with predictions from model
        epsilon: value to avoid divide by zero problem

    Returns:
        MAPE
    """
    preds_flatten = preds.flatten("F")
    targets_flatten = targets.flatten("F")

    return np.sum(np.abs(targets_flatten - preds_flatten) / np.maximum(epsilon, targets_flatten)) / len(preds_flatten) * 100

Com estes valores:

y_true = np.array([[1, 0, 3], [4, 5, 6]])
y_pred = np.array([[3, 2, 2], [7, 3, 6]])

as 2 funções dão os resultados:

>>> calculate_mape(y_pred, y_true)
91.38888888888889

>>> calculate_mape_torch(y_pred, y_true)
tensor(28490084.)

Com estes valores:

y_true = np.array([[1, 2, 3], [4, 5, 6]])
y_pred = np.array([[3, 2, 2], [7, 3, 6]])

as 2 funções dão os resultados:

>>> calculate_mape(y_pred, y_true)
58.05555555555556

>>> calculate_mape_torch(y_pred, y_true)
tensor(58.0556)
python-3.x
  • 1 respostas
  • 18 Views
Martin Hope
cicciodevoto
Asked: 2024-02-26 00:03:39 +0800 CST

Preencha o array Numpy com elementos do DataFrame e com condição baseada no último elemento do próprio array

  • 3

Eu tenho um pandasdataframe com 2 colunas (longitude e latitude) ordenadas em ordem decrescente com base na primeira coluna.

Gostaria de preencher um numpyarray com os elementos do dataframe quando o elemento da segunda coluna for maior que o último elemento do próprio array.

Eu escrevi este código:

coords_array = df.sort_values("lon", ascending=False).to_numpy()

new_array = np.array([coords_array[0]])

for coords in coords_array [1:]:
    if coords[1] > new_array[-1][1]:
        new_array = np.vstack([new_array, coords])

esse código faz o que eu quero, mas gostaria de torná-lo mais numpyamigável e evitar o forloop. Isso também é para eu ficar mais confiante numpy.

Eu estava tentando np.apply_along_axiscombinar com lambdafunction e walrus operator :=, isso porque o último elemento de new_arraypode mudar, não é fixo, então algo assim:

new_array = np.array([coords_array[0]])

np.apply_along_axis(lambda x: (new_array := np.vstack([new_array, coords])) if x[1] > new_array[-1][1] else _, 1, coords_array[1:])

mas isso me dá o erro:

UnboundLocalError: local variable 'new_array' referenced before assignment

considera new_arraycomo variável local; Acho que estou entendendo mal o operador da morsa...

Alguma sugestão de como posso remover o forloop?

Estou interessado em entender por que meu código não funciona, mas fico feliz com qualquer outra sugestão.

Atualizar

Este é um exemplo mínimo.

Se o DataFrame for:

df = pd.DataFrame({"lon": [4, 2, 1, 6, 4, 5, 2], "lat": [3, 2, 3, 2, 2, 1, 6]})

coords_arrayé obtido ordenando dfcom base em "lon"valores:

coords_array
array([[6, 2],
       [5, 1],
       [4, 3],
       [4, 2],
       [2, 2],
       [2, 6],
       [1, 3]], dtype=int64)

A primeira coluna de coords_arrayis "lon"e a segunda é "lat".

new_arrayé inicializado com o primeiro elemento de coords_arraye os outros são adicionados com o loop somente se coords_array "lat"for maior que o "lat"do new_arrayúltimo elemento.

Então new_arrayé:

new_array
array([[6, 2],
       [4, 3],
       [2, 6]], dtype=int64)
python-3.x
  • 2 respostas
  • 75 Views
Martin Hope
cicciodevoto
Asked: 2023-12-24 20:39:33 +0800 CST

Como mostrar os rótulos de ticks secundários no matplotlib

  • 6

Estou tentando traçar um dataframe do pandas, mas não consigo mostrar os rótulos nos ticks secundários

O dataframe é algo assim:

day_of_week   hour   count
0             0      150
0             1      673
...
1             0      734
1             1      35
...

onde day_of_weeké o dia da semana (segunda, terça, etc) e hoursão os horários do dia de 0 a 23.

Quero representar graficamente essa quantidade como uma série temporal e mostrar os ticks principais como meia-noite e mudança do dia seguinte e os ticks menores a cada 6 horas.

Modifiquei um pouco o dataframe e tentei plotá-lo, esse é o código:

days = {0: "Mon", 1: "Tue", 2: "Wed", 3: "Thu", 4: "Fri", 5: "Sat", 6: "Sun"}

df["dow"] = df["day_of_week"].apply(lambda x: days.get(x))
df["axis"] = (df["dow"] + " " + df["hour"].astype(str))

fig, ax = plt.subplots()

ax.plot(time_tweets["axis"], time_tweets["count"])

ax.grid(which="major", axis="x", linestyle="-", linewidth=2)

ax.xaxis.set_major_locator(MultipleLocator(24))
ax.xaxis.set_minor_locator(MultipleLocator(6))

plt.xticks(rotation=45, minor=True, ha="right")
plt.xticks(rotation=45, minor=False, ha="right")

Isso não plota o rótulo nos ticks menores, todo o resto está bem, os ticks principais e o rótulo, os ticks menores e a grade apenas nos ticks maiores.

Tentei adicionar plt.minorticks_on()ou plt.setp(ax.get_xticklabels(minor=True), visible=True), mas nada de rótulo nos ticks menores.

Você tem alguma sugestão?

python-3.x
  • 1 respostas
  • 19 Views
Martin Hope
cicciodevoto
Asked: 2023-12-24 02:00:47 +0800 CST

Agrupar dataframe do pandas por hora e dia

  • 6

Eu tenho um dataframe cobrindo um mês de texto com carimbo de data/hora, mais ou menos assim:

timestamp              text
2023-01-01 00:00:00    ABC
2023-01-01 00:00:01    DEF
2023-01-01 00:00:01    GHI
...

Gostaria de contar a quantidade de texto para cada hora e para cada dia da semana, para ter no final 168 (24*7) números.

Por exemplo se no dia 01-01-2023, que é domingo, entre as 10h e as 11h há 10 textos, no domingo seguinte (08-01-2023) sempre entre as 10h e as 11h há 15 textos, e assim sucessivamente. No final o número de todos os textos para todos os domingos entre as 10h e as 11h é: 10+15+...

Quero fazer isso para cada hora e para cada dia da semana.

Se o dataframe original for df, comecei a agrupar por horas:

hours_df = df.groupby(pd.Grouper(key="timestamp", freq="h")).size().reset_index(name="count_hours")

então adicionei o day_of_week:

hours_df["day_of_week"] = hours_df["timestamp"].dt.dayofweek

mas se eu agrupar agora desta day_of_weekforma:

day_df = hours_df.groupby("day_of_week").size().reset_index(name="count_days")

Vou perder a informação das horas e o resultado é um dataframe com 7 entradas, ou seja, os dias.

Como posso combinar o agrupamento das horas com o dos dias?

python-3.x
  • 1 respostas
  • 45 Views
Martin Hope
cicciodevoto
Asked: 2023-12-20 20:07:09 +0800 CST

Erro ao ler uma única coluna de um arquivo CSV enorme com mecanismo Pandas e PyArrow

  • 6

Estou tentando ler no Pandas uma única coluna de um enorme arquivo CSV usando a resposta de outra pergunta :

import pandas as pd

test_df = pd.read_csv("test.csv", usecols=["id_str"], engine="pyarrow")

e obtenho este erro:

pyarrow.lib.ArrowInvalid: CSV parse error: Expected 4 columns, got 3

Usando um arquivo muito menor, posso lê-lo sem pd.read_csvnenhuma opção.

Lendo em volta parece que esse problema está relacionado ao fato do arquivo CSV possuir células vazias, que são preenchidas NaNquando pd.read_csvusado sem opções, mas criam problemas no outro caso.

Ainda não encontrei nenhuma solução para esse problema, alguma sugestão?

Quero ler apenas algumas colunas, porque o arquivo é muito grande e preciso apenas delas para a análise que tenho que fazer.

python
  • 1 respostas
  • 44 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve