我从AWS(SageMaker)线性学习者得到的结果有问题 .

也就是说,我试图复制我从R,SAS或Knime获得的结果(使用线性回归)但不幸的是,我从线性学习者获得的结果与提到的其他3种计算方法不同 .

我尝试了不同的超参数和配置,但即使在满足关系的综合生成数据的非常简单的情况下,我也得到了不精确的回归结果

Y = X1 2 * X2 3

在这种情况下,确切的回归系数等于1,2和截距3.与提到的其他软件不同,SageMaker线性学习者返回的值甚至不接近正确的值E.g.在一个例子中,我得到[0.91547656 1.9826275 3.023757],这简直不令人满意 . 你可以在这里看到我的代码的相关部分!

study=((1.0,3.0,10.0),(2.0,3.0,11.0),(3.0,2.0,10.0),(4.0,7.0,21.0),(5.0,4.0,16.0))
a = np.array(study).astype('float32')
other_columns=a[:,[0,1]]
labels = a[:,2]
buf = io.BytesIO()
smac.write_numpy_to_dense_tensor(buf, other_columns, labels)
buf.seek(0)
key = 'my-training-data'
boto3.resource('s3').Bucket(bucket).Object(os.path.join(prefix, 'train', key)).upload_fileobj(buf)
s3_train_data = 's3://{}/{}/train/{}'.format(bucket, prefix, key)
output_location = 's3://{}/{}/output'.format(bucket, prefix)

container = get_image_uri(boto3.Session().region_name, 'linear-learner')

import boto3
sess = sagemaker.Session()
linear = sagemaker.estimator.Estimator(container,
                                       role, 
                                       train_instance_count=1, 
                                       train_instance_type='ml.c4.xlarge',                                       
                                       output_path=output_location,
                                       sagemaker_session=sess)
linear.set_hyperparameters(feature_dim=2,
                           predictor_type='regressor',
                           loss='squared_loss',
                           epochs=50,
                           early_stopping_patience=100,
                           mini_batch_size=4)
linear.fit({'train': s3_train_data})

你对观察到的不完全结果有一些解释吗?

谢谢Nikolas