【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=(106))
plt.plot(history.history['loss'], label='loss')
plt.plot(history.history['val_loss'], label='val_loss')
plt.legend()
<matplotlib.legend.Legend at 0x7f1bb5e392d0>
# Tạo hình các lớp model
from tensorflow.keras.utils import plot_model
from IPython.display import Image
plot_model(model, to_file='Exa1_ANN_model.png', show_shapes=True)
Image(filename='Exa1_ANN_model.png')

# Lưu kết quả model
from tensorflow.keras.models import load_model
model.save('Exa1_ANN_model.h5')
print('Model is saved')
# Load model và truyền feature dự đoán giá
from tensorflow.keras.models import load_model
model_load = load_model('Exa1_ANN_model.h5')
import pandas as pd
df = dataset.head(1).drop(columns=['Price'], axis = 1)
for c in df.columns:
    if df[c].dtype == 'object':
        lbl = preprocessing.LabelEncoder()
        lbl.fit(list(df[c].values)) 
        df[c] = lbl.transform(list(df[c].values))                               
X_new = scaler_x.fit_transform(df)
ynew=model.predict(X_new)
y_new = scaler_y.inverse_transform(ynew)

print("Imput=%s, Giá dự đoán =%s $" % ( dataset.head(1), y_new[0]))

Imput= Suburb Address ... Distance CouncilArea 0 Abbotsford 49 Lithgow St ... 3.0 Yarra City Council [1 rows x 13 columns],Giá dự đoán =[981233.6] $


Không có nhận xét nào

Được tạo bởi Blogger.