【问题标题】:How to train continuous outputs(regression) in machine learning如何在机器学习中训练连续输出(回归)
【发布时间】:2016-02-16 17:43:44
【问题描述】:

我想训练输出是连续数字的回归模型(不是分类)。

假设我有输入变量 X,它的范围在 -70 到 70 之间。 我有输出变量 Y,范围在 -5 到 5 之间。X 有 39 个特征,Y 有 16 个特征,每个特征有 50,000 个示例。然后我想用python中的深度信念网络(DBN)训练他们。

我在 theano 主页中使用了描述 DBN 和 MNIST 数据(分类)的脚本。 http://deeplearning.net/tutorial/DBN.html

你能告诉我为了应用我上面解释的回归问题我必须改变哪些具体的行吗?

例如我必须改变...

  1. sigmoid 函数到 tanh 函数。 : 我听说 tanh 激活函数在回归中比 sigmoid 效果更好。对吗?
  2. 我必须使用最小二乘误差而不是使用负对数似然性......?
  3. 通过 zscore 对输入和输出数据进行归一化?

如果您有任何解决此问题的想法,请告诉我... 大多数机器学习示例都基于 MNIST 手数分类。如果您向我推荐一些不错的博客或主页,我会很高兴,在那里我可以获得与回归相关的有用信息。

谢谢你。

【问题讨论】:

  • 只是一个普遍的想法 - 不要从深度模型开始学习机器学习。这就像从量子力学开始学习物理一样。每个在新手教程中包含深度学习的人根本不知道他们在做什么(而且可能自己也是新手)。简而言之——如果你问这样的问题,那么深度模型不是一个好主意,从线性回归开始,然后是非线性类型,如核回归、knn 回归、rf 回归等。否则你会失败,我保证。

标签: python machine-learning regression rbm dbn


【解决方案1】:
@hyungwon yang: 

我还没有看过 python 代码,但我认为以下内容会很有用:

sigmoid 函数到 tanh 函数:没有必要,许多出版物使用 sigmoid 进行非线性回归。坦率地说,选择是根据您拥有的数据类型进行的。我将 sigmoid 用于许多非线性模型,它对我有用。

最小二乘误差:您可以通过内置的 Matlab 函数 regress 来执行此操作,而不是将其与这么多参数混淆。

Normalisations:你可以做一个 min-max normalisation(参考 Charu Agarwal 的 Data Mining),我在 Matlab 中的实现如下:

%inputData: Is your N samples * of first feature, you have to iteratively do %this process for each and every feature.
function normOut = NormaliseAnyData (inputData)
denominator = (max(inputData) - min (inputData));
numerator = (inputData - min(inputData)); 
normOut = numerator/denominator;
end

希望对您有所帮助。如果您还有其他问题,请告诉我。

【讨论】:

  • 非常感谢。我知道我在那里做什么,但我想听更多启发式的 cmets。你给了我一些!!
猜你喜欢
  • 2018-05-17
  • 1970-01-01
  • 2018-07-12
  • 2017-04-22
  • 2020-05-06
  • 2011-02-15
  • 1970-01-01
  • 1970-01-01
  • 2021-08-23
相关资源
最近更新 更多