[Pandas] Résoudre le problème selon lequel le résultat de la multiplication de deux nombres positifs chez les pandas est une valeur négative

J'ai utilisé sklearn pour ajuster les données il y a quelques jours et j'ai trouvé que la courbe était particulièrement scandaleuse. J'ai longtemps cherché la raison. Finalement, j'ai découvert que c'était parce que j'avais multiplié les fonctionnalités du code pour augmenter la dimension des caractéristiques. Cependant, les deux positifs Une fois les nombres multipliés ensemble, ils deviennent négatifs :

Dans la figure ci-dessous, xiest la première caractéristique de toutes les données, xjest la deuxième caractéristique et xijest le résultat après multiplication des deux caractéristiques.
Veuillez ajouter une description de l'image
Après avoir testé avec le code suivant, il a été constaté que la raison est que les données sont trop volumineuses et la multiplication directe ne provoquera pas d'erreurs, mais le résultat de la multiplication chez les pandas est une valeur négative.

if __name__ == '__main__':
    a = 10000000000
    b = 70000000000
    print("a:{}, b:{}".format(a, b))
    print("a与b直接相乘:\n", a*b)
    pda = pd.DataFrame(np.array([a]))
    pdb = pd.DataFrame(np.array([b]))
    print("通过pandas相乘:")
    print(pda * pdb)
a:10000000000, b:70000000000
a与b直接相乘:
700000000000000000000
通过pandas相乘:
                   0
0 -976274800962961408

La raison du résultat négatif est que les données d'origine sont trop volumineuses et que le résultat multiplié dépasse la plage d'entiers que les pandas peuvent exprimer, provoquant un débordement. Ce phénomène existe également dans numpy.

Généralement, les types organisationnels d'entiers sont : int8, int16, int32, int64, etc. Si les deux nombres multipliés sont des débordements causés par le type entier des pandas étant int32, et le résultat après multiplication peut être exprimé dans la plage de type int64 , puis changez simplement le type de données pandas de int32 à int64 :

pda = pd.DataFrame(np.array([a]), dtype='int64')
pdb = pd.DataFrame(np.array([b]), dtype='int64')
res = pda * pdb

Si les deux nombres multipliés sont vraiment trop grands et que le résultat de la multiplication dépasse la plage que peut représenter int64, nous pouvons utiliser la normalisation pour normaliser les données à ou, et les données normalisées (-1, 1)seront (0, 1)multipliées ou mises au carré. Les résultats deviendront normaux.

Je suppose que tu aimes

Origine blog.csdn.net/qq_41340996/article/details/120571155
conseillé
Classement