Báo Cáo Nhập Môn Học Máy Ứng Dụng Thuật Toán Hồi Quy Tuyến Tính Để Chẩn Đoán Xơ Vữa Động Mạch ( FULL CODE cài đặt trong báo cáo và cài với Python ) Chất lượng hơn số lượng chắc chắn bảo đảm bạn sẽ hài lòng https:sharecs.net
TRƯỜNG ĐẠI HỌC ĐIỆN LỰC KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO MÔN HỌC NHẬP MÔN HỌC MÁY ĐỀ TÀI ỨNG DỤNG THUẬT TỐN HỒI QUY TUYẾN TÍNH ĐỂ CHẨN ĐOÁN XƠ VỮA ĐỘNG MẠCH Sinh viên thực : NGUYỄN QUỐC TUẤN : NGUYỄN HỒNG KỲ : LÊ CÔNG QUYỀN : TRỊNH THÀNH ĐẠT Giảng viên hướng dẫn : NGÔ TRƯỜNG GIANG Ngành : CÔNG NGHỆ THÔNG TIN Chuyên ngành : CÔNG NGHỆ PHẦN MỀM Lớp : D12 – CNPM2 Niên Khóa : 2017-2022 Hà Nội, tháng 06 năm 2020 PHIẾU CHẤM ĐIỂM ST T Họ Tên sinh viên Nguyễn Quốc Tuấn Nguyễn Hồng Kỳ Lê Công Quyền Trịnh Thành Đạt Giảng viên chấm thi Giảng viên chấm thi 1: Giảng viên chấm thi 2: Nội dung thực Chữ ký Điểm Ghi Chữ ký MỤC LỤC LỜI CẢM ƠN LỜI MỞ ĐẦU CHƯƠNG : THUẬT TOÁN HỒI QUY TUYẾN TÍNH TRONG HỌC MÁY 1.1 Giới thiệu .8 1.2 Phân tích tốn học 1.2.1 Dạng Linear Regression 1.2.2 Hàm mát 1.2.3 Tìm nghiệm mơ hình hồi quy tuyến tính 1.2.4 Mức độ lỗi mơ hình hồi quy tuyến tính 10 CHƯƠNG : ÁP DỤNG THUẬT TOÁN 11 2.1 Mơ tả tốn .11 2.2 Xây dựng liệu .11 2.3 Áp dụng thuật toán vào toán .13 2.3.2 Kiểm nghiệm thuật toán 15 2.4 Thực nghiệm với thư viện scikit-learn python 16 2.4.1 Giới thiệu thư viện scikit-learn 16 2.4.2 Các phương thức biến class LinearRegression 16 2.4.3 Cài đặt 17 3.4.4 Kiểm nghiệm 19 KẾT LUẬN 22 LIỆT KÊ CHỮ VIẾT TẮT BMI Body Mass Index BEDAYTM HA Chỉ số khối thể Bề dày thành mạch SBP Huyết áp tối đa mmHg Đơn vị milimet thủy ngân mmol/l Milimol lit Mm Milimet DANH MỤC HÌNH ẢNH Trang Hình 1: Các thuộc tính liệu 12 Hình 2: Kết chạy thuật tốn 15 Hình 3: Bảng biểu so sánh giá trị Y dự đoán Y thực tế 19 Hình 4: Kết huấn luyện thư biện sklearn 20 LỜI CẢM ƠN Trong lời báo cáo môn học “ Nhập môn học máy ” , chúng em muốn gửi lời cám ơn biết ơn chân thành tới tất người hỗ trợ, giúp đỡ chúng em kiến thức tinh thần trình thực báo cáo Em xin chân thành gửi lời cảm ơn tới thầy cô giáo Trường Đại học Điện Lực nói chung thầy giáo Khoa Cơng nghệ thơng tin nói riêng tận tình giảng dạy, truyền đạt cho em kiến thức kinh nghiệm quý báu suốt trình học tập Đặc biệt, em xin gửi lời cảm ơn đến Giáo viên hướng dẫn Ngô Trường Giang, giảng viên Khoa Công nghệ thông tin - Trường Đại học Điện Lực Thầy tận tình theo sát giúp đỡ, trực tiếp bảo, hướng dẫn suốt trình nghiên cứu học tập chúng em Trong thời gian học tập với thầy, nhóm em khơng tiếp thu thêm nhiều kiến thức bổ ích mà học tập tinh thần làm việc, thái độ nghiên cứu khoa học nghiêm túc, hiệu Đây điều cần thiết cho chúng em trình học tập công tác sau Do thời gian thực có hạn kiến thức nhiều hạn chế nên làm em chắn không tránh khỏi thiếu sót định Em mong nhận ý kiến đóng góp thầy giáo bạn để em có thêm kinh nghiệm tiếp tục hồn thiện đồ án Em xin chân thành cảm ơn! GVHD: Ngô Trường Giang LỜI MỞ ĐẦU Cơng nghệ thơng tin (CNTT) ngày có vai trò quan trọng sống ngày Việc ứng dụng CNTT vào lĩnh vực đời sống giúp cơng việc tiến hành nhanh chóng hiệu Có nhiều cơng việc phát triển song song với phát triển CNTT, số phân tích chuẩn đốn liệu – big data, hướng mang lại hiệu lớn Nhóm chúng em chọn đề tài “ Ứng dụng thuật toán Linear Regresion để chẩn đoán xơ vữa động mạch (độ dày thành mạch)” nhằm tìm hiểu sâu liệu cách khai thác sử dụng hiệu quả, từ viết ứng dụng cụ thể thử nghiệm làm sở củng cố kiến thức định hướng, kế hoạch xây dựng ứng dụng tương lai GVHD: Ngô Trường Giang CHƯƠNG : THUẬT TỐN HỒI QUY TUYẾN TÍNH TRONG HỌC MÁY 1.1 Giới thiệu Hồi quy tuyến tính la phương pháp thống kê để hồi quy liệu với biến phụ thuộc có giá trị liên tục biến độc lập có hai giá trị liên tục giá trị phân loại Hồi quy tuyến tính hai dạng lớn học có giám sát (supervised learning) dựa tập liệu mẫu Nói cách khác "Hồi quy tuyến tính" phương pháp để dự đoán biến phụ thuộc (Y) dựa giá trị biến độc lập (X) Nó sử dụng cho trường hợp muốn dự đốn số lượng liên tục Ví dụ, dự đốn giao thơng cửa hàng bán lẻ, dự đoán thời gian người dùng dừng lại trang số trang truy cập vào website v.v 1.2 Phân tích tốn học 1.2.1 Dạng Linear Regression Hồi quy tuyến tính có phương trình đạng : F(x) = w0 + w1x1 + w2x2 + … + wnxn (1) Trong đó, w1, w2, wn, w0 số, w0 gọi bias hay sai số Mối quan hệ y f(x) bên mối quan hệ tuyến tính (linear) Bài toán làm tốn thuộc loại regression Bài tốn tìm hệ số tối ưu { w1, w2, wn, w0 } gọi tốn Linear Regression (Hồi quy tuyến tính) Trong phương trình (1) đặt w = [w0, w1, w2, wn]T vecter (cột) hệ số cần phải tối ưu = [1, x1, x2, xn] (đọc x bar tiếng Anh) vector (hàng) liệu đầu vào mở rộng Số đầu thêm vào để phép tính đơn giản thuận tiện cho việc tính tốn Khi đó, phương trình (1) viết lại dạng: y GVHD: Ngơ Trường Giang ( vecter hàng) 1.2.2 Hàm mát Máy học từ giá trị trung bình hàm mát Đây phương pháp đánh giá độ hiệu thuật tốn liệu cho trước Nếu kết dự đoán chênh lệch nhiều so với kết thực tế, hàm mát số lớn Điều tương tự xảy với tất cặp (x i, yi), i = 1, 2, 3, …, N với N số lượng liệu quan sát Để hàm mát nhỏ tổng sai số nhỏ tương đương với việc tìm w để hàm số sau đạt giá trị nhỏ nhất: J(w) = (2) Hàm số J(w) gọi hàm mát (loss function) tốn Linear Regression Chúng ta ln mong muốn mát (sai số) nhỏ nhất, điều đồng nghĩa với việc tìm vector hệ số w cho giá trị hàm mát nhỏ tốt Trước tìm lời giải, đơn giản hóa phép tốn phương trình hàm mát (2) Đặt vector cột chứa tất output training data; = ma trận liệu đầu vào (mở rộng) mà hàng điểm liệu 1.2.3 Tìm nghiệm mơ hình hồi quy tuyến tính Để tìm nghiệm cho tốn tối ưu thường giải phương trình đạo hàm J(w) = Đạo hàm theo w hàm mát là: Phương trình đạo hàm tương đương với: Đặt b ( ) ta có : A.W = b (với I ma trận đơn vị) nghiệm mơ hình hồi quy tuyến tính GVHD: Ngơ Trường Giang Trên thực tế A khơng khả nghịch nên ta dùng ma trận giả nghịch đảo nên ta có W = hay W = Đây nghiệm tổng quát hồi quy tuyến tính 1.2.4 Mức độ lỗi mơ hình hồi quy tuyến tính Ta có cơng thức tính mức độ lỗi mơ sau : MSE = Với mức độ lỗi mơ hình cho ta biết mức độ học mơ hình GVHD: Ngơ Trường Giang 10 CHƯƠNG : ÁP DỤNG THUẬT TOÁN 2.1 Mơ tả tốn Trong y sinh học, thường có nhiều yếu tố khác dẫn đến tượng Ví dụ tượng xơ vữa động mạch khơng lượng cholesterol máu mà nhiều yếu tố khác di truyền, chủng tộc, tiền sử mắc bệnh tim mạch, tuổi, giới, BMI, tăng huyết áp, đái tháo đường,… Vì cần phải có mơ hình hồi quy tuyến tính đa biến Trong đề tài tài chúng em không đề cập yếu tố di truyền, chủng tộc, giới, mắc bệnh tim mạch mà lưu ý đến biến số như: tuổi, cholesterol, glucose, huyết áp tâm thu BMI Khi mơ hình hồi quy tuyến tính đa biến với yếu tố ( x1=tuổi, x2 = cholesterol, x3 = glucose, x4 = huyết áp, x5 = BMI ) sau: Bề dày TM = w0 + w1(tuổi) + w2(cholesterol) + w3(glucose) + w4(huyết áp) + w5(BMI) 2.2 Xây dựng liệu Bộ liệu xây dựng liệu xây dựng bệnh viện trình khảo sát xơ vữa động mạch 100 bệnh nhân khác Bộ liệu gồm có thuộc tính bao gồm: tuổi, số BMI, số huyết áp tối đa (mmHg), nồng độ glucose máu (mmol/l), nồng dộ cholesterol máu (mmol/l) bề dày thành mạch (mm) Bộ liệu chia thành phần 80% liệu làm liệu huấn luyện mơ hình, 20% lại làm liệu thử nghiệm độ xác mơ hình Dữ liệu độ dày thành mạch làm biến mục tiêu, liệu lại bao gồm (tuổi, BMI, nồng độ glucose máu, nồng độ cholesterol máu) làm biến giải thích GVHD: Ngơ Trường Giang 11 Thuộc tính Ý Nghĩa Tuổi Tuổi BMI Chỉ số sức khỏe HA Huyết áp tối đa Glucose Nồng độ Glucose Cholesterol Nồng độ Cholesterol Bedaytm Bề dày thành mạch Hình 1: Các thuộc tính liệu Hình 40 tập liệu đầu dự liệu huấn luyện mơ hình Đánh giá liệu hồn tồn sử dụng cho mơ hình hồi quy tuyến tính chẩn đốn xơ vữa động mạch lý sau: Mối quan hệ biến mục tiêu (Y) biến giải thích (X) tham số Ví dụ Y = WX lần X tăng lên đơn vị Y thêm W đơn vị X, Y có giá trị Các giá trị biến mục tiêu (Y) phải độc lập với Các giá trị biến giải thích (X) khơng có sai số ngẫu nhiên Ví dụ: Giá trị huyết áp tối đa 120 mmHg 120 mmHg không 120 mmHg mmHg 2.3 Áp dụng thuật toán vào toán 2.3.1 Cài đặt thuật toán import numpy as np import pandas as pd from pandas import DataFrame import matplotlib.pyplot as plt import math GVHD: Ngô Trường Giang 12 import sklearn from sklearn.model_selection import train_test_split #Xây dựng hàm tìm hệ số hồi quy def HoiQuyTT(X_train, Y_train): # Xây dựng Xbar one = np.ones((X_train.shape[0], 1)) Xbar = np.concatenate((one, X_train), axis=1) # Các giá trị A, b, At A = np.dot(Xbar.T, Xbar) b = np.dot(Xbar.T, Y_train) At = np.linalg.pinv(A) #Trả hệ số hồi quy W = np.dot(At, b) return W #Xây dựng hàm dự đoán với tập liệu test def KiemTra(W, X_test): _X_test = np.concatenate((np.ones((X_test.shape[0], 1)), X_test), axis=1) Y_pred = np.dot(_X_test, W) return Y_pred #Xây dựng hàm kiểm tra mức độ sai mơ hình def SaiSoMoHinh(Y_pred, Y_test): return np.average((Y_pred - Y_test)**2) #Tiến hành thực nghiệm #Đọc tệp data = pd.read_csv("DuLieuYKhoa.csv", sep=";") data.head print(data) #Lấy dataframe bề dày thành mạch làm biên mục tiêu Y = data['BEDAYTM'].to_numpy() #Lấy datafarame không chứa bề dày thành mạch làm biến giải thích X = data.drop("BEDAYTM", axis = 1) #Phân loại liệu train test X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 30) #Hệ số hồi quy mơ hình print("\nHỆ SỐ HỒI QUY") LB = ['SAI SỐ', 'TUỔI', 'BMI', 'HUYẾT ÁP', 'GLUCOSE', 'CHOLESTEROL'] GVHD: Ngô Trường Giang 13 w_lr = HoiQuyTT(X_train, Y_train) print(pd.DataFrame({"Tên": LB, "Hệ số": w_lr}).sort_values(by='Hệ số')) #Tiến hành dự đoán với tập dự liệu test _X_test = np.concatenate((np.ones((X_test.shape[0], 1)), X_test), axis = 1) Y_pred = np.dot(_X_test, w_lr) print("\n GIÁ TRỊ Y DỰ ĐOÁN") print(Y_pred) #In giá trị y test thực tế để so sánh print("\nGIÁ TRỊ Y THỰC TẾ") print(Y_test) #In giá trị sai số mơ hình #print("\nSAI SỐ MƠ HÌNH") #print(SaiSoMoHinh(Y_pred, Y_test)) GVHD: Ngơ Trường Giang 14 2.3.2 Kiểm nghiệm thuật tốn Hình 2: Kết chạy thuật tốn GVHD: Ngơ Trường Giang 15 Từ kết ta thấy mơ hình cho hệ số hồi quy (w) sai số từ ta suy dạng hồi quy tuyến tính sau: Bề dày TM = -0.177139 + 0.061229 x [cholesterol] + 0.010665 x [tuổi] + 0.005850 x [BMI] + 0.001066 x [Huyết áp] – 0.000634 x [Glucose] Qua hệ số ta thấy nồng độ cholesterol máu số tuổi ảnh hưởng tới bề dày thành mạch vành nguy lớn gây xơ vữa động mạch vành hay nhồi máu tim Tuy nhiên giá trị dự đốn có số giá trị chênh lệch nhiều với giá trị thực tế, nguyên nhân lý giải dự liệu huấn luyện chưa đủ nhiều để huấn luyện mơ hình tối ưu 2.4 Thực nghiệm với thư viện scikit-learn python 2.4.1 Giới thiệu thư viện scikit-learn Scikit-learn (viết tắt sklearn) thư viện mã nguồn mở dành cho học máy - ngành trí tuệ nhân tạo, mạnh mẽ thông dụng với cộng đồng Python, thiết kế NumPy SciPy Scikit-learn chứa hầu hết thuật toán machine learning đại nhất, kèm với documentations, ln cập nhật Trong sklearn có class sklearn.linear_model.LinearRegression có phương thức liên quan tới hồi quy tuyến tính 2.4.2 Các phương thức biến class LinearRegression Sử dụng sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=1) Các biến - fit_intercept: Khơng tính tốn điểm cắt trục tung cài đặt false, mặc định true GVHD: Ngô Trường Giang 16 - normalize: Nếu cài dặt làt true chuẩn hố biến giải thích trước, mặc định false - copy_X: Lưu liệu nhớ chạy, mặc định true - n_jobs: Số job sử dụng tính tốn, -1 dùng hết, mặc định Các thuộc tính class LinearRegression - coef_: Trả hệ số hồi quy - intercept_: Trả sai số Các phương thức - fit(X, y[, sample_weight]): Tiến hành tìm phương trình hồi quy tuyến tính - get_params([deep]): Lấy parameter sử dụng - predict(X): Sử dụng model vừa tạo tiến hành dự đoán - score(X, y[, sample_weight]): Đưa hệ số định R2 Không phải lúc giá trị dự đoán giống vs giá trị thực tế Hệ số định ~ độ xác cao, ~ sai lệch lớn 2.4.3 Cài đặt import numpy as np import pandas as pd import matplotlib.pyplot as plt import sklearn from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split from sklearn import metrics as sq from sklearn import linear_model clf = linear_model.LinearRegression() #Đọc tệp data = pd.read_csv("DuLieuYKhoa.csv", sep=";") data.head GVHD: Ngô Trường Giang 17 #In liệu print(data) #Lấy dataframe bề dày thành mạch làm biên mục tiêu Y = data['BEDAYTM'].to_numpy() #Lấy datafarame không chứa bề dày thành mạch làm biến giải thích X = data.drop("BEDAYTM", axis = 1) #Phân loại liệu train test X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 20) #Tạo model suy đoán clf.fit(X_train, Y_train) #In hệ số hồi quy biến giải thích xếp theo thứ tự tăng dần print("\nHỆ SỐ HỒI QUY") print(pd.DataFrame({"Tên": X_train.columns, "Hệ số": np.abs(clf.coef_)}).sort_values(by='Hệ số')) #In sai số print("\nSAI SỐ") print(clf.intercept_) #print(clf.score()) #Tiến hành dự đoán với liệu test Y_pred = clf.predict(X_test) print("\nGIÁ TRỊ Y DỰ ĐOÁN") print(Y_pred) #In giá trị y test thực tế print("\nGIÁ TRỊ Y THỰC TẾ") print(Y_test) #Kiểm tra mức độ lỗi model (Mean Squared Error) mse = sq.mean_squared_error(Y_test, Y_pred) print("KIỂM TRA MỨC ĐỘ LỖI CỦA MÔ HÌNH") print(mse) #Bảng biểu so sánh giá trị y dự đoán y thực tế plt.scatter(Y_test, Y_pred) plt.xlabel("Giá trị thực tế: $Y_i$") plt.ylabel("Giá trị dự đoán: $\hat{Y}_i$") plt.title("Bảng biểu so sánh $Y_i$ vs $\hat{Y}_i$") plt.show() GVHD: Ngô Trường Giang 18 3.4.4 Kiểm nghiệm Hình 3: Bảng biểu so sánh giá trị Y dự đốn Y thực tế GVHD: Ngơ Trường Giang 19 Hình 4: Kết huấn luyện thư biện sklearn Từ kết ta thấy kết huấn luyện thư viện sklearn phần cài đặt thuật toán tương đồng nhau, có chênh lệch sai số phần thập phân gây tích lũy nhiều sai số cho mơ hình Mơ hình chạy thư GVHD: Ngơ Trường Giang 20 viện sklearn đưa yếu tố ảnh hưởng lớn tới giá trị dự đoán nồng độ cholesterol tuổi GVHD: Ngô Trường Giang 21 KẾT LUẬN Kết đạt : chúng em cài đặt thuật toán sử dụng dụng thư viện scikit-learn q trình học tập Nhưng bên cạnh thuật tốn ưu nhược điểm như: Ưu điểm : Nhanh chóng để mơ hình hóa đặc biệt hữu ích mối quan hệ mơ hình hóa khơng q phức tạp bạn khơng có nhiều liệu Hồi quy tuyến tính đơn giản để hiểu, có giá trị cho định kinh doanh Nhược điểm : Đối với liệu phi tuyến tính, hồi quy đa thức khó khăn để thiết kế, người ta phải có số thơng tin cấu trúc liệu mối quan hệ biến tính Do thời gian kiến thức có hạn nên báo cáo chúng em nhiều sai sót, mong thầy góp ý giúp chúng em hồn thiện báo GVHD: Ngô Trường Giang 22 DANH MỤC TÀI LIỆU THAM KHẢO [ML] Hồi quy tuyến tính : https://dominhhai.github.io/vi/2017/12/mllinear-regression/ Machine Learning bản: https://machinelearningcoban.com/2016/12/28/linearregression/ Phân tích hồi quy tuyến tính đa biến : https://bit.ly/30xi3Vb Schneider A, Hommel G, Blettner M Linear regression analysis: part 14 of a series on evaluation of scientific publications Dtsch Arztebl Int 2010 Nov;107(44):776-82 Tripepi G, Jager KJ, Stel VS, Dekker FW, Zoccali C How to Deal with Continuous and Dichotomic Outcomes in Epidemiological Research: Linear and Logistic Regression Analyses Nephron Clin Pract 2011 Feb 23;118(4):c399- c406 Hồng Trọng Chu Nguyễn Mộng Ngọc, Phân tích liệu nghiên cứu với SPSS Nhà xuất thống kê năm 2005 GVHD: Ngô Trường Giang 23