梯度下降法-预测房价

import lr as lr
import numpy as np
import matplotlib.pyplot as plt
data = []
for i in range(300):
    area = np.random.uniform(60, 100)
    eps2 = np.random.uniform(60, 62)
    eps3 = np.random.uniform(200., 700.)
    price = eps2 * area + eps3
    data.append([area, price])
data = np.array(data)
area = data[:, 0]
price = data[:, 1]
plt.title("Area-Price")
plt.scatter(area, price, s=10)
plt.xlabel("area")
plt.ylabel("price")
plt.show()
loss_list = []
def mse(b, w, data):
    TotalError = 0
    for i in range(0, len(data)):
        x = data[i, 0]
        y = data[i, 1]
        TotalError += (y - (w * x + b)) ** 2
    return TotalError / float(len(data))
def gradient_update(b, w, data, lr):
    b_gradient = 0
    w_gradient = 0
    size = float(len(data))
    for i in range(0, len(data)):
        x = data[i, 0]
        y = data[i, 1]
        b_gradient += (2 / size) * ((w * x + b) - y)
        w_gradient += (2 / size) * x * ((w * x + b) - y)
    b -= lr * b_gradient
    w -= lr * w_gradient
    return [b, w]
def gradient_descent(data, b, w, lr, num_iterations):
    for num in range(num_iterations):
        b, w = gradient_update(b, w, data, lr)
        loss = mse(b, w, data)
        loss_list.append(loss)
        print('iteration:[%s] | loss:[%s] | w:[%s] | b:[%s]' % (num, loss, w, b))
    return [b, w]
def main():
    lr = 0.00001
initial_b = np.random.randn(1)
initial_w = np.random.randn(1)
num_iterations = 100
[b, w] = gradient_descent(data, initial_b, initial_w, lr, num_iterations)
loss = mse(b, w, data)
print('Final loss:[%s] | w:[%s] | b:[%s]' % (loss, w, b))
plt.title("Loss Function")
plt.plot(np.arange(0, 100), loss_list)
plt.xlabel('Interation')
plt.ylabel('Loss Value')
plt.show()
y2 = w * area + b
print(w * 100 + b)
plt.title("Fit the line graph")
plt.scatter(area, price, label='Original Data', s=10)
plt.plot(area, y2, color='Red', label='Fitting Line', linewidth=2)
plt.xlabel('m_j')
plt.ylabel('j_g')
plt.legend()
plt.show()
main()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 波士顿房价预测是一个经典的回归问题,可以使用梯度下降法来解决。以下是一些步骤: 1. 收集和整理数据集,包括波士顿房屋的各种特征(如房间数量、犯罪率、是否靠近河流等)以及其价格。 2. 对数据集进行预处理,例如标准化、归一化等操作,以便更好地训练模型。 3. 构建模型,可以选择使用线性回归模型或其他更高级的模型,例如多项式回归、岭回归等。 4. 定义损失函数,通常使用均方误差(MSE)作为损失函数。 5. 使用梯度下降法来优化模型,不断迭代更新参数,使得损失函数最小化。 6. 使用测试数据集来评估模型的性能,可以计算出模型的均方根误差(RMSE)或平均绝对误差(MAE)等指标。 7. 如果模型表现良好,则可以将其用于实际应用中,例如预测新的房屋价格。 需要注意的是,梯度下降法需要选择合适的学习率和迭代次数,以避免过拟合或欠拟合的情况。同时,还需要进行特征选择和模型调参等操作,以优化模型的性能。 ### 回答2: 梯度下降法是一种常用的机器学习算法,用于预测波士顿房价。该算法的目标是通过最小化预测值和真实房价之间的平均平方误差来训练模型。 首先,我们需要收集波士顿的房价数据,包括不同房屋的特征,如房间数量、犯罪率、学生/教师比例等。然后,将数据分为训练集和测试集。 接下来,我们初始化模型的参数,如截距和特征权重。通过迭代的方式,我们计算每个参数的梯度和损失函数的值,并更新参数值以最小化损失函数。 在每次迭代中,我们选择一个训练样本,并计算预测值与实际房价的差异。然后,使用差异值和该样本的特征值计算每个参数的梯度。在梯度下降中,我们将参数值沿着梯度的方向更新,以减小损失函数。 重复执行上述步骤,直到达到指定的停止条件,例如达到最大迭代次数或损失函数的改进不再显著。在训练完成后,我们可以对模型进行评估,使用测试集计算预测结果与真实房价之间的均方根误差等指标。 梯度下降法的优点是它可以处理大量的特征和样本,并且计算速度较快。然而,它可能陷入局部最小值,并且需要适当的学习率来避免震荡或收敛问题。 综上所述,梯度下降法是一种有效的预测波士顿房价的算法。通过最小化损失函数来优化参数值,我们可以得到用于预测房价的模型。这种方法可以应用于各种机器学习问题,并且在波士顿房价预测中取得了较好的效果。 ### 回答3: 梯度下降法是一种常用的优化算法,用于求解目标函数的最小值。在波士顿房价预测问题中,我们可以将房价作为目标函数,通过梯度下降法来找到最佳的模型参数。 首先,我们需要找到一个合适的模型来描述波士顿房价与各个特征之间的关系。常用的模型是线性回归模型,即房价与各个特征之间的线性组合。 然后,我们需要定义一个损失函数,来衡量模型预测值与实际房价之间的差距。通常采用均方误差作为损失函数,即预测值与实际值之间的平方差的均值。 接下来,我们使用梯度下降法来更新模型参数。首先随机初始化模型参数,然后通过不断更新参数来最小化损失函数。具体而言,我们计算损失函数对于模型参数的偏导数,然后使用学习率乘以偏导数来更新参数。学习率控制每次更新的步长,可以通过实验来进行调整。 重复以上步骤直到损失函数收敛或达到预设的停止条件。最终得到的模型参数就可以用于预测波士顿房价。 需要注意的是,梯度下降法可能陷入局部最优解,因此可以通过设置不同的初始参数和学习率,或者尝试其他优化算法(如随机梯度下降法、牛顿法等)来进一步优化模型性能。 总之,梯度下降法是一种常用的优化算法,适用于波士顿房价预测问题。通过不断更新模型参数,最小化损失函数,我们可以得到一个较好的预测模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值