【问题标题】:feature scaling and intercept特征缩放和截距
【发布时间】:2019-03-21 23:36:48
【问题描述】:

这是一个初学者问题,但我有一个包含两个特征房屋大小和卧室数量的数据集,所以我正在研究 Octave;所以基本上我尝试进行特征缩放,但在设计矩阵中我添加了一列(对于 tetha0)所以我尝试进行平均归一化:(x-mean(x)/std(x) 但是在 one 的列中,显然平均值是 1,因为每行只有 1 所以当我这样做时,intercept 列设置为 0:

 mu = mean(X)
mu =

  1.0000   2000.6809      3.1702

 votric = X - mu
votric =

  0.00000    103.31915     -0.17021
  0.00000   -400.68085     -0.17021
  0.00000    399.31915     -0.17021
  0.00000   -584.68085     -1.17021
  0.00000    999.31915      0.82979

所以第一列不应该被排除在平均归一化之外吗?

【问题讨论】:

    标签: octave normalization


    【解决方案1】:

    是的,您应该首先对所有观察结果的原始数据集进行归一化,然后才添加偏差项(即“一列”)。

    归一化的目的是允许在平等的基础上比较各种特征,从而显着加快优化算法的速度。

    偏差(即一列)在技术上不是功能的一部分。允许我们使用单个矩阵乘法以计算上和符号上有效的方式获得我们的结果只是一种数学上的便利。

    换句话说,不是说Y = bias + weight1 * X1 + weight2 * X2等,而是创建一个假想的X0 = 1,并将偏差表示为weight0,然后您可以用矢量化方式表达它,如下所示:Y = weights * X

    “规范化”偏差项没有意义,因为很明显这会使X0 = 0,其结果是您将完全放弃偏差项的影响。所以是的,首先规范化,然后才向规范化特征添加“1”。


    PS。我在这里很犹豫,猜测您来自 Andrew Ng 在 coursera 上的机器学习课程。您将在 ex1_multi.m 中看到这确实是他在他的代码中所做的(第 52 行)。

    % Scale features and set them to zero mean
    fprintf('Normalizing Features ...\n');
    
    [X mu sigma] = featureNormalize(X);
    
    % Add intercept term to X
    X = [ones(m, 1) X];
    

    【讨论】:

    • 嘿!谢谢你的解释,我对你的中等技能感到惊讶,是的,课程是由 andrew Ng 编写的(你怎么知道的?)但它不是来自 Coursera 这是我在 git hub 上找到的 pdf 集合。我也去coursera上看看,谢谢帮助
    • 有这么多人问来自那门课程的八度音阶问题,所以我决定自己去学习,这样当他们的问题不存在时,我可以有一半的时间知道他们在说什么' t完全有道理,啊哈。我认识到“房屋和卧室”的问题。是的,这是一门很好的课程,去做吧!
    猜你喜欢
    • 1970-01-01
    • 2020-05-31
    • 2021-06-22
    • 2021-03-09
    • 2020-04-21
    • 2020-09-24
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    相关资源
    最近更新 更多