Im nächsten Schritt der Titanic habe ich versucht, den Hauspreis vorherzusagen, was eine Einführung in Kaggle ist. Die Titanic hatte einige Artikel, aber die Immobilienpreise waren niedrig, also werde ich sie veröffentlichen. Da ich ein Anfänger bin, war die Punktzahl niedrig, daher würde ich mich freuen, wenn Sie mir einen Rat geben könnten.
Die Datenvorverarbeitung wurde unter Bezugnahme auf diesen Artikel durchgeführt. "Data Preprocessing" -Kaggle Popular Tutorial
Da es sich diesmal um eine Regressionsanalyse handelt, werde ich die lineare Regression, die Lasso-Regression und die Ridge-Regression ausprobieren.
#Trainingsdaten vorbereiten
X_train = df_train[['OverallQual', 'YearBuilt', 'TotalBsmtSF', 'GrLivArea']]
y_train = df_train['SalePrice']
#Trainingsdaten Nach Testdaten trennen
from sklearn.model_selection import train_test_split
train_X, test_X, train_y, test_y = train_test_split(
X_train, y_train, random_state=42)
__ Modell bauen __
#Lineare Regression
#Modul importieren
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import Lasso
from sklearn.linear_model import Ridge
#Lineare Regression
lr = LinearRegression()
lr.fit(train_X, train_y)
print("Lineare Regression:{}".format(lr.score(test_X, test_y)))
#Lasso kehrt zurück
lasso = Lasso()
lasso.fit(train_X, train_y)
print("Lasso kehrt zurück:{}".format(lasso.score(test_X, test_y)))
#Ridge kehrt zurück
ridge = Ridge()
ridge.fit(train_X, train_y)
print("Ridge kehrt zurück:{}".format(ridge.score(test_X, test_y)))
Das Ergebnis ist wie folgt Lineare Regression: 0.8320945695605152 __ Lasso Return: 0.5197737962239536__ __ Ridge Return: 0.8324316647361567__
Daten lesen
#Testdaten lesen
df_test = pd.read_csv('/kaggle/input/house-prices-advanced-regression-techniques/test.csv')
Ausgabe
Id MSSubClass MSZoning LotFrontage LotArea Street Alley LotShape LandContour Utilities ... ScreenPorch PoolArea PoolQC Fence MiscFeature MiscVal MoSold YrSold SaleType SaleCondition
0 1461 20 RH 80.0 11622 Pave NaN Reg Lvl AllPub ... 120 0 NaN MnPrv NaN 0 6 2010 WD Normal
1 1462 20 RL 81.0 14267 Pave NaN IR1 Lvl AllPub ... 0 0 NaN NaN Gar2 12500 6 2010 WD Normal
2 1463 60 RL 74.0 13830 Pave NaN IR1 Lvl AllPub ... 0 0 NaN MnPrv NaN 0 3 2010 WD Normal
3 1464 60 RL 78.0 9978 Pave NaN IR1 Lvl AllPub ... 0 0 NaN NaN NaN 0 6 2010 WD Normal
4 1465 120 RL 43.0 5005 Pave NaN IR1 HLS AllPub ... 144 0 NaN NaN NaN 0 1 2010 WD Normal
5 rows × 80 columns
__ Auf fehlende Werte prüfen __
#Überprüfen Sie, ob Werte fehlen
df_test[['OverallQual', 'YearBuilt', 'TotalBsmtSF', 'GrLivArea']].isnull().sum()
Ausgabe
OverallQual 0
YearBuilt 0
TotalBsmtSF 1
GrLivArea 0
dtype: int64
In TotalBsmtSF (unterirdischer Bereich) fehlt ein Wert. Diesmal wird der Mittelwert zur Ergänzung des Defekts herangezogen.
#Ergänzen Sie fehlende Werte
df_test['TotalBsmtSF'] = df_test['TotalBsmtSF'].fillna(df_test['TotalBsmtSF'].mean())
__ Führen Sie die verbleibende Vorverarbeitung durch __
#ID extrahieren
df_test_index = df_test['Id']
#Protokollkonvertierung
df_test['GrLivArea'] = np.log(df_test['GrLivArea'])
#Konvertieren Sie kategoriale Variablen
df_test = pd.get_dummies(df_test)
#Geben Sie einen Wert für den fehlenden Wert ein
df_test[df_test['TotalBsmtSF'].isnull()]
X_test = df_test[['OverallQual', 'YearBuilt', 'TotalBsmtSF', 'GrLivArea']]
__Lineare Regression __
#Lineare Regression
#Voraussichtlicher Wert
pred_y = lr.predict(X_test)
#Erstellen eines Datenrahmens
submission = pd.DataFrame({'Id': df_test_index,
'SalePrice': np.exp(pred_y)})
#Ausgabe in CSV-Datei
submission.to_csv('submission_lr.csv', index=False)
__ Lasso Return __
#Lasso kehrt zurück
#Voraussichtlicher Wert
pred_y = lasso.predict(X_test)
#Erstellen eines Datenrahmens
submission = pd.DataFrame({'Id': df_test_index,
'SalePrice': np.exp(pred_y)})
#Ausgabe in CSV-Datei
submission.to_csv('submission_lasso.csv', index=False)
__ Ridge Return __
#Ridge kehrt zurück
#Voraussichtlicher Wert
pred_y = ridge.predict(X_test)
#Erstellen eines Datenrahmens
submission = pd.DataFrame({'Id': df_test_index,
'SalePrice': np.exp(pred_y)})
#Ausgabe in CSV-Datei
submission.to_csv('submission_ridge.csv', index=False)
Bei Ridge Return Das Ergebnis ist 0,16450 (niedriger ist besser)
Wie verbessern Sie Ihre Punktzahl?
Nächstes Mal werde ich ein anderes Tutorial versuchen.
Recommended Posts