【发布时间】:2017-07-20 20:07:52
【问题描述】:
请看下面两个代码。 NN 系统有两种设置。第一个代码(带有结果)显示数据未缩放的结果,第二个代码显示数据缩放的结果。我很担心,因为数据集很小而且很明确,我找不到缩放过程的解决方案。现在想象特征也将具有连续的值和标签。结果会更糟。我可以做些什么来改善缩放代码的结果吗?
在 python 中设置 NN,没有缩放器:
import numpy as np
X = np.array([[1,0,0], [1,1,0], [0,0,1]])
y = np.array([[0,1,0]]).T
def relu(x):
return np.maximum(x,0,x) #relu activation
def relu_d(x): #derivate of relu
x[x<0] = 0
return x
np.random.seed(0)
w0 = np.random.normal(size=(3,5), scale=0.1)
w1 = np.random.normal(size=(5,1), scale=0.1)
结果:
epoch nr:0 results in mean square error: 0.572624041985418
epoch nr:100000 results in mean square error: 0.1883460901967186
epoch nr:200000 results in mean square error: 0.08173913195938957
epoch nr:300000 results in mean square error: 0.04658778224325014
epoch nr:400000 results in mean square error: 0.03058257621363338
缩放数据代码:
import numpy as np
X = np.array([[1,0,0], [1,1,0], [0,0,1]])
y = np.array([[0,1,0]]).T
from sklearn.preprocessing import StandardScaler
sx = StandardScaler()
X = sx.fit_transform(X)
sy = StandardScaler()
y = sy.fit_transform(y)
def relu(x):
return np.maximum(x,0,x)
def relu_d(x):
x[x<0] = 0
return x
np.random.seed(0)
w0 = np.random.normal(size=(3,5), scale=0.1)
w1 = np.random.normal(size=(5,1), scale=0.1)
结果是:
epoch nr:0 results in mean square error: 1.0039400468232
epoch nr:100000 results in mean square error: 0.5778610517002227
epoch nr:200000 results in mean square error: 0.5773502691896257
epoch nr:300000 results in mean square error: 0.5773502691896257
epoch nr:400000 results in mean square error: 0.5773502691896257
【问题讨论】:
-
尝试删除 sy = StandardScaler() 和 y = sy.fit_transform(y)。通常,缩放应用于不在目标上的特征
标签: python scikit-learn neural-network