XÂY DỰNG THUẬT TOÁN SVM TRONG DỰ BÁO BỆNH THẬN

Một phần của tài liệu Nghiên cứu các giải thuật máy học và áp dụng vào bài toán dự đoán bệnh thận tại bệnh viện đa khoa tỉnh điện biên dùng ngôn ngữ python (Trang 83 - 87)

Phần này sẽ cài đặt mô hình support vector machine cho bài toán dự báo bệnh Thận. Để xem sự ảnh hưởng của các tham số như đã trình bày trong phần trước, Tôi có thay đổi các giá trị của: C, kernel, và gamma.

from pandas import read_csv

import os

duongDan = os.getcwd() + '\data\Kedney_final.csv'

tenCot = ['age','sex','WBC','LY','NE','RBC','HGB',

'HCT','PLT','Na','K','Protein','Albumin','Ure','Creatinin','absence’] duLieu = read_csv(duongDan, names=tenCot)

from sklearn import preprocessing maTran = duLieu.values

74 X = maTran[:,:-1] y = maTran[:,-1] dieuChinh = preprocessing.MinMaxScaler(feature_range= (0,1)) X_dieuChinh = dieuChinh.fit_transform(X) #######################################################

from sklearn import svm

from sklearn.model_selection import train_test_split

from sklearn import metrics

arrC = [1,10,100,500,1000,10000,100000]

for i in arrC:

# tách dữ liệu ra thành 2 tập: huấn luyện (training) và kiểm tra (test)

X_train, X_test, y_train, y_test = train_test_split(X_dieuChinh, y, test_size=0.2, random_state=1)

# huấn luyện mô hình trên tâp huấn luyện

clf = svm.SVC(C= i, gamma= 'auto',

kernel='poly',cache_size=200,class_weight=None,

coef0=0.0,decision_function_shape=None,degree=3, max_iter=-1,

probability=False,random_state=None,shrinking=True,tol=0.001,verbose=False) clf.fit(X_train, y_train)

# dự đoán trên tập kiểm tra

y_pred = clf.predict(X_test)

# so sánh giá trị thực tế (y_test) với giá trị dự đoán của mô hình (y_pred)

print('svm.SVC - C = {0}, kernel = \'poly\',: {1:.4f}'.format(i, metrics.accuracy_score(y_test, y_pred)*100))

Chương trình 3. 5: Chương trình thực thi mô hình SVM với sự thay đổi của tham số C

Chương trình 3.5 thực thi mô hình SVM với các giá trị của tham số C thay đổi, với cùng kernel = ‘poly’ và tham số gamma = ‘auto’, kết quả sẽ cho:

svm.SVC - C = 1, kernel = 'poly',: 56.7123 svm.SVC - C = 10, kernel = 'poly',: 91.6438 svm.SVC - C = 100, kernel = 'poly',: 93.5616 svm.SVC - C = 500, kernel = 'poly',: 94.2466 svm.SVC - C = 1000, kernel = 'poly',: 94.6575 svm.SVC - C = 10000, kernel = 'poly',: 95.6164 svm.SVC - C = 100000, kernel = 'poly',: 95.3425

Tương tự, Tôi xây dựng chương trình thay đổi cho giá trị kernel = ‘poly’, ‘rbf’, ‘sigmoid’. Bảng 3.3 cho kết quả tổng hợp của mô hình SVM dự báo bệnh thận. Cột cuối cùng chỉ ra giá trị trung bình ứng với mỗi kernel. Chúng ta thấy rằng, kernel = ‘linear’ cho giá trị trung bình cao nhất, theo sau lần lượt là kernel = ‘rbf’, kernel = ‘poly’, và kernel = ‘sigmoid’. Hàng cuối cùng chỉ giá trị trung bình ứng với mỗi C.

75

Như chúng ta thấy, tại giá trị C = 1000 cho dự đoán chính xác hơn cả, mặc dù nó hơn giá trị C = 500 không đáng kể. Tiếp đến, các giá trị dự đoán chính xác lần lượt giảm dần với C = 10000, và C = 100000.

Bảng 3. 3:Kết quả tổng hợp của mô hình SVM cho bài toán dự báo bệnh thận ứng với các giá trị khác nhau của 2 tham số C và kernel (adsbygoogle = window.adsbygoogle || []).push({});

kernel C = 1 C = 10 C = 100 C = 500 C = 1000 C = 10000 C = 100000 Trung bình linear 93,0137 94,3836 94,2466 94,2466 94,2466 94,2466 94,3836 94,10961 poly 56,7123 91,6438 93,5616 94,2466 94,6575 95,6164 95,3425 88,82581 rbf 92,8767 93,2877 94,5205 95,2055 95,8904 95,4795 95,7534 94,71624 sigmoid 92,1918 92,3288 92,0548 89,3151 88,6301 88,3562 88,2192 85,87086 Trung bình 83,69863 92,91098 93,59588 85,75345 93,35615 93,42468 93,42467

Từ Bảng 3.3, chúng ta thấy giá trị tốt nhất của mô hình SVM cho bài toán dự báo bệnh thận là 95.8904, ứng với kernel = ‘rbf.

Trong Chương trình 3.5 tham số gamma = ‘auto’. Trong scikit-learn, giá trị ‘auto’ của gamma được xác định bằng: gamma = 1

𝑛_𝑓𝑒𝑎𝑡𝑢𝑟𝑒𝑠, trong bài toán của chúng ta n_features, số đặc tính bằng 15, tức là gamma =′ 𝑎𝑢𝑡𝑜′ =151 =0.0625. Trong chương trình của Tôi sẽ thay đổi quanh giá trị tự động này.

from pandas import read_csv

import os

duongDan = os.getcwd() + '\data\Kedney_final.csv'

tenCot =

['age','sex','WBC','LY','NE','RBC','HGB','HCT','PLT','Na','K','Protein','Albumi n','Ure','Creatinin','absence']

duLieu = read_csv(duongDan, names=tenCot)

from sklearn import preprocessing maTran = duLieu.values

X = maTran[:,:-1] y = maTran[:,-1]

76

dieuChinh = preprocessing.MinMaxScaler(feature_range= (0,1)) X_dieuChinh = dieuChinh.fit_transform(X)

# Chuong trinh 3.6: Chuong trinh thuc thi mo hinh SVM voi su thay doi cua tham so Gama

from sklearn import svm

from sklearn.model_selection import train_test_split

from sklearn import metrics

for i in range(1,11):

# Tac du lieu ra thanh 2 tap: Huan luyen (Training) va kiem tra (test)

X_train, X_test, y_train, y_test = train_test_split(X_dieuChinh, y,

test_size=0.20, random_state=1)

# Huan luyen mo hinh tren tap huan luyen

clf = svm.SVC(C= 10000, gamma= 0.120*i, kernel='rbf',cache_size=200,class_weight=None, coef0=0.0,decision_function_shape=None,degree=3, max_iter=-1, probability=False,random_state=None,shrinking=True,tol=0.001,verbose=False) clf.fit(X_train, y_train)

# Du doan tren tap kiem tra

y_pred = clf.predict(X_test)

# So sanh gia tri thuc te (y_test) voi gia tri du doan cua mo hinh (y_pred)

print('svm.SVC - C = 10000, kernel = \'rbf\',(gamma = {0:.3f}):

{1:.4f}'.format(i*0.120, metrics.accuracy_score(y_test, y_pred)*100))

Chương trình 3. 6: Chương trình thực thi mô hình SVM với sự thay đổi của tham số gamma (adsbygoogle = window.adsbygoogle || []).push({});

Chương trình 3.6 thực thi mô hình SVM với các giá trị của tham số gamma thay đổi, với cùng kernel = ‘rbf’ và tham số C = 100000, kết quả sẽ cho:

svm.SVC - C = 10000, kernel = 'rbf',(gamma = 0.120): 95.8904 svm.SVC - C = 10000, kernel = 'rbf',(gamma = 0.240): 95.8904 svm.SVC - C = 10000, kernel = 'rbf',(gamma = 0.360): 95.7534 svm.SVC - C = 10000, kernel = 'rbf',(gamma = 0.480): 96.0274 svm.SVC - C = 10000, kernel = 'rbf',(gamma = 0.600): 96.1644 svm.SVC - C = 10000, kernel = 'rbf',(gamma = 0.720): 95.7534 svm.SVC - C = 10000, kernel = 'rbf',(gamma = 0.840): 95.6164 svm.SVC - C = 10000, kernel = 'rbf',(gamma = 0.960): 95.2055 svm.SVC - C = 10000, kernel = 'rbf',(gamma = 1.080): 95.7534 svm.SVC - C = 10000, kernel = 'rbf',(gamma = 1.200): 96.0274

Chú ý rằng tham số gamma chỉ có tác dụng đối với kernel = ‘rbf’. Với những kernel khác, kết quả của chương trình không thay đổi khi thay đổi gamma.

77

Một phần của tài liệu Nghiên cứu các giải thuật máy học và áp dụng vào bài toán dự đoán bệnh thận tại bệnh viện đa khoa tỉnh điện biên dùng ngôn ngữ python (Trang 83 - 87)