Neuronales Netz zum Schätzen des Immobilienwerts
import torch
import torch.nn as nn
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import pandas as pd
df = pd.read_csv("Hausdaten.csv")
X = torch.tensor(df[["mm2"]].values, dtype=torch.float32)
y = torch.tensor(df[["Price"]].values, dtype=torch.float32)
# 2. Neuronales Netz definieren
# 1 -> 16 -> 1 (Hidden Layer, ReLU)
model = nn.Sequential(
nn.Linear(1, 16),
nn.ReLU(),
nn.Linear(16, 1)
)
# 3. Verlustfunktion & Optimierer
criterion = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=1)
# 4. Training
epochs = 5000
for epoch in range(epochs):
y_pred = model(X)
loss = criterion(y_pred, y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
if epoch % 50 == 0:
print(f"Epoch {epoch}, Loss: {loss.item():.4f}")
# 5. Ergebnisse
with torch.no_grad():
y_fit = model(X)
print(model[2].weight)
print(model[2].bias)
# 6. Plot
plt.xlabel("Wohnfläche mm 2")
plt.ylabel("Preis Haus")
plt.title("Immoblienpreise")
ax = plt.gca()
ax.ticklabel_format(style='plain', axis='y')
ax.yaxis.set_major_formatter(ticker.FuncFormatter(lambda x, pos: f"{x:,.0f}".replace(",", ".")))
plt.scatter(X.numpy(), y.numpy(), label="Daten Häuser")
plt.plot(X.numpy(), y_fit.numpy(), color="red", label="Geschätzter Preis")
plt.legend()
plt.show()