Hier finden Sie Informationen zu jeder dieser Funktionen:
longitude
: Ein Maß dafür, wie weit westlich ein Haus liegt. Ein höherer Wert bedeutet, dass es weiter westlich liegtlatitude
: Ein Maß dafür, wie weit nördlich ein Haus liegt. Höhere Werte bedeuten weiter nördlichhousing_median_age
: Das Durchschnittsalter der Häuser in einem Block. Niedrigere Zahlen deuten auf neuere Gebäude hintotal_rooms
: Die Gesamtzahl der Zimmer in einem Blocktotal_bedrooms
: Gesamtzahl der Schlafzimmer in einem Blockinhabitants
: Gesamtzahl der in einem Block lebenden Menschenhouseholds
: Gesamtzahl der Haushalte oder Personengruppen, die in einer Wohneinheit lebenmedian_income
: Das durchschnittliche Einkommen der Haushalte innerhalb eines Wohnblocks (gemessen in Zehntausenden US-Greenback)median_house_value
: Durchschnittlicher Hauswert für Haushalte innerhalb eines Blocks (gemessen in US-Greenback)ocean_proximity
: Lage des Hauses zum Meer/Meer
df.information()
Unser Datensatz hat additionally insgesamt 20640 Zeilen und 10 Spalten (9 Options sind Eingabe-Options und die median_house_value
ist die abhängige Variable). Mit Ausnahme von sind alle Options numerischer Artwork ocean_proximity
Function, das vom Objekttyp ist.
Datenerkundung
Wir werden uns eingehender mit dem Datensatz befassen. Zunächst untersuchen wir die Options, die vom Kategorietyp sind (ocean_proximity
).
sns.countplot(knowledge=df, x="ocean_proximity")
Diese Funktion hat 5 eindeutige Werte und die Werte sind nicht ausgeglichen. Da diese Funktion kein Vorhersageziel ist, müssen wir keine Über- oder Unterabtastung durchführen, um die Werte auszugleichen. Als nächstes überprüfen wir die Korrelation zwischen Merkmalen.
corr = df.corr()
corr["median_house_value"].sort_values(ascending=False).to_frame()
Eine interessante Erkenntnis hierbei ist, dass das Durchschnittseinkommen stark mit den Immobilienpreisen korreliert. Dies ist sinnvoll, da die Menschen in der Regel ein Haus kaufen, das ihrem Durchschnittseinkommen entspricht.
Da wir das haben longitude
Und latitude
Merkmale lassen sich leichter analysieren, wenn wir sie visualisieren.
df.plot(variety="scatter", x="longitude", y="latitude", alpha=0.5,
s= df["population"]/100, label="inhabitants", figsize=(10,7),
c="median_house_value", cmap=plt.get_cmap("jet"), colorbar=True)
plt.legend()
Die Visualisierung hilft uns, den Standort eines bestimmten Hauses zu ermitteln. Wir sehen, dass der Preis eines Hauses umso höher ist, je näher es am Strand liegt. Zum Vergleich können Sie sich auch die Karte von Kalifornien ansehen.
Wir müssen auch prüfen, ob in den Daten Werte fehlen oder nicht.
df.isna().sum().to_frame()
Das Merkmal total_bedrooms
hat insgesamt 207 fehlende Werte oder etwa 1 % der gesamten Zeilen. Da es sich um eine kleine Zahl handelt, können wir die Zeilen mit fehlenden Werten löschen. Als nächstes müssen wir den Datensatz auf Ausreißerbedingungen prüfen.
num_col = ['longitude', 'latitude', 'housing_median_age', 'total_rooms',
'total_bedrooms', 'population', 'households', 'median_income',
'median_house_value']# visualize the outlier
plt.determine(figsize=(15, 10))
n = 1
for col in num_col:
plt.subplot(4, 3, n)
sns.boxplot(knowledge=df, x=col)
plt.title("Outlier in " + col, fontsize=16)
n += 1
plt.tight_layout()
Wow! Unser Datensatz weist viele Ausreißer auf. Ausreißer können dazu führen, dass das Modell ungenau ist. Wir müssen uns mit diesem Downside befassen.
Datenvorverarbeitung
Nachdem wir wissen, dass die fehlenden Werte in den Daten gering sind, können wir sie löschen.
df.dropna(inplace=True)
Die Maschine kann nur Daten der Typkategorie lesen. Besonderheit ocean_proximity
hat einen Wert vom Typ Kategorie. Wir werden es mithilfe der One-Sizzling-Codierungsmethode in einen numerischen Typ konvertieren.
cat = pd.get_dummies(df["ocean_proximity"])
df = pd.concat([df, cat], axis=1)
df.drop("ocean_proximity", axis=1, inplace=True)
Danach werden wir den Datensatz in Trainingssätze und Testsätze unterteilen. Wir werden die Trainingssätze verwenden, um das Modell zu trainieren, während wir die Testsätze verwenden, um das Modell zu bewerten.
X = df.drop("median_house_value", axis=1)
y = df["median_house_value"]
X_train, X_test, y_train, y_test = train_test_split(X, y,
test_size = 0.25,
random_state = 0)
Lineare Regressionsmodelle schneiden bei unskalierten Daten schlecht ab. Wir werden die Daten mit der RobustScaler-Methode skalieren. Denn wir wollen auch den Effekt von Ausreißern reduzieren.
scaler_X = RobustScaler()
X_train_scaled = scaler_X.fit_transform(X_train)
X_test_scaled = scaler_X.rework(X_test)
Modellierung und Bewertung
Wir haben die Daten analysiert und verarbeitet, bis sie bereit sind, dem Modell zugeführt zu werden. Wir werden das Regressionsmodell anhand der skalierten Daten trainieren.
mannequin = LinearRegression()
mannequin.match(X_train_scaled, y_train)
Wir können auch die Gewichtung jedes Options sehen mannequin.coef_
. Um die Voreingenommenheit zu erkennen, können wir verwenden mannequin.intercept_
.
Jeder Koeffizient entspricht jedem Merkmal und der Bias wird als Konstante hinzugefügt. Das macht ein Modell aus. Dann kann die lineare Regressionsmodellgleichung wie folgt erhalten werden:
Modell = Bias + Koeffizient₁*Merkmal₁ + Koeffizient₂*Merkmal₂ + … + Koeffizientₙ*Merkmalₙ
Wir können die Gewichts- und Bias-Werte in die Regressionsgleichung einsetzen, um Vorhersagen zu treffen.
Modell = 245227,1868829204 -104584,66322722 (Längengrad) -99374,66096139 (Breitengrad) + … -31674,11792617 (in der Nähe des Ozeans)
Um die Leistung des Regressionsmodells zu sehen, können wir es mithilfe der R-Quadrat-Metrik (R²) bewerten. Der R²-Wert zeigt, wie intestine das Modell zu den Daten passt. Der Wert liegt im Bereich von 0 bis 1. Je größer der Wert, desto besser ist die Leistung des Modells.
y_pred = mannequin.predict(X_test_scaled)
r_squared = r2_score(y_test, y_pred)
print(f'R-squared: {r_squared}')# output
R-squared: 0.6472382266013552
Wir erhalten einen R²-Wert von etwa 65 %, was bedeutet, dass 65 % der Varianz der abhängigen Variablen durch die unabhängige Variable/das unabhängige Merkmal erklärt werden können. Dies zeigt, dass sich unser lineares Regressionsmodell nicht intestine auf die Daten verallgemeinern lässt. Mit anderen Worten: Unser Modell ist unzureichend. Dies kann folgende zwei Gründe haben:
- Die Merkmale im Datensatz weisen eine schlechte Korrelation mit der abhängigen Variablen auf.
- Das verwendete Modell ist zu einfach.
Die a number of lineare Regression ermittelt die lineare Beziehung zwischen einer abhängigen Variablen (y) und mehreren unabhängigen Variablen (x). Sie funktioniert genauso wie die einfache lineare Regression, außer dass die mehrfache lineare Regression Gewichtungen für jedes Merkmal hat. In den meisten Vorhersagefällen schneidet die a number of lineare Regression besser ab als die einfache lineare Regression. Um den Erfolg der linearen Regressionsanalyse zu unterstützen, müssen mehrere Annahmen wie Linearität, Homoskedastizität, multivariate Normalität und das Fehlen von Multikollinearität beachtet werden. Eine häufig verwendete Metrik zur Messung der Anpassung des Modells an die Daten ist das R-Quadrat (R²).