Vui lòng liên hệ ZALO 0353764719 hoặc GMAIL 123docntcgmail.com để mua tài liệu trực tiếp với giá ưu đãi, GIẢM GIÁ 2050% giá tài liệu Vui lòng liên hệ ZALO 0353764719 hoặc GMAIL 123docntcgmail.com để mua tài liệu trực tiếp với giá ưu đãi, GIẢM GIÁ 2050% giá tài liệu
HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG KHOA CƠNG NGHỆ THÔNG TIN I -🙞🙜🕮🙞🙜 - ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC ĐỀ TÀI: XÂY DỰNG ỨNG DỤNG DỰ ĐOÁN GIÁ NHÀ SỬ DỤNG HỌC MÁY Giảng viên hướng dẫn : TS NGUYỄN VĂN THỦY Sinh viên thực : NGUYỄN LƯƠNG ĐỨC Mã sinh viên : B17DCAT047 Lớp : E17CQCN01-B Khóa : 2017 – 2022 Hệ : ĐẠI HỌC CHÍNH QUY Hà Nội, tháng 01 năm 2022 HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG KHOA CÔNG NGHỆ THÔNG TIN I -🙞🙜🕮🙞🙜 - ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC ĐỀ TÀI: XÂY DỰNG ỨNG DỤNG DỰ ĐOÁN GIÁ NHÀ SỬ DỤNG HỌC MÁY Giảng viên hướng dẫn : TS NGUYỄN VĂN THỦY Sinh viên thực : NGUYỄN LƯƠNG ĐỨC Mã sinh viên : B17DCAT047 Lớp : E17CQCN01-B Khóa : 2017 – 2022 Hệ : ĐẠI HỌC CHÍNH QUY Hà Nội, tháng 01 năm 2022 Đồ án tốt nghiệp đại học LỜI CẢM ƠN Đầu tiên, em xin gửi lời cảm ơn tới thầy cô, cán công tác Học viện Cơng nghệ Bưu Viễn thơng nói chung, thầy khoa Cơng nghệ thơng tin nói riêng tận tình hướng dẫn, giảng dạy tạo điều kiện thuận lợi giúp đỡ em trình học tập Học viện Những kiến thức, kinh nghiệm em nhận khơng tảng mà cịn hành trang quý báu để em bước vào đời cách vững tự tin Em xin gửi lời cảm ơn sâu sắc tới giảng viên, TS Nguyễn Văn Thủy trực tiếp hướng dẫn, góp ý giúp đỡ em hoàn thành đồ án tốt nghiệp Trong thời gian làm đồ án có giới hạn kiến thức thân cịn hạn chế nên khơng tránh khỏi thiếu sót, em mong nhận ý kiến góp ý thầy để đồ án hoàn thiện Em xin chân thành cảm ơn! Hà Nội, ngày 02 tháng 01 năm 2022 Sinh viên thực Đức Nguyễn Lương Đức Nguyễn Lương Đức - E17CQCN01-B i Đồ án tốt nghiệp đại học NHẬN XÉT, ĐÁNH GIÁ, CHO ĐIỂM (Của giảng viên hướng dẫn) Điểm Bằng chữ Hà Nội, ngày tháng năm Giảng viên hướng dẫn iNguyễn Lương Đức - E17CQCN01-B ii Đồ án tốt nghiệp đại học NHẬN XÉT, ĐÁNH GIÁ, CHO ĐIỂM (Của giảng viên phản biện) Điểm Bằng chữ Hà Nội, ngày tháng năm Giảng viên phản biện iNguyễn Lương Đức - E17CQCN01-B iii Đồ án tốt nghiệp đại học MỤC LỤC LỜI CẢM ƠN i NHẬN XÉT, ĐÁNH GIÁ, CHO ĐIỂM (Của giảng viên hướng dẫn) ii NHẬN XÉT, ĐÁNH GIÁ, CHO ĐIỂM (Của giảng viên phản biện) iii MỤC LỤC iv DANH MỤC KÝ HIỆU VÀ TỪ VIẾT TẮT vi DANH MỤC HÌNH VẼ vii MỞ ĐẦU CHƯƠNG 1: TỔNG QUAN ĐỀ TÀI 1.1 Bài toán dự đoán giá nhà .2 1.2 Một số giải pháp có .3 1.2.1 Mogi.vn .3 1.2.2 Cenhomes 1.2.3 Dinhgianhadat 1.3 Giải pháp đề xuất đồ án 1.4 Kết luận CHƯƠNG 2: CƠ SỞ LÝ THUYẾT .7 2.1 Tổng quan học máy 2.2 Phân loại thuật toán học máy 2.2.1 Học có giám sát 2.2.2 Học khơng có giám sát .8 2.2.3 Học bán giám sát 2.2.4 Học tăng cường (Reinforcement learning) .9 2.3 Thuật toán hồi quy 10 2.3.1 Hồi quy tuyến tính Gradient descent 11 2.3.2 Regularization 11 2.3.3 Học kết hợp (Ensemble learning) 14 2.4 Thuật toán Rừng ngẫu nhiên (Random forest) 16 2.4.1 Boosting 17 2.5 Thuật toán Gradient Boosting (GB) 17 2.6 Thuật toán XGBoost 18 Nguyễn Lương Đức - E17CQCN01-B iv Đồ án tốt nghiệp đại học 2.7 Mạng Nơron 18 2.8 Kết luận 21 CHƯƠNG CÀI ĐẶT ỨNG DỤNG 22 3.1 Cài đặt mơ hình học máy 22 3.1.1 Thu thập liệu 22 3.1.2 Xử lý liệu 26 3.1.3 Huấn luyện mơ hình dự đốn giá 30 3.2 Cài đặt ứng dụng .36 3.2.1 Front-end .36 3.2.2 Cơ sở liệu 37 3.2.3 API 37 3.3 Đánh giá kết thu 39 3.3.1 RidgeCV .39 3.3.2 Random Forest 39 3.3.3 Gradient Boosting 39 3.3.4 XGBoost .40 3.3.5 ANN 40 3.4 Kết luận 40 KẾT LUẬN 41 TÀI LIỆU THAM KHẢO 42 Nguyễn Lương Đức - E17CQCN01-B v Đồ án tốt nghiệp đại học DANH MỤC KÝ HIỆU VÀ TỪ VIẾT TẮT AI Artificial Intelligence ANN Artificial Neural Network API Application Programming Interface NN Neural Network SNN Simulated Neural Network SVM Support Vector Machines Nguyễn Lương Đức - E17CQCN01-B vi Đồ án tốt nghiệp đại học DANH MỤC HÌNH VẼ Hình 1.1 Xu giá theo loại bất động sản trang Mogi.vn Hình 1.2 Màn hình biến động giá tin rao Cenhomes Hình 1.3 Màn hình Định giá nhà đất Dinhgianhadat .5 Hình 2.1 Sơ đồ phân loại học máy .7 Hình 2.2 AlphaGo chơi cờ vây với Lee Sedol 10 Hình 2.3 Lựa chọn mơ hình dựa validation 12 Hình 2.4 Tổng quát Ensemble Learning 14 Hình 2.5 Sơ đồ Bagging .16 Hình 2.6 Mơ hình mạng ANN 16 Hình 2.7 Mơ lớp ví dụ dự đốn giá máy bay 20 Hình 2.8 Kết nối nơron có trọng số 20 Hình 3.1 Phân cấp hiển thị thông tin trang web 22 Hình 3.2 Phân cấp hiển thị thông tin trang web 22 Hình 3.3 Dữ liệu tiền xử lý 27 Hình 3.4 Dữ liệu sau xử lý missing values 27 Hình 3.5 Dữ liệu sau xử lý 30 Hình 3.6 Mơ hình thiết kế ứng dụng 36 Hình 3.7 Trang Giá nhà trung bình theo quận 36 Hình 3.8 Trang Dự đốn giá nhà 37 Hình 3.9 Kết mơ hình RidgeCV 39 Hình 3.10 Kết mơ hình Random Forest 39 Hình 3.11 Kết mơ hình Gradient Boosting 40 Hình 3.12 Kết mơ hình XGBoost 40 Hình 3.13 Kết mơ hình ANN 40 Nguyễn Lương Đức - E17CQCN01-B vii Đồ án tốt nghiệp đại học MỞ ĐẦU Ngày nay, công nghệ thông tin phát triển mạnh mẽ, nhanh chóng ứng dụng hầu hết lĩnh vực, làm biến đổi sâu sắc mặt đời sống trở thành công cụ khơng thể thiếu nhiều ngành nghề, có bất động sản Cùng với phát triển công nghệ, trí tuệ nhân tạo đặc biệt học máy gần trọng để xử lý vấn đề phức tạp mà trước chưa thể xử lý triệt để Với nguyện vọng muốn xây dựng ứng dụng lĩnh vực bất động sản, em chọn đề tài xây dựng ứng dụng dự đoán giá có sử dụng học máy, giúp cho việc tìm kiếm dễ dàng, thuận tiện, giúp cho việc quản lý, đầu tư kinh doanh trở nên nhanh chóng, tránh phải bỏ công sức không cần thiết Đồ án kết thúc học phần mong muốn đóng góp tài liệu cho sinh viên khóa sau học tập, nghiên cứu Cấu trúc đồ án bao gồm chương : CHƯƠNG I TỔNG QUAN ĐỀ TÀI: Khảo sát tốn dự đốn giá nhà, tìm hiểu giải pháp có đưa giải pháp đồ án CHƯƠNG II CƠ SỞ LÝ THUYẾT: Trình bày chi tiết sở lý thuyết công nghệ sử dụng đồ án CHƯƠNG III: CÀI ĐẶT ỨNG DỤNG: Trình bày quy trình cài đặt ứng dụng ,đưa kết thu đánh giá Nguyễn Lương Đức - E17CQCN01-B Đồ án tốt nghiệp đại học Chương Cài đặt ứng dụng def processing(columns, N, M): result = [] for i in columns: i = i.partition(' ')[0].replace(',', '.') if i.count('.') > 1: i = float('nan') result.append(i) else: if float(i) = M: i = float('nan') result.append(i) else: result.append(float(i)) return result df['Giá/m2'] = processing(df['Giá/m2'].to_list(), 30, 200) df['Diện tích'] = processing(df['Diện tích'].to_list(), 20, 100) Tiếp theo, trường liệu “Số phịng ngủ” dạng string nên phải chuyển dạng integer Với giá trị “Nhiều phòng” để mặc định 11, nhỏ liệu không format để missing values (NaN) Code: def processing(columns, N, M): result = [] for i in columns: i = i.partition(' ')[0].replace(',', '.') if i.count('.') > 1: i = float('nan') result.append(i) else: if float(i) = M: i = float('nan') result.append(i) else: result.append(float(i)) return result df['Số phòng ngủ'] = processing_bedrooms(df['Số phòng ngủ'].to_list(), 1) Nguyễn Lương Đức - E17CQCN01-B 28 Đồ án tốt nghiệp đại học Chương Cài đặt ứng dụng Sau chắn thiếu bước loại bỏ missing values sau xử lý bước Bổ sung thêm, trường liệu “Ngày” chuyển từ dạng Datetime thành Timestamp để tăng lượng thông tin số tương quan thấp nên trường liệu loại bỏ df = df.drop('Ngày', axis=1) df = df.dropna() Với việc xử lý liệu dạng Text, kỹ thuật One – Hot – Encoding sử dụng để đưa Distinct values trường liệu “Quận”, “Huyện” “Loại hình nhà ở” thành trường liệu độc lập với giá trị Ngoài ra, trường liệu “Địa chỉ” không cần thiết việc huấn luyện mơ hình Code: def encode_and_bind(original_dataframe, feature_to_encode): dummies = pd.get_dummies(original_dataframe[[feature_to_encode]]) res = pd.concat([original_dataframe, dummies], axis=1) res = res.drop([feature_to_encode], axis=1) return(res) or_res = df.drop('Địa chỉ', axis=1) features_to_encode = ['Quận', 'Huyện', 'Loại hình nhà ở'] for feature in features_to_encode: or_res = encode_and_bind(or_res, feature) for feature in or_res.columns: if any(or_res[feature]) == False: or_res.drop(feature, axis=1, inplace=True) Ta có bảng liệu với 289 trường liệu (bao gồm trường output “Giá”): Nhắc đến xử lý liệu, không nhắc đến thống kê, tiến hành kiểm tra thử trường liệu có giá trị liên tục “Diện tích” “Số phịng ngủ” Theo quan sát, liệu phân bố không Điều ảnh hưởng lớn cho việc huấn luyện mô hình Có nhiều cách để chuẩn hóa liệu, cơng thức chuẩn hóa liệu lựa chọn Kiểm tra lại có phân bố tốt nhiều Cuối cùng, thay trường liệu “Giá/m2” thành trường liệu “Giá” với công thức “Giá = Giá/m2 * Diện tích” giá trị mà toán hướng đến Code: Nguyễn Lương Đức - E17CQCN01-B 29 Đồ án tốt nghiệp đại học Chương Cài đặt ứng dụng res = or_res.copy() res['Giá'] = res['Giá/m2'] * res['Diện tích'] * 1e6 res['Số phịng ngủ'] = np.log1p(res['Số phịng ngủ']) res['Diện tích'] = np.log1p(res['Diện tích']) res.drop('Giá/m2', axis=1, inplace=True) Output cuối cùng: Hình 3.5 Dữ liệu sau xử lý 3.1.3 Huấn luyện mơ hình dự đốn giá Train_test_split Bước đầu tiên, chia tập liệu thành tập liệu tập liệu cho việc huấn luyện tập liệu cho việc kiểm chứng với tỉ lệ 75% cho liệu để huấn luyện 25% cho liệu để kiểm chứng Code: from sklearn import preprocessing from sklearn.model_selection import train_test_split X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.25) RidgeCV Code: from sklearn.model_selection import KFold from sklearn.linear_model import RidgeCV ridge_alphas = [1e-15, 1e-10, 1e-8, 9e-4, 7e-4, 5e-4, 3e-4, 1e-4, 1e-3, 5e-2, 1e-2, 0.1, 0.3, 1, 3, 5, 10, 15, 18, 20, 30, 50, 75, 100] Nguyễn Lương Đức - E17CQCN01-B 30 Đồ án tốt nghiệp đại học Chương Cài đặt ứng dụng kf = KFold(n_splits=15, random_state=42, shuffle=True) ridge = RidgeCV(ridge_alphas, cv=kf) ridge.fit(X_train, Y_train) Giải thích tham số: • KFold: o n_splits: Số lượng tập liệu chia o random_state: Nếu tham số gán giá trị giống mỗi lần gọi model tập liệu sinh (một cách ngẫu nhiên) từ tập liệu ban đầu giống o shuffle: Xáo trộn liệu trước chia thành tập liệu • RidgeCV: o ridge_alphas (arrays): Các giá trị learning rate o cv: Chiến thuật xếp cross – validation RandomForestRegressor Code: from sklearn.ensemble import RandomForestRegressor rf = RandomForestRegressor(n_estimators=2000, criterion='absolute_error', max_depth=5, min_samples_split=10, min_samples_leaf=15, max_features=None, n_jobs=-1, random_state=42) rf.fit(X_train, Y_train) Giải thích tham số: • n_estimators: Số lượng decision trees (base models) Mặc định 100 (đối với phiên scikit-learn từ 0.22) 10 (đối với phiên < 0.22) • criterion: Chỉ hàm loss function sử dụng để định hướng mỗi node tree Tham số nhận giá trị {"squared_error", "absolute_error", “poisson”} Giá trị mặc định "squared_error" Nguyễn Lương Đức - E17CQCN01-B 31 Đồ án tốt nghiệp đại học Chương Cài đặt ứng dụng • max_features: Số lượng features sử dụng mỗi node để tìm đường Một số giá trị thường sử dụng là: o sqrt: max_features = sqrt(n_features) o log2: max_features = log2(n_features) o auto/None: max_features = n_features Đây giá trị mặc định • max_depth: Độ sâu mỗi tree Mặc định, nodes mở rộng tận tất leaves chứa min_samples_split mẫu (samples) • min_sample_split: Số lượng mẫu tối thiểu mỗi leaf node để tiếp tục mở rộng tree Giá trị mặc định • min_samples_leaf: Số lượng mẫu tối thiểu mỗi leaf node Mặc định • max_leaf_nodes: Số lượng leaf node tối đa mỗi tree Giá trị mặc định khơng có giới hạn số lượng • n_jobs: Số lượng jobs chạy song song Mặc định Gán giá trị -1 để sử dụng tất core hệ thống • random_state: Nếu tham số gán giá trị giống mỗi lần gọi model tập liệu sinh (một cách ngẫu nhiên) từ tập liệu ban đầu giống GradientBoostingRegressor Code: from sklearn.ensemble import GradientBoostingRegressor gbr = GradientBoostingRegressor(n_estimators=2000, learning_rate=0.2, max_depth=5, min_samples_leaf=15, min_samples_split=10, loss='squared_error', random_state=42) gbr.fit(X_train, Y_train) Giải thích tham số: • learning_rate: Tỉ lệ thu hẹp tham gia thuật tốn • min_sample_split: Số lượng mẫu tối thiểu mỗi leaf node để tiếp tục mở rộng tree Giá trị mặc định • min_samples_leaf: Số lượng mẫu tối thiểu mỗi leaf node Mặc định Nguyễn Lương Đức - E17CQCN01-B 32 Đồ án tốt nghiệp đại học Chương Cài đặt ứng dụng • max_depth: Độ sâu mỗi tree Nên xem xét tham số tuning model Giá trị mặc định • loss: Hàm loss cần tối ưu hố • max_features: Số lượng tối đa features xem xét tìm đường mở rộng tree Những features chọn ngẫu nhiên XGBoost Code: import xgboost param_init = { "max_depth": 5, "n_estimators": 2000, "learning_rate": 0.2, "colsample_bytree": 1, "reg_lambda": 0.5, "seed": 42, "booster": "gbtree" } param_fit = { "eval_metric": "rmse", "early_stopping_rounds": 100, "verbose": 100, "eval_set": [(X_test, Y_test)] } xgb_model = xgboost.XGBRegressor(**param_init) xgb_model.fit(X_train, Y_train, **param_fit) Giải thích tham số: • param_init (XGBRegressor): o colsample_bytree: Tương tự max_features o reg_lambda: Hệ số L2 regularization o seed: Tương tự random_state o booster: Mơ hình boosting, mặc định “gbtree”- Gradient Boosting Tree • param_fit: o eval_metric: Chiến thuật đánh giá loss Nguyễn Lương Đức - E17CQCN01-B 33 Đồ án tốt nghiệp đại học Chương Cài đặt ứng dụng o early_stopping_rounds: Số lần train tối đa giá trị loss không giảm Khi model kết thúc q trình train lưu trọng số weights giá trị loss thấp o verbose: Khi nhập integer đây, model hiển thị loss sau số vòng tương ứng Phù hợp cho việc quan sát trình fitting model o eval_set: Tập liệu cho việc đánh giá Artificial Neural Network Code: import keras from keras.layers import Dropout, Dense from keras import Sequential from tensorflow.keras.optimizers import SGD from tensorflow.keras.layers import BatchNormalization from keras.initializers import he_normal model = Sequential() model.add(Dense(286, activation='tanh', kernel_initializer=he_normal(seed=None), input_dim=285)) model.add(Dense(180, kernel_initializer=he_normal(seed=None), activation='tanh')) model.add(Dropout(0.1)) model.add(Dense(150, kernel_initializer=he_normal(seed=None), activation='tanh')) model.add(Dropout(0.1)) model.add(BatchNormalization()) model.add(Dense(100, kernel_initializer=he_normal(seed=None), activation='tanh')) model.add(Dense(60, kernel_initializer=he_normal(seed=None), activation='relu')) model.add(BatchNormalization()) model.add(Dense(20, kernel_initializer=he_normal(seed=None), Nguyễn Lương Đức - E17CQCN01-B 34 Đồ án tốt nghiệp đại học Chương Cài đặt ứng dụng activation='relu')) model.add(BatchNormalization()) model.add(Dense(1, kernel_initializer=he_normal(seed=None), activation='elu')) model.compile(optimizer=SGD(lr=0.05), loss='mae') early_stop = keras.callbacks.EarlyStopping(monitor='val_loss', patience=50) history = model.fit(X_train, Y_train, epochs=500, validation_data=(X_test, Y_test)) Giải thích tham số: • Dense: o input_dim: Số chiều liệu (trường liệu/cột) input (chỉ dùng cho lớp mạng đầu tiên) o kernel_initializer: Chiến thuật khởi tạo trọng số weights ngẫu nhiên o activation: Hàm activation • model.compile: o optimizer: Hàm tối ưu cho việc tính tốn lan truyền ngược • EarlyStopping: o monitor: Hàm loss để hiển thị o patience: Số lần train tối đa giá trị loss không giảm Khi model kết thúc q trình train lưu trọng số weights giá trị loss thấp Nguyễn Lương Đức - E17CQCN01-B 35 Đồ án tốt nghiệp đại học Chương Cài đặt ứng dụng 3.2 Cài đặt ứng dụng Hình 3.6 Mơ hình thiết kế ứng dụng Sau thu thập liệu từ trang chotot.vn, liệu thơ phân tích thu liệu chuẩn hóa Phần giao diện người dùng kết nối đến liệu qua API gateway 3.2.1 Front-end Đồ án sử dụng công cụ để xây dựng web: HTML, CSS, JS Để phục vụ thao tác với liệu hiển thị liệu, phần front-end kết nối với back-end qua API Hình 3.7: Trang Giá nhà trung bình theo quận Nguyễn Lương Đức - E17CQCN01-B 36 Đồ án tốt nghiệp đại học Chương Cài đặt ứng dụng Hình 3.8 Trang Dự đốn giá nhà 3.2.2 Cơ sở liệu Khi tương tác với trang web, người dùng cần lựa chọn input cho tốn ví dụ quận, phường, số phịng ngủ, diện tích, … Đồ án thiết kế sở liệu để lưu trữ trường quận, phường để tương tác cho kết lựa chọn xác Vì khơng phải database lớn, nên phương án lựa chọn tối ưu MongoDB MongoDB sở liệu hướng tài liệu (document), liệu lưu trữ document kiểu JSON thay dạng bảng sở liệu quan hệ nên truy vấn nhanh Thậm chí với đặc điểm lưu trữ dạng document kiểu JSON thiết kế API cũng thuận lợi lớn 3.2.3 API Sau cài đặt mơ hình lựa chọn ANN mơ hình cuối cùng, đồ án lưu lại mơ hình trọng số tốt dạng model.h5 weight.h5 Để đưa liệu đoán lên trang web, đồ án sử dụng Flask làm framework để thiết kế API Code: from flask import Flask, jsonify, request from flask_cors import CORS import numpy as np from tensorflow.keras.models import load_model from tensorflow.keras.initializers import he_normal import joblib import pandas as pd import math import json import time Nguyễn Lương Đức - E17CQCN01-B 37 Đồ án tốt nghiệp đại học Chương Cài đặt ứng dụng import requests app = Flask( name ) CORS(app) model = load_model('lib/model.h5') model.load_weights('lib/weight.h5') df = pd.read_csv('lib/res.csv') @app.route('/predict', methods=['POST']) def predict(): try: data = request.json raw_input_data = pd.DataFrame([[0] * 285], columns=df.drop([df.columns[0], 'Giá'], axis=1).columns) for area in raw_input_data.columns[3:28]: if data['districtId'] == area: raw_input_data[area] = for ward in raw_input_data.columns[28:280]: if data['wardId'] == ward: raw_input_data[ward] = for house_type in raw_input_data.columns[280::]: if data['type'] == house_type: raw_input_data[house_type] = raw_input_data['Diện tích'] = math.log1p(data['area']) raw_input_data['Số phịng ngủ'] = math.log1p(data['bedroom']) prediction = model.predict(raw_input_data) predicted_price = math.expm1(prediction.flatten()[0]) response = jsonify({'result': str(predicted_price)}) return response except Exception as error: error = str(error) return error if name == ' main ': app.run(debug=True) Ví dụ nhập input với liệu sau: data = {'Địa chỉ': '4, Đường Kim Giang, Phường Đại Kim, Quận Hồng Mai, Hà Nội'} kết trả về: {'result': '1543541422'} Nguyễn Lương Đức - E17CQCN01-B 38 Đồ án tốt nghiệp đại học Chương Cài đặt ứng dụng Vậy có API để đưa vào sản phẩm 3.3 Đánh giá kết thu Có nhiều metrics để đánh giá model, ví dụ hàm loss RSME, MSE, MAE, … chí với tốn lớn, nhà nghiên cứu kỹ sư thiết kế metrics riêng Vì tốn dự đốn giá nhà cũng việc đưa kết trực quan cho người dùng đồ án lựa chọn metrics MAE hay gọi sai số tuyệt đối hay độ xác MAE = n ∑ni=1 |xi − x| (3.1) 3.3.1 RidgeCV Hình 3.9 Kết mơ hình RidgeCV RidgeCV mơ hình end–to–end, có nghĩa mơ hình huấn luyện tồn liệu lần nhất, có chế lựa chọn thông số tốt chưa kết cao 3.3.2 Random Forest Hình 3.10 Kết mơ hình Random Forest Với Random Forest, mơ hình Ensemble Learning hoạt động theo chế bagging, chia tập liệu thành bag huấn luyện độc lập bag kết hợp kết Vì liệu đầu vào khơng thật tốt nên việc hiệu thuật tốn bagging khó mà cao Ngồi ra, thuật tốn khơng kèm kỹ thuật tối ưu nên việc huấn luyện tốn nhiều thời gian (khoảng 13 phút) 3.3.3 Gradient Boosting Nguyễn Lương Đức - E17CQCN01-B 39 Đồ án tốt nghiệp đại học Chương Cài đặt ứng dụng Hình 3.11 Kết mơ hình Gradient Boosting Gradient Boosting có kết bật tốn này, đề cập trên, bagging khó vượt qua thuật toán boosting boosting huấn luyện mơ hình theo cách tuần tự, bị ảnh hưởng yếu tố liệu 3.3.4 XGBoost Hình 3.12 Kết mơ hình XGBoost XGBoost cải thiện hiệu cũng tránh trường hợp overfitting underfitting Với liệu không thực tốt, kết XGBoost so với Gradient Boosting chênh không nhiều Bù lại hiệu suất XGBoost hồn tồn vượt trội, thơng số model XGBoost tốn có phút để huấn luyện so với phút Gradient Boosting 3.3.5 ANN Hình 3.13 Kết mơ hình ANN Cuối mơ hình ANN cho kết vượt trội Về lý thuyết điều dễ hiểu mơ hình ANN phức tạp nhiều với layer khác BatchNormalization hay Dropout, sử dụng activate function sau mỗi hidden layer Cũng mà việc huấn luyện cũng tốn đáng kể thời gian hơn, mà thời gian huấn luyện lên đến 42 phút cho 500 epochs 3.4 Kết luận Chương trình bày cách cài đặt ứng dụng mơ hình học máy giải toán xây dựng ứng dụng dự đoán giá sử dụng mơ hình học máy có sử dụng mơ hình RidgeCV, Random Forest, Gradient Boosting mơ hình Mạng Nơ-ron Phần cuối chương, đồ án kết đạt từng mơ hình học máy Kết cho thấy hầu hết mơ hình huấn luyện cho độ xác khoảng 80% Mơ hình mạng Nơ-ron đạt kết kết tốt với độ xác 81% Nguyễn Lương Đức - E17CQCN01-B 40 Đồ án tốt nghiệp đại học Kết luận KẾT LUẬN Đồ án “Xây dựng ứng dụng dự đoán giá nhà sử dụng học máy” tài liệu tham khảo hữu ích cho sinh viên có đam mê nghiên cứu khoa học, muốn làm sản phẩm có tính ứng dụng thực tế Đồ án trình bày chi tiết kiến thức tối thiểu người phát triển cần phải có trình bày bước để xây dựng ứng dụng Ứng dụng hoàn thành thành với mơ hình dự đốn giá nhà sử dụng học máy đạt độ xác 81% Vấn đề chưa giải quyết, đề xuất giải quyết: - Thu thập huấn luyện liệu từ nhiều trang bất động sản khác với lịch sử liệu lâu nhằm tăng độ xác mơ hình - Thử nghiệm nhóm người để đánh giá kết quả, mức độ phù hợp ứng dụng việc sử dụng thực tế Quá trình thực đề tài gặp khơng khó khăn từ việc lên ý tưởng, hướng giải vấn đề đến cách ứng dụng công nghệ , Tuy nhiên nhờ giúp đỡ nhiệt tình từ TS Nguyễn Văn Thủy, đồ án hoàn thành Thầy hướng dẫn, truyền đạt kiến thức khoa học phục vụ cho đề tài giải đáp vướng mắc trình thực Một lần xin trân trọng cảm ơn thầy! Nguyễn Lương Đức - E17CQCN01-B 41 Đồ án tốt nghiệp đại học Tài liệu tham khảo TÀI LIỆU THAM KHẢO Tiếng Việt: Vũ Hữu Tiệp, Machine Learning bản, 2018 Danh mục website tham khảo: mogi.vn cenhomes.vn dinhgianhadat.vn ibm.com/cloud/learn kaggle.com machinelearningcoban.com machinelearningmastery.com towardsdatascience.com viblo.asia Nguyễn Lương Đức - E17CQCN01-B 42