问题描述
我正在尝试使用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代替按列进行归一化。