我真的被这个特定的例子所困扰。所以,我想知道是否有人遇到过同样的问题。 This是我遇到问题的教程页面。当我执行; regressor.train(input_fn=get_input_fn(training_set), steps=5000)
行,损失呈指数级变化。因此,我在最后收到的权重不会产生真实的预测。由于整个示例处于 as 状态,因此我无法干预该过程。
当我使用Theta = pinv(X'*X) * X' * y
应用正规方程时,我对Theta
的预测是:
[33.624 17.714 21.796 33.601 12.852 19.621]
以及教程中提出的结果是:
[33.30348587 17.04452896 22.56370163 34.74345398 14.55953979 19.58005714]
似乎正规方程产生几乎正确的输出。我设计了自己的模型,它只包含一个神经元,而且损失仍然与教程模型完全不同。然后我应用均值归一化和特征缩放,设法将损失收敛到局部最小值。但是当我将权重与预测集相乘时,它会产生无效的负面结果。
我的问题是,我该如何解决这个问题?
编辑:以下是代码:
training_set = csvread('boston_train.csv');
training_set = training_set(2:end,:);
training_set = training_set(:,1:10);
首先修剪第一行,因为它包含无意义的数据。并修剪最后2列,其中只包含未存储在csv文件中的0。可能是csvread
函数的一个小问题。
y = training_set(:,10);
X = training_set(:,1:9);
提取的输出和功能。
m = size(X,1);
X_norm = featureNormalize(X);
X = [ones(m,1) X_norm];
Theta = zeros(n,1); # Zero initialize the weight vector.
alpha= 0.01; # Learning rate.
应用特征缩放和均值归一化。
[Theta,losses]= gradientDescent(X, y, Theta, alpha, 5000);
fprintf('Final Loss computed = %f\n', losses(end));
损失将在16.551243附近。
predict_set = csvread('boston_predict.csv');
predict_set = predict_set(:,1:9);
predict_set= predict_set(2:end,:);
ps_size = size(predict_set,1);
predict_set=[ones(ps_size,1) predict_set];
对predict_set进行一些预处理以消除冗余值。
predictions = predict_set * Theta
得到的矢量是:
57.254
-96.769
-39.343
-10.582
-111.768
-88.005