Python规范化导致1s插入范围0-1

问题描述

我正在尝试使用Python sklearn preprocessing.normalize来规范化我的数据,但是几乎所有结果都以1插入[0-1]范围内结束。我想这是一个简单的错误,但是我是Python的新手。平均而言,最大的区别是可见的,这清楚地表明有些事情还遥遥无期!

这是重现该问题的示例代码

import numpy as np
import pandas as pd
from sklearn import preprocessing

tmp = np.random.randint(0,100,1000) 

tmp_st = preprocessing.normalize(tmp.reshape(-1,1))
print('min: ' + str(min(tmp_st)) + 
      ' | max: ' + str(max(tmp_st)) + 
      ' | avg: ' + str(sum(tmp_st) / len(tmp_st)) + 
      ' - min org: ' + str(min(tmp)) + 
      ' | max org: ' + str(max(tmp)) + 
      ' | avg org: ' + str(sum(tmp) / len(tmp)))
# min: 0.0 | max: 1.0 | avg: 0.99 - min org: 0 | max org: 99 | avg org: 50.156

我也尝试在数据框内实现

df_tmp = pd.DataFrame({'tmp': tmp})
df_tmp['tmp_st'] = preprocessing.normalize(df_tmp[['tmp']])
print('min: ' + str(min(df_tmp['tmp_st'])) + 
      ' | max: ' + str(max(df_tmp['tmp_st'])) + 
      ' | avg: ' + str(sum(df_tmp['tmp_st']) / len(df_tmp['tmp_st'])) + 
      ' - min org: ' + str(min(df_tmp['tmp'])) + 
      ' | max org: ' + str(max(df_tmp['tmp'])) + 
      ' | avg org: ' + str(sum(df_tmp['tmp']) / len(df_tmp['tmp'])))
# min: 0.0 | max: 1.0 | avg: 0.99 - min org: 0 | max org: 99 | avg org: 50.156

解决方法

默认情况下,

normalize独立地标准化每一行。但是您要给它一个列向量-每行只有一个值!尝试添加axis=0关键字arg代替按列进行归一化。