我正在处理具有这样的条目的数据集
dataset=np.array([[2104, 3],[1600, 3],
[2400, 3],[1416, 2],
[3000, 4],[1985, 4],
[1534, 3],[1427, 3],
[1380, 3],[1494, 3],
[1940, 4],[2000, 3],
[1890, 3],[4478, 5],
[1268, 3]])
很明显,所有条目均为int32]类型,我还需要以相同比例缩放要素。所以当我尝试使用统计的标准归一化(z)对其进行归一化时这是>z=(x-mean)/sigma
数据集中的所有值都变为零。我正在使用向量化方法。这是代码。
me=[]
sd=[]
for i in range(dataset.shape[1]):
m=np.mean(dataset[:,i])
sdd=np.std(dataset[:,i])
dataset[:,i]=(dataset[:,i]-m)
dataset[:,i]=dataset[:,i]/sdd
me.append(m)
sd.append(sdd)
这是执行上面的代码片段时得到的。
我正在处理一个数据集,该数据集具有这样的数据集= np.array([[2104,3],[1600,3],[2400,3],[1416,2],[3000,4], [1985,4],...
无需循环。您可以使用沿第一个轴获取的numpy的std
和mean
:
(dataset-dataset.mean(0))/dataset.std(0)
array([[ 0.13736137, -0.39223227],
[-0.49430039, -0.39223227],
[ 0.50833732, -0.39223227],
[-0.72490707, -1.86310328],
[ 1.2603156 , 1.07863874],
[-0.01178099, 1.07863874],
[-0.577018 , -0.39223227],
[-0.7111208 , -0.39223227],
[-0.77002576, -0.39223227],
[-0.62714989, -0.39223227],
[-0.06817936, 1.07863874],
[ 0.00701846, -0.39223227],
[-0.13084422, -0.39223227],
[ 3.11268878, 2.54950976],
[-0.91039504, -0.39223227]])
我可以通过肉眼看到,您过度使用了from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit_transform(dataset)
array([[ 0.13736137, -0.39223227],
[-0.49430039, -0.39223227],
[ 0.50833732, -0.39223227],
[-0.72490707, -1.86310328],
[ 1.2603156 , 1.07863874],
[-0.01178099, 1.07863874],
[-0.577018 , -0.39223227],
[-0.7111208 , -0.39223227],
[-0.77002576, -0.39223227],
[-0.62714989, -0.39223227],
[-0.06817936, 1.07863874],
[ 0.00701846, -0.39223227],
[-0.13084422, -0.39223227],
[ 3.11268878, 2.54950976],
[-0.91039504, -0.39223227]])
值太多次。这是反模式。好吧,如果您进行一些重构以使脚本更具可读性怎么办?