【Deep learning】Build model dự đoán giá nhà sử dụng mạng ANN (Artificial Neural Network)
Bài tập dự đoán giá nhà dựa vào các thông tin như số phòng vị trí ... sử dụng bộ data MELBOURNE_HOUSE_PRICES_LESS.csv
#Mount colab với google drive và import các thư viện
from google.colab import drive
drive.mount('/content/drive/')
%cd '/content/drive/MyDrive/PROJECT_DL/NguyenDangChinh/Dataset/'
import warnings
warnings.filterwarnings('ignore')
import tensorflow as tf
from tensorflow import keras
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.model_selection import KFold
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.wrappers.scikit_learn import KerasRegressor
#Load dataset được bố trí tại google drive của bạn
#Tiền xử lý data
dataset=pd.read_csv("MELBOURNE_HOUSE_PRICES_LESS.csv")
dataset.head()
#Kiểm tra xóa bỏ data null
dataset = dataset.dropna()
dataset.isnull().sum()
Suburb 0
Address 0
Rooms 0
Type 0
Price 0
Method 0
SellerG 0
Date 0
Postcode 0
Regionname 0
Propertycount 0
Distance 0
CouncilArea 0
dtype: int64
# Data Input trừ cột giá nhà ra
X = dataset.drop(columns=['Price'], axis = 1)
# Output
# Cột giá nhà
y = dataset[['Price']]
# Dùng LabelEncoder để chuyển chuổi sang kiểu Encoder
from sklearn import model_selection, preprocessing
for c in X.columns:
if X[c].dtype == 'object':
lbl = preprocessing.LabelEncoder()
lbl.fit(list(X[c].values))
X[c] = lbl.transform(list(X[c].values))
# Split data train và data test
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit(X)
X_train = sc.transform(X)
X_train, X_test, y_train, y_test = train_test_split(X_train, y_train,
test_size = 0.2,
random_state = 0)
# Buil model ANN
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Input, Dense, Activation, Dropout
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.callbacks import EarlyStopping
# Khi loss và valloos ko thay đổi trong 10 lần loop thì ngưng lặp
early_stopping_monitor = EarlyStopping(patience=10)
model = Sequential()
model.add(Dense(6,activation='relu',input_shape=(12,)))
model.add(Dense(1, activation='relu'))
model.compile(optimizer="Adam", loss='mse')
# Fit model
history = model.fit(X_train, y_train, epochs=150,
batch_size=32,
verbose=1,
validation_data=(X_test, y_test),
callbacks=[early_stopping_monitor])
poch 1/150
1576/1576 [==============================] - 58s 2ms/step - loss: 0.0252 - val_loss: 0.0100
Epoch 2/150
1576/1576 [==============================] - 2s 1ms/step - loss: 0.0099 - val_loss: 0.0099
Epoch 3/150
1576/1576 [==============================] - 2s 1ms/step - loss: 0.0095 - val_loss: 0.0087
Epoch 4/150
1576/1576 [==============================] - 2s 1ms/step - loss: 0.0058 - val_loss: 0.0028
Epoch 5/150
1576/1576 [==============================] - 2s 1ms/step - loss: 0.0022 - val_loss: 0.0020
Epoch 6/150
1576/1576 [==============================] - 2s 1ms/step - loss: 0.0020 - val_loss: 0.0019
Epoch 7/150
1576/1576 [==============================] - 2s 1ms/step - loss: 0.0019 - val_loss: 0.0018
Epoch 8/150
# Vẽ biểu đồ loss và val_loss
plt.figure(figsize=(10, 6))
plt.plot(history.history['loss'], label='loss')
plt.plot(history.history['val_loss'], label='val_loss')
plt.legend()
Leave a Comment