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, xi
est la première caractéristique de toutes les données, xj
est la deuxième caractéristique et xij
est le résultat après multiplication des deux caractéristiques.
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.