Gradientenabstieg, der in der linearen Regression in die Luft jagt

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Gradientenabstieg, der in der linearen Regression in die Luft jagt

by Anonymous » 19 Aug 2025, 12:13

Ich kodiere einen linearen Regressionscode in Python, ich habe die Formeln verwendet, die ich gelernt und überprüft habe, und versuchte auch, den Datensatz zu normalisieren, was dann passiert ist und die Werte des Gewichts und die Vorspannung die exponentielle Zunahme von Werten verändert haben, aber immer noch einige Fehler gibt, da die Bias immer noch im Bereich von 10^-18 I-Verwendung des Immobiliendatensatzes aus dem Kaggle-Here ist. />https://www.kaggle.com/datasets/nitinsh ... is-dataset
Hier ist der Code, den ich geschrieben habe.

Code: Select all

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

def gradient_descent(x, y, m, c, n):
delta_m = (-2/n) * np.sum(x * (y - (m*x + c)))
delta_c = (-2/n) * np.sum(y - (m*x + c))
return delta_m, delta_c

def linear_regression(epochs, m, c, learning_rate, x, y):
n = len(x)
for i in range(epochs):
delta_m, delta_c = gradient_descent(x, y, m, c, n)
m -= learning_rate * delta_m
c -= learning_rate * delta_c
if (i+1) % 1000 == 0:
print(f"After {i+1} epochs: m = {m}, c = {c}")
return m, c

df = pd.read_csv("archive/real_estate.csv")

df = df[['apartment_total_area', 'price_in_USD']].dropna()

df['apartment_total_area'] = (
df['apartment_total_area']
.astype(str)
.str.replace(' m²', '', regex=False)
.str.replace(' ', '', regex=False)
.str.replace(',', '.', regex=False)
.astype(float)
)

# Clean price_in_USD
df['price_in_USD'] = (
df['price_in_USD']
.astype(str)
.str.replace('$', '', regex=False)
.str.replace(',', '', regex=False)
.str.strip()
.astype(float)
)

x = df['apartment_total_area'].to_numpy()
y = df['price_in_USD'].to_numpy()

x_mean, x_std = x.mean(), x.std()
y_mean, y_std = y.mean(), y.std()
x_s = (x - x_mean)/x_std
y_s = (y - y_mean)/y_std

m, c = 0, 0
epochs = 20000
learning_rate = 0.0001

m_s, c_s = linear_regression(epochs, m, c, learning_rate, x_s, y_s)

m_orig = m_s * (y_std / x_std)
c_orig = y_mean + c_s * y_std - m_orig * x_mean

print(f"Final slope (m): {m_orig}")
print(f"Final intercept (c): {c_orig}")

plt.scatter(x, y, color="blue")
plt.plot(x, m_orig*x + c_orig, color="red")
plt.xlabel("Apartment Total Area (m²)")
plt.ylabel("Price in USD")
plt.show()

Kann mir jemand helfen, herauszufinden, was das Problem ist?>

Top