【问题标题】:Multivariate Linear Regression Cost Too High多元线性回归成本太高
【发布时间】:2020-04-20 13:32:38
【问题描述】:

我正在使用this 链接中提供的数据集imports-85.data 进行价格预测。

使用horsepowercurb-weightengine-sizehighway-mpg,我尝试归一化(由于成本高昂)并通过执行以下操作来运行梯度下降算法:

初始化

data = df[attrs]
m = len(data) # m-training examples
f = len(attrs) # n-features
X = np.hstack((np.ones(shape=(m,1)),np.array(data)))
T = np.zeros(f + 1) # Coefficients of x(0),x(1),...x(n)
norm_price = df.price / 1000
Y = np.array(norm_price)

# Normalization
data['curb-weight'] = (data['curb-weight'] * 0.453592) / 1000    # To kg (e-1000)
data['highway-mpg'] = data['highway-mpg'] * 0.425144    # To km per litre (kml)
data['engine-size'] = data['engine-size'] / 100     # To e-100
data['horsepower'] = data['horsepower'] / 100   # To e-100

col_rename = {
    'curb-weight':'curb-weight-kg(e-1000)',
    'highway-mpg':'highway-kml',
    'engine-size':'engine-size(e-100)',
    'horsepower':'horsepower(e-100)'
}
data.rename(columns=col_rename,inplace=True)

成本计算

def calculateCost():
    global m,T,X
    hypot = (X.dot(T) - Y).transpose().dot(X.dot(T) - Y)
    return hypot / (2 * m)

梯度下降

def gradDescent(threshold,iter = 10000,alpha = 3e-8):
    global T,X,Y,m
    i = 0
    cost = calculateCost()
    cost_hist = [cost]
    while i < iter:
        T = T - (alpha / m) * X.transpose().dot(X.dot(T) - Y)
        cost = calculateCost()
        cost_hist.append(cost)
        i += 1
        if cost <= threshold:
            return cost_hist

我用这个实现运行梯度下降: Batch Gradient Descent

如果没有标准化,成本将为118634960.460199。 通过标准化,成本将为118.634960460199

因此,我有几个问题:

  1. 我的标准化技术正确吗?
  2. 标准化后,成本会有所不同。标准化后如何设置成本阈值?

【问题讨论】:

    标签: python machine-learning linear-regression gradient-descent non-linear-regression


    【解决方案1】:

    我认为您可能误解了机器学习背景下的“规范化”。根据我对您代码的解释,您的“规范化”部分正在进行单位转换。在梯度下降之前,通常应用最大最小缩放或标准缩放,请参阅scikit learn user guide。这些技术创建具有一致尺度范围的特征,因此单个特征的变化不会完全支配损失函数。 This questionthis blog post 有更长的讨论。

    【讨论】:

    • 哦,我明白了。顺便问一下,你所说的分发是什么意思?
    • 实际上“分发”并不是描述我在这里的意思的最佳词。由于这些变换,各个特征的分布形状不会变得均匀,但重要的是它们的尺度会变得相似。我已经编辑了我的答案以更新此问题,并包含一个指向该主题的更长讨论的链接。
    猜你喜欢
    • 2020-09-12
    • 2021-12-20
    • 2010-11-23
    • 2013-07-17
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 2019-07-04
    相关资源
    最近更新 更多