Một số ứng dụng của SVM trong bài toán phân lớp

Một phần của tài liệu Máy vectơ tựa (support vector machine-SVM) và ứng dụng trong việc xác định tham số độ thấm trong ngành địa chất (Trang 40)

Với kiến thức tổng quan về máy vectơ ựã ựược trình bày, mục này sẽ giới thiệu một số ứng dụng trong thực tiễn sử dụng SVM phân loại hai và nhiều lớp ựược triển khai trên phần mềm MatLab.

1.7.1 ChNn ựoán bAnh ung th. vú b(ng SVM phân loBi hai l/p

Ung thư vú hiện nay là nguyên nhân tử vong hàng ựầu của phụ nữ nhiều nước trên thế giới. đây là chứng ung thư ựược chẩn ựoán là phổ biến và là nguyên nhân thứ hai dẫn ựầu trong những cái chết do ung thư gây ra ở phụ nữ, chỉ ựứng sau ung thư cổ tử cung, hiện nay lại chưa có biện pháp phòng ngừa hiệu quả. Loại ung thư này có một diễn tiến không ai lường trước và có nguy cơ bị di căn cho ựến 20 năm hoặc hơn.

Cách tốt nhất ựể giảm thiểu những cái chết do ung thư dạng này là phát hiện và chữa trị thật sớm. Thông thường, việc tự kiểm tra, chụp X quang hay siêu âm là những phương pháp thông dụng nhất ựể phát hiện sớm các khối u vùng ngực.

Nhưng do hình ảnh thu ựược có cấu trúc phức tạp và những dấu hiệu ban ựầu của bệnh thường biểu hiện không rõ. Do ựó, các chuyên gia chụp X quang có thể khó phát hiện hoặc bỏ sót một số thông tin biểu hiện việc thương tổn trên ảnh chụp.

Vì vậy những kỹ thuật hình ảnh cho ngực rất quan trọng bởi chúng sẽ cho phép phát hiện sớm ung thư và ựịnh vị những chấn thương ựáng ngờ trong ngực, dùng cho thủ tục sinh thiết khi cần.

Về phương diện lâm sàng, một hệ thống chẩn ựoán nhũ ảnh dựa trên sự hỗ trợ của máy tắnh có thể hiểu như một sự chẩn ựoán của bác sỹ kết hợp với kết quả phân tắch nhũ ảnh của máy tắnh.

Tập mẫu gồm 683 vectơ ựặc trưng, ựược lấy từ website:

http://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+%28Diagnosti c%29 của ba tác giả Dr.William H. Wolberg, W. Nick Street và Olvi L.Mangasarian

Mỗi vectơ ựặc trưng ựược tắnh toán từ ảnh chụp khối vú của một người. Mỗi vectơ có 10 ựặc trưng quan trọng:

1 - Bán kắnh (Trung bình các khoảng cách từ trung tâm tới các ựiểm nằm trên biên).

2 - Texture (độ lệch chuẩn của các trị số ựo mức ựộ xám trong ảnh). 3 - Chu vi.

4 - Diện tắch.

5 - Tắnh trơn (sự biến thiên của ựộ dài các bán kắnh).

6 - Tắnh co cụm (bằng bình phương của chu vi chia cho diện tắch trừ 1.0). 7 - Tắnh lõm (mức ựộ của các phần lõm trên bề mặt).

8 - Số lượng các phần lõm. 9 - Tắnh ựối xứng.

10 - Thứ nguyên Fractal (Fractal dimension; ựường thẳng có thứ nguyên là 1; ựường rắch rắc có thứ nguyên nhỏ hơn 1).

Mỗi vectơ mang một trong hai nhãn 0 và 1, trong ựó 0 là Ộlành tắnhỢ, 1 là Ộác tắnhỢ.

Xây dựng SVM phân loại 2 lớp như sau:

% Doc du lieu tu tep .data vao dulieu

dulieu=dlmread('breast-cancer-wisconsin.data');

% Lay toan bo cac dong, cot tu 2 den 10 --> thong tin ve cac mau data=dulieu(:,2:10);

% Lay thong tin ve nhom cua cac mau tren groups=dulieu(:,11);

% Chuyen group ve dang 0 tuong duong voi 2: lanh tinh % 1 tuong duong voi 4: ac tinh de tinh do chinh xac groupNews = (groups~=2);

% Chon ngau nhien khoang (1-lamda)*100% so phan tu trong de luyen % trong do groups la nhan tuong ung cua cac vecto hang data

train = crossvalind('holdOut',groupNews,0.1); %chon 90 data % Dua vao luyen --> buoc 1 cua SVM

% data(train,:) --> ma tran co*~ so dong khac khong cua % train, so cot = so cot cua data

svmStruct = svmtrain(data(train,:), groupNews(train),

'kernel_function','RBF', 'quadprog_opts', optimset('MaxIter',90000000)); % Phan lop voi mau moi

% 2 hay 0: lanh tinh % 4 hay 1: ac tinh

test = ~train; % test nhung phan tu ko nam trong luyen tap TestSetX = data(test,:);

TestSetY = groupNews(test);

RsltSetG = svmclassify(svmStruct, TestSetX);

cp = classperf(groupNews); % chuyen ve lop moi de tinh do tin cay classes = svmclassify(svmStruct,data(train,:));

classperf(cp,classes,train);

disp([' Do chinh xac: ' num2str(cp.CorrectRate*100)]); % Display the result

itr = 1;

errCount = 0; % dung de dem so mau sai while(itr<=length(TestSetX))

disp([' x' num2str(itr) '=[' num2str(TestSetX(itr,:)) ']']);

disp([' Ket qua chuan doan: ' num2str(RsltSetG(itr)) '; Ket qua do duoc: ' num2str(TestSetY(itr)) ]); if (RsltSetG(itr)~=TestSetY(itr)) errCount = errCount + 1; end disp(' '); itr = itr+1; end

disp([' So ket qua chuan doan sai: ' num2str(errCount)]); end

plot([1:length(TestSetY)], TestSetY, 'o'); hold on % Ve tren cung mot do thi plot([1:length(RsltSetG)], RsltSetG, '.r');

Khi chương trình chạy kết thúc, trong cửa sổ Workspace hiển thị một biến tên là svmStruct lưu giữ các thông tin về hàm phân lớp, khi nhấn ựúp chuột vào ựó ta sẽ thấy

cửa sổ Variable Editor xuất hiện.

Hình 1-12. Màn hình hiển thị cấu trúc của biến svmStruct

Chẩn ựoán với λ = 0.1 (trong hàm crossvalind - dùng ựể chọn ngẫu nhiên tập

mẫu luyện), số mẫu luyện là 616, số mẫu dùng ựể kiểm tra SVM là 683-616=67. Kết quả cho thấy, có 4 mẫu (những ựiểm chấm không ựược khoanh tròn, trên tổng số 67 mẫu test) kết luận sai (so với phân lớp ựã biết).

Hình 1-13. Kết quả kiểm tra chéo SVM chẩn ựoán ung thư với λ = 0.1 (lần 1)

Cùng tham số trên, chọn lại tập mẫu luyện. Kết quả chẩn ựoán có 1 mẫu kết luận sai. C h u n o á n Mẫu Dự ựoán

Hình 1-14. Kết quả kiểm tra chéo SVM chẩn ựoán ung thư với λ = 0.1 (lần 2)

Với SVM xây dựng có tham số xác ựịnh như trên, cho kết quả phân lớp với ựộ tin cậy là 99.3506% (kết quả của việc gọi hàm CorrectRate).

1.7.2 NhQn dBng s! viDt tay b(ng SVM phân loBi nhiu l/p

Trong những năm gần ựây, SVM ựược ựánh giá là một trong những phương pháp phân lớp có ựộ chắnh xác cao và ựã ựược áp dụng nhiều trong các bài toán nhận dạng ký tự quang (Optical Character Recognition) ựặc biệt là trong nhận dạng chữ viết tay.

Nhận dạng ký tự quang có thể ựược hiểu là quá trình chuyển ựổi tài liệu dưới dạng tệp ảnh số hoá thành tài liệu dưới dạng tệp văn bản.

Dưới ựây là vắ dụ về nhận dạng chữ số viết tay sử dụng SVM ựa phân lớp (cụ thể ở ựây là 10 lớp) sử dụng gói stprtool - Statistical Pattern Recognition Toolbox (tải tại ựịa chỉ http://cmp.felk.cvut.cz/cmp/software/stprtool/).

Một số hàm cơ bản khi sử dụng:

Hàm sử dụng SVM phân loại theo chiến lược một chọi phần còn lại:

function [itrfin] = multisvm(TrainingMatrix,GroupMatrix,TestingVecto) % TrainingMatrix=[5,1,1,1,2,1,3,1,1; 5,4,4,5,7,10,3,2,1; % 3,1,1,1,2,2,3,1,1;8,10,10,8,7,10,9,7,1] % GroupMatrix=[2;3;3;4] % TestingVecto=[5,1,1,1,2,1,3,1,1] u=unique(GroupMatrix); N=length(u); if(N>=2)

itr=1; % dung de duyet tu 1 den N nhom classes=0; % chua thuoc nhom nao while((classes~=1)&&(itr<=length(u))) Mẫu Dự ựoán C h u n o á n

% c1 = 1 khi bieu thuc logic true % c1 = 0 khi bieu thuc logic false

newGroup=double((GroupMatrix==u(itr))); % newGroup co nhom la 0 va 1

svmStruct = svmtrain(TrainingMatrix, newGroup,'kernel_function','RBF',

'quadprog_opts', optimset('MaxIter',90000000)); classes = svmclassify(svmStruct, TestingVecto);

itr=itr+1; end %while itr=itr-1; itrfin = u(itr); end % if end % func

Hàm sử dụng SVM ựể phân loại theo chiến lược một chọi một:

function [itrfin] = multisvm(TrainingMatrix,GroupMatrix,TestingVecto) % TrainingMatrix=[5,1,1,1,2,1,3,1,1; 5,4,4,5,7,10,3,2,1; % 3,1,1,1,2,2,3,1,1;8,10,10,8,7,10,9,7,1] % GroupMatrix=[2;3;3;4] % TestingVecto=[5,1,1,1,2,1,3,1,1] u=unique(GroupMatrix); N=length(u); if(N>=2) iStart=1; iEnd=length(u); while(iStart~=iEnd) % Xet 2 group hien tai

train1 = (GroupMatrix==u(iStart)); train2 = (GroupMatrix==u(iEnd)); train = logical(train1 + train2);

% (1) GroupMatrix(train) co the mang gia tri khac 0, 1 svmStruct = svmtrain(TrainingMatrix(train,:),

GroupMatrix(train),'kernel_function','RBF', 'quadprog_opts', optimset('MaxIter',90000000));

classes = svmclassify(svmStruct, TestingVecto); % do (1) nen khong the so sanh voi 0 hoac 1 if (classes==u(iStart)) % ung voi ket qua am

iEnd = iEnd - 1; else iStart = iStart + 1; end end %while itrfin = u(iStart); end %if end

Các bước khi chạy vắ dụ nhận dạng số viết tay bằng SVM phân loại nhiều lớp: đặt ựường dẫn: chạy tệp stprpath.m, nếu chạy stprtool lần ựầu thì dùng thêm lệnh compilemex ựể biên dịch lại tài nguyên.

Tạo các mẫu dùng ựể huấn luyện: tại cửa sổ lệnh của MatLab gõ

collect_chars('my_examples_i') ở ựây i là chữ số từ 0 ựến 9 (dùng ựể chỉ

mẫu luyện dùng cho SVM tương ứng với phân lớp từ 0 ựến 9; nhãn của nhóm cũng ựược ựánh số tương ứng từ 0 ựến 9). Sau khi vẽ, ảnh ựược chuẩn hóa về kắch thước chuẩn 16ừ16 rồi chuyển sang ảnh nhị phân. Sau ựó quá trình rút chọn ựặc trưng ựược tiến hành. Kết quả của lệnh này là một ma trận biểu diễn thuộc tắnh (hay chắnh là ựặc trưng) của ảnh biểu diễn chữ số ựược vẽ.

Khởi tạo các tham số xây dựng SVM: dùng lệnh tune_ocr. Kết quả của lệnh này sẽ lưu lại các thông tin liên quan ựến SVM tốt nhất (có ựộ tin cậy tốt nhất; thông số như sau: ker = rbf C, = Inf, arg = 5.0) ứng với các mẫu dùng ựể luyện.

Dùng SVM trên ựể luyện tập mẫu: dùng lệnh train_ocr, kết quả cho

thấy SVM có ựộ tin cậy 99.9631%.

Nhận dạng chữ số với SVM ựược xây dựng: dùng lệnh demo_ocr. Xuất hiện cửa sổ giao diện thao tác với chương trình. Nhấn chuột trái ựể vẽ số cần nhận dạng; Nhấn chuột phải ựể xóa nội dung ô hiện tại; Nhấn chuột giữa ựể nhận dạng.

Tập mẫu cần nhận dạng có hình ảnh dưới ựây:

Hình 1-15. Ảnh mẫu biểu diễn số cần nhận dạng

Kết quả nhận dạng:

Hình 1-16. Kết quả nhận dạng sử dụng SVM phân loại 10 lớp

1.8 Kết luận

SVM ựược ựánh giá là một hướng tiếp cận phân lớp ựạt ựộ chắnh xác cao. Hạn chế lớn nhất của SVM là tốc ựộ phân lớp chậm, tùy thuộc vào số lượng các vectơ tựa.

Mặt khác, giai ựoạn huấn luyện SVM ựòi hỏi bộ nhớ lớn, do ựó các bài toán huấn luyện với số lượng mẫu lớn sẽ gặp trở ngại trong vấn ựề lưu trữ. Dù vậy, SVM vẫn ựược ựánh giá là phương pháp học máy tiên tiến ựã ựóng góp nhiều thành công trong lĩnh vực khai phá dữ liệu và nhận dạng.

Bài toán huấn luyện SVM thực chất là bài toán quy hoạch toàn phương trên một tập lồi, do ựó SVM luôn có nghiệm toàn cục và duy nhất, ựây chắnh là ựiểm khác biệt rõ nhất giữa SVM so với phương pháp mạng nơron, vì mạng nơron vốn tồn tại nhiều ựiểm cực trị ựịa phương.

Nét ựặc trưng cơ bản nhất của SVM là việc phân lớp ựược thực hiện gián tiếp trong không gian ựặc trưng với số chiều cao hơn thông qua một hàm hạch. Do ựó, hiệu quả phân lớp của SVM phụ thuộc vào hai yếu tố: giải bài toán quy hoạch toàn phương và lựa chọn hàm hạch.

Việc giải bài toán quy hoạch toàn phương luôn ựạt ựược giải pháp tối ưu nên mọi cố gắng còn lại trong việc nghiên cứu lý thuyết SVM tập trung vào việc lựa chọn hàm hạch. Lựa chọn hàm hạch và các tham số của nó như thế nào ựể SVM phân lớp và dự ựoán tốt nhất vẫn là một bài toán mở.

Máy vectơ tựa SVM ựã và ựang ựược áp dụng nhiều vào việc giải quyết các bài toán phân loại/dự báo của một số ngành khoa học. Trong cuối chương 1 này, luận văn ựã giới thiệu phương pháp phân lớp sử dụng máy vectơ tựa SVM cho bài toán phân loại nói chung, vắ dụ trong bài toán sinh học và nhận dạng nói riêng. Các vắ dụ ựều là tiêu biểu ựược thực hiện với bộ công cụ phân loại LibSVM và Statistical Pattern Recognition Toolbox trên nền MatLab với mục ựắch giúp người dùng dễ dàng sử dụng SVM vào các ứng dụng cụ thể.

Chương 2. TRIỂN KHAI TÍNH TOÁN đỘ THẤM TRONG NGÀNH đỊA CHẤT

Trong thực tế, SVM có rất nhiều ứng dụng trong nhiều lĩnh vực và phần cuối chương 1 ựã nêu ra hai vắ dụ tiêu biểu cho bài toán phân lớp. Tuy nhiên có một số ứng dụng chưa ựược nói ựến nhiều khi sử dụng SVM ựó chắnh là việc áp dụng hồi quy SVM trong tắnh toán/dự ựoán giá trị số.

Bài toán tắnh toán ựộ thấm trong ngành ựịa chất áp dụng hồi quy SVM sẽ ựược trình bày trong chương 2 và phần cuối cùng là kết quả ựạt ựược có so sánh với phương pháp dự ựoán sử dụng mạng nơron nhân tạo.

2.1 Dẫn nhập

Một mỏ chứa dầu khắ thường nằm sâu trong lòng ựất và là kết quả của sự biến dạng ựất ựá tạo thành các bẫy. Sau khi ựược hình thành ở các lớp ựất ựá dưới sâu hơn (ựá mẹ), dầu và khắ sẽ di chuyển dần lên phắa trên và tắch tụ lại trong các bẫy. Một mỏ dầu khắ ựược hình thành phải có 4 yếu tố chắnh: Nguồn hình thành dầu khắ; Bẫy có dạng phù hợp; đá chứa có thể tắch ựể có thể chứa và cho phép dầu và khắ di chuyển lên; Một lớp ựất ựá không thấm ựủ ựể không cho phép dầu và khắ tiếp tục di chuyển lên trên. Thời gian hình thành mỏ dầu khắ là hàng triệu năm.

Nguồn hình thành dầu và khắ chắnh là các lớp ựất ựá giàu các hợp chất hữu cơ bị chôn vùi nhanh chóng do các biến ựổi ựịa chất. Dưới tác ựộng của nhiệt ựộ và áp suất, các thành phần vật chất hữu cơ bị biến ựổi và kết quả là tạo ra dầu và khắ. Lượng dầu và khắ này sẽ ựược tách ra và di chuyển dưới tác ựộng của lực trọng trường, ựộ nhớt và lực mao dẫn. Thông thường các chất lưu này sẽ di chuyển lên phắa trên theo các hướng có ựộ thấm lớn nhất. đầu tiên, bẫy ựược hình thành và trong ựó chứa toàn nước, dầu và khắ di chuyển ựến và thay thế dần dần. Lớp ựất ựá kắn ở trên bẫy sẽ có tác dụng giữ không cho dầu và khắ tiếp tục di chuyển lên phắa trên.

Thể tắch của một bẫy ựịa chất có chứa dầu và khắ ựược gọi là vỉa chứa. đất ựá có khả năng chứa và cho phép dầu khắ chảy qua ựược gọi là ựá chứa. Trong thực tế, vỉa chứa có hình nếp uốn lồi và bên trong chứa dầu khắ và nước với các khoảng gradient áp suất khác nhau. Diện tắch bề mặt của một vỉa chứa có thể từ vài kilomet vuông ựến hàng chục kilomet vuông, chiều dày từ vài mét ựến hàng trăm mét. đá chứa chủ yếu là các loại cát, cát kết, ựá vôi và ựôlomit với các khoảng rỗng giữa các hạt hoặc do bị nứt vỡ hoặc do các hoạt ựộng hòa tan vật chất.

Quá trình khai thác dầu và khắ ựược thực hiện bằng việc khoan các giếng trong bẫy. Ban ựầu dưới tác ựộng của áp suất lớn, dầu và khắ sẽ tự phun lên bề mặt. Khi áp suất không còn ựủ lớn, người ta có thể lắp bơm vào trong giếng ựể bơm dầu lên hoặc

khoan các giếng ựể bơm ép nước biển xuống tạo áp suất. Thực tế cho thấy con người mới chỉ có thể khai thác ựược khoảng 30Ờ40% thể tắch dầu khắ nằm trong bẫy.

Nhiệm vụ của các nhà khai thác dầu khắ là tìm hiểu các tắnh chất của ựá chứa cũng như các tắnh chất của bản thân dầu khắ từ ựó ựưa ra hoạch ựịnh chiến lược quản lý, khai thác phù hợp. Trong quá trình thực hiện hàng loạt câu hỏi ựược ựặt ra [11]:

Có nên khai thác hay không?

Cần khoan ở vị trắ nào trên bề mặt của mỏ? Khoan với ựộ sâu bao nhiêu?

Cần khoan bao nhiêu giếng và kế hoạch khoan như thế nào? Sản lượng của mỗi giếng khoan khai thác như thế nào là hợp lý? Có thể nâng cao ựược hệ số thu hồi dầu mỏ hay không?

Tất cả câu hỏi trên ựược ựặt ra từ thực tế và cần ựược trả lời. Bài toán mô phỏng mỏ sẽ cung cấp Ộựầu raỢ cho các chuyên gia thêm thông tin và các thông tin ựó ựược ựánh giá ựộ tin cậy giúp cho việc trả lời câu hỏi trên thấu ựáo và khoa học. đó cũng chắnh là mục tiêu thể hiện ựộ quan trọng của bài toán mô phỏng mỏ.

2.2 Bài toán mô phỏng vỉa chứa dầu khắ [9,11]

2.2.1 Khái niAm chung v mô phTng

Sự vật và hiện tượng trong tự nhiên luôn có mối quan hệ với nhau một cách biện chứng, một bài toán ựặt ra ựể giải quyết một vấn ựề này bao giờ nó cũng có một mối quan hệ với những bài toán khác. Hình 2-1 dưới ựây là một cách mô tả bài toán mô phỏng mỏ dưới dạng một sơ ựồ hệ thống quan hệ - sơ ựồ hộp ựen [11].

Hình 2-1. Sơ ựồ hệ thống mô phỏng mỏ

Trên sơ ựồ này ta có thể thấy rằng, bộ mô phỏng ỘSimulatorỢ là thành phần trung tâm của hệ thống, thành phần này là một phần mềm máy tắnh ựược xây dựng ựể giải quyết các phương trình vật lý Ờ toán, Ộđầu vàoỢ của bộ mô phỏng (Input) là các tham

Một phần của tài liệu Máy vectơ tựa (support vector machine-SVM) và ứng dụng trong việc xác định tham số độ thấm trong ngành địa chất (Trang 40)

Tải bản đầy đủ (PDF)

(74 trang)