Dans l'étape suivante du Titanic, j'ai essayé de prédire le prix de l'immobilier, qui est une introduction au kaggle. Le Titanic avait pas mal d'articles, mais les prix des maisons étaient bas, je les posterai donc. Comme je suis débutant, le score est faible, alors j'apprécierais que vous me donniez quelques conseils.
Le prétraitement des données a été effectué en référence à cet article. "Prétraitement des données" - Tutoriel populaire Kaggle
Cette fois, puisqu'il s'agit d'une analyse de régression, je vais essayer la régression linéaire, la régression Lasso et la régression Ridge.
#Préparer les données d'entraînement
X_train = df_train[['OverallQual', 'YearBuilt', 'TotalBsmtSF', 'GrLivArea']]
y_train = df_train['SalePrice']
#Données d'entraînement séparées par les données de test
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)
__ Construire un modèle __
#Régression linéaire
#Module d'importation
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import Lasso
from sklearn.linear_model import Ridge
#Régression linéaire
lr = LinearRegression()
lr.fit(train_X, train_y)
print("Régression linéaire:{}".format(lr.score(test_X, test_y)))
#Retour au lasso
lasso = Lasso()
lasso.fit(train_X, train_y)
print("Retour au lasso:{}".format(lasso.score(test_X, test_y)))
#Retour de crête
ridge = Ridge()
ridge.fit(train_X, train_y)
print("Retour de crête:{}".format(ridge.score(test_X, test_y)))
Le résultat est le suivant Régression linéaire: 0,8320945695605152 __ Retour Lasso: 0.5197737962239536__ __ Ridge Return: 0.8324316647361567__
Lire les données
#Lire les données de test
df_test = pd.read_csv('/kaggle/input/house-prices-advanced-regression-techniques/test.csv')
production
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
__ Vérifiez les valeurs manquantes __
#Vérifiez les valeurs manquantes
df_test[['OverallQual', 'YearBuilt', 'TotalBsmtSF', 'GrLivArea']].isnull().sum()
production
OverallQual 0
YearBuilt 0
TotalBsmtSF 1
GrLivArea 0
dtype: int64
Il manque une valeur dans TotalBsmtSF (zone souterraine). Cette fois, la valeur moyenne est utilisée pour compléter le défaut.
#Compléter les valeurs manquantes
df_test['TotalBsmtSF'] = df_test['TotalBsmtSF'].fillna(df_test['TotalBsmtSF'].mean())
__ Effectuer le prétraitement restant __
#Extraire l'ID
df_test_index = df_test['Id']
#Conversion de journal
df_test['GrLivArea'] = np.log(df_test['GrLivArea'])
#Convertir des variables catégorielles
df_test = pd.get_dummies(df_test)
#Entrez une valeur pour la valeur manquante
df_test[df_test['TotalBsmtSF'].isnull()]
X_test = df_test[['OverallQual', 'YearBuilt', 'TotalBsmtSF', 'GrLivArea']]
__Régression linéaire __
#Régression linéaire
#Valeur prédite
pred_y = lr.predict(X_test)
#Créer un bloc de données
submission = pd.DataFrame({'Id': df_test_index,
'SalePrice': np.exp(pred_y)})
#Sortie vers un fichier CSV
submission.to_csv('submission_lr.csv', index=False)
__ Retour au lasso __
#Retour au lasso
#Valeur prédite
pred_y = lasso.predict(X_test)
#Créer un bloc de données
submission = pd.DataFrame({'Id': df_test_index,
'SalePrice': np.exp(pred_y)})
#Sortie vers un fichier CSV
submission.to_csv('submission_lasso.csv', index=False)
__ Ridge Return __
#Retour de crête
#Valeur prédite
pred_y = ridge.predict(X_test)
#Créer un bloc de données
submission = pd.DataFrame({'Id': df_test_index,
'SalePrice': np.exp(pred_y)})
#Sortie vers un fichier CSV
submission.to_csv('submission_ridge.csv', index=False)
Au Ridge Return Le résultat est 0,16450 (le plus bas est le meilleur)
Alors, comment améliorez-vous votre score?
La prochaine fois, j'essaierai un autre tutoriel.
Recommended Posts