主页 M

线性回归实现房价预测

2025-09-25 网页编程网 网页编程网
#https://www.51cto.com/article/800938.html
#https://www.cnblogs.com/BlairGrowing/p/15419088.html
import torch
import torch.nn as nn
import torch.optim as optim


# 1.定义数据
X = torch.tensor([[1.0], [2.0], [3.0], [4.0]])#房子面积
y = torch.tensor([[2.0], [5.0], [6.0], [10.0]])#房子总价


#补充,接下来,我们需要加载数据并进行预处理。这通常包括缺失值的处理,数据规范化等步骤。
#我们假设所有数据都是完整的,不需要进行缺失值处理。
#但是,为了使梯度下降算法能更快地收敛,我们需要对数据进行规范化处理。
#import numpy as np
# 房屋面积
#areas = np.array([50, 60, 70, ..., 120, 130, 140], dtype=float)
# 房价
#prices = np.array([300, 360, 420, ..., 720, 780, 840], dtype=float)
# 数据规范化
#areas = (areas - np.mean(areas)) / np.std(areas)
#prices = (prices - np.mean(prices)) / np.std(prices)
#end 补充




# 2.定义模型
class LinearRegressionModel(nn.Module):
    def __init__(self):
        super(LinearRegressionModel, self).__init__()
        self.linear = nn.Linear(1, 1)#定义了一个线性层,输入特征为1,输出也为1


    def forward(self, x):
        return self.linear(x)


model = LinearRegressionModel() #w@input+b   等价于model(input)
#model=nn.Linear(1,1)
# 3.定义损失函数和优化器
#为了训练我们的模型,我们需要一个方法来度量我们的模型的预测值和实际值之间的差距。这就是损失函数(也叫成本函数)。
#对于线性回归模型,我们通常使用均方误差(MSE)作为损失函数:
#L = 1/N * sum(y_pred - y_actual)^2
criterion = nn.MSELoss()#均方误差(相减再平方)损失函数
#目标是通过调整模型的参数w和b来最小化损失函数。这个过程被称为优化。
#梯度下降是一种常见的优化方法,工作原理是计算损失函数关于参数的梯度(导数),然后按照梯度的反方向调整参数,以便在损失函数上下降。
optimizer = optim.SGD(model.parameters(), lr=0.01)#随机梯度下降优化器,学习率为0.01


# 4.训练模型
num_epochs = 1000
for epoch in range(num_epochs):
    model.train()#使用模型预测
    optimizer.zero_grad()#进行梯度清零
    outputs = model(X)#求解梯度
    loss = criterion(outputs, y)#根据预测计算损失
    loss.backward()#求解梯度
    optimizer.step()#优化模型参数
    print(f'epoch {epoch + 1}, loss {loss.sum():f}')


# 5.测试模型
model.eval()# 将模型设置为评估模式,因为我们不需要进行模型优化


P = torch.tensor([150.0])#求房子总价格
with torch.no_grad(): # 不需要计算梯度
    predicted = model(P)
    print(predicted)
阅读原文
阅读 103
123 显示电脑版