Tải bản đầy đủ (.docx) (71 trang)

Nghiên cứu các thuật toán biclustering cho trường hợp dữ liệu biểu hiện gien theo chuỗi thời gian

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.69 MB, 71 trang )

MỞ ĐẦU
1. Lý do chọn đề tài
Việc phân tích dữ liệu biểu hiện gien, mà cụ thể là phân nhóm các gien
có sự biểu hiện giống nhau trong từng thời điểm thành các nhóm (cluster)
được thực hiện bởi các thuật toán phân cụm (clustering methods). Các thuật
toán này thường tìm cách nhóm các gien có sự biểu hiện phụ thuộc nhau trên
toàn bộ các điều kiện thí nghiệm. Tuy nhiên, trên thực tế các gien thường chỉ
thể hiện phụ thuộc với nhau trên một số điều kiện nào đó và độc lập với nhau
trong điều kiện khác. Điều này dẫn đến một hạn chế rất lớn của các thuật toán
clustering là không thể tìm ra được các gien chỉ thể hiện giống nhau trên một
số điều kiện thí nghiệm. Để khắc phục hạn chế này, người ta đã đề xuất một
phương pháp phân cụm mới có tên là biclustering (hoặc co-clustering). Các
thuật toán biclustering sẽ tìm cách phân cụm đồng thời trên các hàng (gien) và
cột (condition) của ma trận dữ liệu biểu hiện gien nhằm tìm ra các ma trận
con thoả mãn một số tiêu chí đặt ra, từ đó có thể giúp chúng ta hiểu thêm các
tiến trình sinh học giữa các gien trong các cá thể. Nhưng gần như tất cả các
phương pháp tiếp cận đến nay là heuristic và không đảm bảo để tìm giải pháp
tối ưu.
Trong trường hợp dữ liệu biểu hiện gien theo chuỗi thời gian, thì các
mẫu sinh học thường được đo theo một thời điểm nhất định nhằm quan sát
các tiến trình sinh học xảy ra trong các cá thể. Vì vậy, việc tìm ra các mẫu có
thể hiện giống nhau trong một khoảng thời gian liên tục nào đó, có thể hình
dung như chúng vừa hoàn thành 1 tiến trình sinh học, hoặc một giai đoạn
chức năng sinh học nào đó. Việc phân tích trên dữ liệu thể hiện gien cho phép
hiểu được cơ chế điều khiển gien và tương tác giữa chúng, các tri thức này có
thể được sử dụng trong nghiên cứu chế tạo thuốc, phát hiện khối u, ... và các

1


nghiên cứu lâm sàng. Các mẫu dữ liệu này có thể coi như là một bicluster


gồm các hàng và các cột liên tục trong ma trận.
Với trường hợp dữ liệu biểu hiện gien theo chuỗi thời gian, người ta đã
đề xuất các thuật toán hiệu quả với thời gian chạy là tuyến tính, hoặc một hàm
đa thức để tìm ra các bicluster tốt. Các thuật toán này không khai phá trực tiếp
dữ liệu gốc, mà sẽ chuẩn hóa sang một dạng dữ liệu mới, sau đó xây dựng các
cây hậu tố để tìm kiếm. Mỗi cây hậu tố sẽ biểu diễn một ma trận dữ liệu, và
việc tìm các bicluster được coi như tìm một xâu con chung lớn nhất của một
tập các xâu dựa vào cây hậu tố.
Trong luận văn này, chúng tôi đặt mục tiêu nghiên cứu và ứng dụng các
thuật toán này trong việc khai phá các bicluster trong dữ liệu biểu hiện gien
theo chuỗi thời gian dựa trên cây hậu tố.
2. Mục đích nghiên cứu
- Nghiên cứu các thuật toán biclustering cho trường hợp dữ liệu biểu
hiện gien theo chuỗi thời gian (nội dung chính)
- Áp dụng một số thuật toán biclustering vào các tập dữ liệu biểu
hiện gien theo chuỗi thời gian cụ thể, phân tích và đánh giá các biclusters
thu được.
3. Đối tượng nghiên cứu
- Các lý thuyết cơ bản về cây hậu tố.
- Các lý thuyết cơ bản về phân cụm dữ liệu và dữ liệu biểu hiện gien
theo chuỗi thời gian.
4. Giả thuyết khoa học
- Việc sử dụng các thuật toán biclustering sẽ cho phép tìm ra được các
gien thể hiện giống nhau trên một khoảng điều kiện, từ đó có thể tìm ra các
gien liên quan đến một số tiến trình sinh học cụ thể.
5. Nhiệm vụ nghiên cứu
- Tìm hiểu một số thuật toán biclustering hiệu quả
- Cài đặt một số thuật toán và thử nghiệm với dữ liệu thực tế
2



- Phân tích các ưu nhược điểm và cải tiến các thuật toán nếu có thể được.
6. Phạm vi nghiên cứu
- Các thuật toán phân cụm dữ liệu và dữ liệu biểu hiện gien theo chuỗi
thời gian của một số loài.
7. Phương pháp nghiên cứu
- Phương pháp đọc tài liệu, phân tích, tổng hợp lý thuyết
- Phương pháp xây dựng giả thuyết
- Phương pháp quan sát, thực nghiệm và đối chứng.

3


NỘI DUNG

Chương I. GIỚI THIỆU
1.1. Dữ liệu biểu hiện gien theo chuỗi thời gian
Dữ liệu biểu hiện gien có thể biểu diễn dưới dạng ma trận trong đó mỗi
hàng tương ứng với một gien và mỗi cột tương ứng với một thời điểm hay
một điều kiện thí nghiệm. Mỗi ô của ma trận chứa mức độ thể hiện của gien
trong điều kiện tương ứng. Tuỳ theo độ phức tạp của bộ gien, ma trận có thể
có từ vài nghìn tới vài chục nghìn dòng và từ vài cột cho tới vài trăm cột.
Khi chúng ta phân tích dữ liệu biểu hiện gien theo chuỗi thời gian,
chúng ta cần tìm các mẫu (bicluster) dữ liệu gồm các dòng có thể không cần
liên tục, nhưng các cột liên tục (theo thời gian). Điều đó dẫn đến giảm bớt độ
phức tạp và biến đổi của thuật toán biclustering so với trường hợp tìm các
bicluster thông thường. Chúng ta quan tâm đến quá trình sinh học diễn ra
trong suốt tiến trình từ khi bắt đầu đến khi kết thúc để biết được sự biến đổi
của một gien hoặc một nhóm gien sau một tiến trình sinh học nào đó. Như
vậy, trong trường hợp này một bicluster là một tập con các dòng (gien) và một

tập con liên tục các cột (điều kiện). Như hình 1.1 minh họa 3 quá trình sinh
học (P1, P2 và P3) của các tập gien khác nhau được miêu tả bằng 3 biclusters
với các cột liên tục.
Mục đích cuối cùng của các thuật toán biclustering trong trường hợp
này là tìm ra một tập con các biclusters Bk = (Ik, Jk) với các cột liền kề, mà
mỗi bicluster Bk có thể hiện các tính chất đặc trưng riêng trong mỗi quá trình
sinh học nhất định.

4


Time

Ge
nes

Hình 1.1 Quá trình sinh học và biclusters với các cột liền kề

1.2. Các kiểu thuật toán Biclustering
Mặc dù nhiều thuật toán đã được đề xuất để giải quyết các vấn đề
chung của biclustering [10], [23] như phân lớp và dự đoán, khai phá chuỗi
theo thời gian, phân cụm... và đã biết đến tầm quan trọng của việc phát hiện
các mẫu cục bộ, nhưng chỉ có một vài đề xuất gần đây đã giải quyết vấn đề
này trong trường hợp cụ thể của dữ liệu biểu hiện gien theo chuỗi thời gian.
Những phương pháp tiếp cận đó thuộc một trong hai nhóm các thuật toán sau:
1. Tìm kiếm tham lam lặp đi lặp lại (Greedy iterative search): như
thuật toán CC-TSB[30].
2. Liệt kê đầy đủ (Exhaustive enumeration): như các thuật toán qClustering [12], q-Subsequences [27], ts-Clustering [28], CCC-Biclustering
[17] và e-CCC-Biclustering [18].
Những phương pháp này làm việc với một ma trận biểu hiện gien,

nhằm tìm kiếm các biclusters bằng cách xác định tập con các gien và tập con
các điều kiện (thời điểm) trong khoảng thời gian liên tục. Thuật toán CCCBiclustering [17] và e-CCC-Biclustering [18] thuộc nhóm thuật toán liệt kê
đầy đủ, sẽ được trình bày trong luận văn và mô tả chi tiết ở chương 3, cả hai
thuật toán giải quyết bài toán theo hướng dựa vào ma trận biểu hiện gien theo
chuỗi thời gian, để tìm các biclusters với mẫu biểu hiện hoàn hảo và mẫu biểu
hiện xấp xỉ.

5


Dưới đây chúng tôi xin trình bày tóm tắt ý tưởng của các thuật toán
biclustering đã được một số tác giả đề xuất, để giải quyết bài toán tìm các
biclusters trong dữ liệu biểu hiện gien theo chuỗi thời gian.
1.2.1. Thuật toán CC-TSB
Zhang [30] đề xuất thuật toán CC-TSB (Time-Series Biclustering),
trong đó có cải tiến các thuật toán heuristic của Cheng and Church [4], bằng
cách thêm hoặc xoá một phần cột tiếp giáp của bicluster đã xây dựng, do đó
bicluster kết quả chỉ có các cột liền kề nhau.
Thuật toán CC-TSB có hai thủ tục chính là: thủ tục xóa và thủ tục chèn
lặp đi lặp lại. Kết quả thu được của thuật toán là một ma trận con, miêu tả một
bicluster. Đầu tiên thuật toán thực hiện, các ma trận con được xem như là toàn
bộ ma trận biểu hiện gien. Sau đó loại bỏ dần các hàng (gien) và các cột (thời
điểm) từ ma trận con, với mục đích giảm thiểu bình phương trung bình dư
lượng (MSR) [4] của ma trận con kết quả. Một hàng được lấy ra từ ma trận
con nếu có thể hiện khác với những hàng còn lại trong ma trận, được đo bởi
tỷ lệ MSR. Nếu tỷ lệ này lớn hơn một ngưỡng thực nghiệm α, hàng đó sẽ bị
loại bỏ. Cột (thời điểm) được loại bỏ khỏi ma trận con cũng được thực hiện
tương tự như đối với hàng. Để đảm bảo các thời điểm trong một bicluster luôn
luôn liên tục, thì chỉ có cột đầu tiên và cột cuối cùng trong ma trận con có thể
bị xóa. Quá trình xóa kết thúc khi MSR của bicluster có kết quả thấp hơn giới

hạn δ. Thao tác chèn cũng được thực hiện tương tự cho các cột, ngược lại với
thao tác xóa thao tác chèn thêm: nếu MSR của một hàng nào đó trong ma trận
con nhỏ hơn α, gien tương ứng với hàng đó sẽ được chèn vào bicluster. Thỏa
mãn với yêu cầu tiếp giáp trong các cột, chỉ có vùng lân cận của ma trận con
mới được xem xét để chèn.

6


1.2.2. Thuật toán q-Clustering
Như trong các thuật toán biclustering đã đề xuất, Ji and Tan [12] quan
tâm đến việc tìm kiếm biclusters với các cột liên tục, được xác định bằng một
mẫu biểu hiện là tập các ký hiệu liền kề trong bảng chữ cái cho trước. Thuật
toán có ba giai đoạn, được mô tả như sau:
Giai đoạn 1: Chuyển ma trận. Ma trận biểu hiện gien gốc được chuyển
thành một ma trận "dốc", bằng cách sử dụng bảng ba ký tự ∑={-1,0, 1}.
Giai đoạn 2: Sinh tập q-clusters sử dụng các hàng trong ma trận “dộc”,
mỗi chuỗi trình tự gồm các giá trị -1, 0 và 1. Mỗi q-cluster chứa một tập các
gien cùng mẫu biểu hiện trong q thời điểm liên tục. Để tìm kiếm các gien có
cùng chuỗi trình tự với chiều dài (q - 1), trong đó q là một tham số. Mỗi qcluster có một định danh duy nhất, gọi là q-clusterID. Các q-cluster được tạo
ra như sau: mỗi hàng (gien) trong ma trận "dốc", sử dụng một khung trượt có
độ dài (q - 1) để kiểm tra. Khi kiểm tra một chuỗi con (q - 1) được xác định là
q-clusterID thì cặp (GeneID, st) được đưa vào nhóm q-cluster tương ứng, trong
đó GeneID là tên của gien và st là vị trí điểm bắt đầu của khung trượt (q -1).
Để xác định chất lượng của bicluster, ta sử dụng giá trị MSR, do đó nếu
MSR nhỏ hơn giá trị do người dùng quy định thì những bicluster chất lượng
tốt sẽ được giữ lại, và phần khác có thể được loại bỏ.
Giai đoạn 3: Đưa ra các bicluster từ q-clusters và sắp xếp theo vị trí st,
tất cả các cặp (GeneID, st) có cùng vị trí được nhóm lại với nhau và xác định
bicluster trong mỗi q-cluster với tất cả các gien cùng vị trí bắt đầu cùng mẫu

với q điều kiện. Các bicluster có giá trị MSR nhỏ hơn giá trị người dùng định
nghĩa sẽ có chất lượng tốt hơn.
1.2.3. Thuật toán q-Subsequences
Zeng and Liu [27] đề xuất cách tiếp cận biclustering cho việc phân tích
khoảng thời gian trong cụm dữ liệu biểu hiện gien, kết hợp phương pháp của
7


q-Clustering và một số ý tưởng của thuật toán CCC-Biclustering. Thực chất
cách tiếp cận là q-Clustering dựa trên cây hậu tố. Tuy nhiên, lại không xét tới
các mối quan hệ tác động bên ngoài và các mẫu xấp xỉ. Đầu tiên ma trận dữ
liệu biểu hiện gien được chuyển đổi như trong kỹ thuật q-Clustering. Sau đó
xây dựng một cây hậu tố tổng quát cho tập các chuỗi xác định mẫu cho mỗi
gien trong chuỗi thời gian của ma trận biểu hiện. Mục tiêu để tìm các
biclusters với các cột liền kề nhau mà mẫu biểu hiện có chiều dài q và trong
khoảng thời gian hoạt động của gien. Để làm được điều này sau khi xây dựng
cây hậu tố ban đầu cho tập các chuỗi, tất cả các nút có độ sâu lớn hơn q bị xóa
bỏ. Các thông tin trong mỗi nút lá (chứa số lần xuất hiện của q-subsequence)
được phân tích và sử dụng để xác định các bicluster trong khoảng thời gian và
q thời điểm. Nút lá được chia thành ba loại. Một loại nút lá, được gọi là nút lá
không hoạt động, đại diện cho một q-subsequence mà không xuất hiện trong
bất kỳ chuỗi phân tích nào. Một loại nút lá, được gọi là nút hoạt động, đại
diện cho một q-subsequence xuất hiện chỉ một lần trong chuỗi phân tích, hai
loại nút lá và tương ứng với q-subsequences như vậy không đưa ra phân tích.
Loại nút lá cuối cùng tương ứng với q-subsequences xuất hiện ít nhất hai lần
trong cùng một gien hoặc ít nhất hai gien, những nút này tương ứng với các
biclusters trong khoảng thời gian phân tích.
1.2.4. Thuật toán ts-Clustering
Yin [28] đề xuất tìm cụm liên kết trong biểu hiện gien theo chuỗi thời
gian gọi là ts-Clusters, cho phép những biểu hiện gien trong cụm được gắn

kết trên các tập con khác nhau của các điều kiện, và mức độ biểu hiện tương
đối được ưu tiên thực hiện, có thể hạn chế được tác động gây nhiễu. Trong
cách thiết lập này, các cặp gien quy định trong nhóm có các mẫu liên kết hoặc
thời gian chuyển mẫu liên kết. Đây là một thuật toán phân cụm dựa trên cây
cơ sở để phát hiện ra các ts-Clusters.
8


Mô hình ts-Cluster khai thác thời gian chuyển mẫu như sau: giả sử tập
m gien G = {g1, g1,. . . , gm}, tập n thời điểm với khoảng thời gian nhất định, T
= {t1, t2, . . . , tn}, và ma trận D= G x T trong đó di,j là các giá trị biểu hiện của
gien i tại thời điểm j. Những giá trị khuyết thiếu trong ma trận được “lấp đầy”
bởi một số ngẫu nhiên. Sau đó, xác định Y = < ti1, ti2,. . . , til > theo một trình
tự thời gian nếu và chỉ nếu ti1 < ti2 < ... < til và chiều dài của Y là |Y | = l.
Chuỗi thời gian Y là L-segment nếu chiều dài của |Y | là (L + 1).
Xét hai chuỗi thời gian L-segment là YP = <ti1, ti2,. . . , til>, và Yq = tj2,. . . , tjl> mà ở đó til < tjl, mối quan hệ giữa thời gian chuyển YP và Yq nếu
và chỉ nếu jk = ik + t’, với mọi k ∈ [1, l], trong đó t’ là một hằng số là khoảng
thời gian giữa Yq và YP (Yq cũng giống như YP khi t’= 0 và đó là khoảng thời
gian chuyển bằng 0). Khi Yq và Yp giống nhau ta xét đến các mối quan hệ giữa
chuỗi thời gian và khoảng thời gian trong các trường hợp sau:
- Nếu dựa vào một gien x và một l-segment <ti, tj> có 3 cách chuyển
đổi là, dxi và dxj giá trị biểu hiện của gien x tại thời điểm ti và tj , và tham số δ
(>0) là một ngưỡng điều chỉnh.
(1) Điều chỉnh lên, có nghĩa là Ox(ti, tj) = ↑, nếu dxj - dxi > δ
(2) Không điều chỉnh, có nghĩa là Ox(ti, tj) = →, nếu dxj - dxi≥ δ
(3) Điều chỉnh xuống, có nghĩa là Ox(ti, tj) = ↓, nếu dxj - dxi < -δ
- Nếu dựa vào 2 gien x, y và (n-1)-segment Y = <ti1, ti2, ... , tin >, x và y
là giống nhau nếu Ox(ti,tj )= Oy(t(j+∆t),t(k+∆t)) trong đó: j,k∈(i1, i2,..., in) và ∆t là
khoảng cách thời gian giữa hai sự kiện.

Dựa vào các định nghĩa: chuỗi thời gian; L-segment; tính O và xác định
như ở trên, một ts-Cluster được xác định như sau:

C = U ir=1 = X iYi = {c xy }

, Xi là

một tập các gien (Xi ⊆ G) và Yi là tập thời điểm (Yi ⊆ T), thì Xi x Yi là một
ma trận con đặc biệt của D = G x T. C là một ts-Cluster nếu và chỉ nếu:
9


(1) ∀Yi ,Yj,1 ≤ i, j ≤ r, |Yi| = |Yj |,
(2) ∀Yi ,Yj,1 ≤ i, j ≤ r , quan hệ thời gian chuyển giữa Yi và Yj
(3) ∀gx∈ Xi , ∀gy∈ Xj , 1 ≤ i, j ≤ r giả sử ∆t là khoảng thời gian Yi đến
Yj, ∀ti, tj ∈ Yi điều kiện Ox(ti,tj )= Oy(t(i+∆t),t(j+∆t)).
Khi β được xác định là tập tất cả ts-Cluster thỏa mãn các điều kiện giàng
buộc, khi C ∈ β gọi là ts-Cluster cực đại nếu và chỉ nếu không có cụm C’ ∈ β
mà C’ chứa C.
Vấn đề được giải quyết bằng thuật toán ts-Clustering là: tìm tất cả tsCluster cực đại, một ngưỡng cực đại được người dùng quy định, tính lượng
thời điểm/lượng gien tối thiểu.
Thuật toán ts-Clustering có hai bước chính: Trước tiên xây dựng một
cây TS-Tree ban đầu ("Construct Initial TS-Tree"), ở đó các thông tin chuyển
đổi từ ts-Clusters ban đầu của tất cả l-segments được xác định. Chỉ điều chỉnh
giá trị theo hai nhánh lên hoặc xuống. Bước thứ hai phát triển cây ban đầu để
tìm tất cả ts-Cluster cực đại, kết hợp tìm kiếm theo chiều rộng cho đến khi
chiều cao đạt mint - l, thì tìm kiếm theo độ sâu.
Mặc dù ts-Clustering không sử dụng hướng tiếp cận trực tiếp ma trận
gốc, nhưng thao tác O có thể được xem như là một bước chuyển hoá từ cây TStree đã xây dựng bằng cách sử dụng phân nhánh với hai biểu tượng lên “↑” và
xuống ”↓” .[28]

1.3. Định nghĩa và bài toán bicluster trong dữ liệu thể hiện gien theo
chuỗi thời gian.
Với ma trận (n×m), ở đó mỗi thành phần là một giá trị thực. Trong
trường hợp các ma trận biểu hiện gien, aij miêu tả mức thể hiện của gien i
trong điều kiện j. Ví dụ bảng minh họa dưới đây.

10


Bảng 1: Minh họa ma trận dữ liệu biểu hiện gien.

Chúng ta sẽ xem xét trường hợp tổng quát của ma trận dữ liệu A với tập
các hàng X và tập các cột Y, ở đó mỗi thành phần Aij tương ứng với giá trị đặc
trưng của mối quan hệ giữa hàng i và cột j.
Cho một ma trận A với n hàng và m cột, được xác định bởi các tập con
các hàng X = {x1,...,xn} và tập con các cột Y = {y1,...,ym}, ký hiệu (X,Y) là thể
hiện của ma trận A. Nếu I ⊆ X và J ⊆ Y là tập con riêng lẻ của hàng và cột,
thì AIJ = (I, J) là ma trận con của ma trận A mà mỗi thành phần aij thuộc về
ma trận con với tập hàng I và tập cột J.
Một Bicluster là một tập con của các hàng, thể hiện trạng thái tương tự
thông qua tập con của các cột và ngược lại. Bicluster AIJ = (I, J) gồm tập con
các hàng và tập con các cột, ở đây I = {i1,…, ik} là tập con các hàng (I ⊆X và
k ≤ n) và J= {j1,…, js} là tập con các cột ( J ⊆ Y và s ≤ m).
Các thuật toán biclustering nhằm xác định tập các bicluster Bk = (Ik, Jk),
ở đó mỗi bicluster Bk thỏa mãn một vài tính chất đặc trưng riêng biệt. Những
đặc tính mà một bicluster phải tuân theo thay đổi tùy theo cách tiếp cận.
Trong luận văn này chúng tôi xin trình bày thuật toán biclustering không xử
lý trực tiếp trên ma trận gốc A, mà các phần tử của nó được chuẩn hóa sang
ma trận biểu hiện gien A’gồm tập các ký hiệu trong bảng chữ cái ∑ miêu tả hoạt
động của mẫu gien, kỹ thuật tiếp cận này được sử dụng trong thuật toán, có thể

phát huy khả năng xử lý của thuật toán khi khai phá các mẫu về sinh học.

11


1.4. Các hướng tiếp cận chính để tìm bicluster trong dữ liệu biểu hiện
gien theo chuỗi thời gian
Do chức năng của gien thường liên quan tới mức độ thể hiện của gien
nên bằng các phương pháp phân tích dữ liệu biểu hiện gien, chúng ta có thể
dự đoán được chức năng của chúng hoặc một tiến trình tiếp theo. Các phương
pháp phân cụm đã được sử dụng rộng rãi trong việc phân tích dữ liệu biểu
hiện gien theo chuỗi thời gian, có thể tìm ra được nhóm gien có thể hiện
tương đối giống nhau. Các thuật toán Biclustering tìm cách phân nhóm các
đối tượng theo cả hai chiều để tìm ra một tập các gien có thể hiện giống nhau
chỉ trong một số điều kiện hay một số thời điểm liên tục nào đó. Tuy nhiên,
khó khăn mà các thuật toán biclustering là việc tìm lời giải rất khó khăn vì
đây là bài toán NP-khó, rất khó để tìm được nghiệm tối ưu toàn cục. Vì vậy,
kỹ thuật tiếp cận để xử lý dữ liệu biểu hiện gien theo chuỗi thời gian, trên cơ
sở các giá trị của sự biến đổi trạng thái giữa các thời điểm. Kỹ thuật tiếp cận
này sử dụng hai hoặc ba ký tự và nó thường được xử lý bằng bước chuẩn hóa
ma trận dữ liệu biểu hiện gien theo chuỗi thời gian gốc ban đầu. Từ ma trận
biểu hiện gien đã được chuẩn hóa, việc tìm kiếm các bicluster sẽ hiệu quả hơn
và thời gian thực hiện cũng ít tốn kém hơn. Một thuật toán hiệu quả sử dụng
kỹ thuật xử lý chuỗi dựa trên cây hậu tố tổng quát, là ý tưởng chính của thuật
toán được đề xuất. Mà ở đó có mối quan hệ tương đồng giữa các biclusters
với các nút trong của cây hậu tố tổng quát đã xây dựng cho các bộ chuỗi (các
hàng trong ma trận) đại diện cho các mẫu biểu hiện của mỗi gien trong ma
trận. Thuật toán này sẽ được chúng tôi trình bày chi tiết trong chương 3.
1.5. Mục đích của luận văn
Mục đích của luận văn này là trình bày các thuật toán biclustering dựa

trên cây hậu tố tổng quát để tìm kiếm các bicluster hoàn hảo và các bicluster
xấp xỉ trong dữ liệu biểu hiện gien theo thời gian. Sau đó thực hiện các thuật
12


toán này trên một số tập dữ liệu sinh học thực tế để minh họa khả năng hoạt
động cũng như kết qủa của các thuật toán. Phân tích các bicluster thu được
bằng cách sử dụng các thông tin chú giải gien (Gen Ontology) để thấy được ý
nghĩa sinh học của các bicluster đã tìm được.
1.6. Cấu trúc của luận văn
Cấu trúc của luận văn được chia thành các phần như sau:
Phần 1: Mở đầu – Trình bày lý do, mục đích nghiên cứu, đối tượng, phạm vi,
nhiệm vụ, và phương pháp nghiên cứu.
Phần 2: Nội dung – Phần này trình bày nội dung chính của luận văn, bao gồm
các chương sau:
Chương 1: Giới thiệu các khái niệm cơ bản được đề cập trong luận văn,
cũng như một số ý tưởng của thuật toán biclustering. Trong chương này
chúng tôi trình bày định nghĩa và bài toán tìm bicluster trong dữ liệu thể hiện
gien theo thời gian.
Chương 2: Trong chương này chúng tôi tập trung chủ yếu trình bày các
khái niệm cũng như các ứng dụng của cây hậu tố.
Chương 3: Chương này chúng tôi trình bày hai thuật toán biclustering
hiệu quả để tìm các biclusters với mẫu hoàn hảo và bicluster với mẫu xấp xỉ
đó là: thuật toán CCC-Biclustering và e-CCC-Biclustering có độ phức tạp tính
toán đa thức. Cả hai thuật toán đều dựa trên cây hậu tố tổng quát.
Chương 4: Ứng dụng của thuật toán biclustering vào các việc phân tích
các tập dữ liệu thực tế. Cuối cùng là phần kết luận của luận văn, những việc
đã làm được, chưa làm được và hướng phát triển tiếp theo của luận văn.

13



Chương II. CÂY HẬU TỐ
2.1. Giới thiệu chung
Cây hậu tố (suffix trees) là một cấu trúc dữ liệu biểu diễn các hậu tố
của một chuỗi. Nó cho phép thực hiện rất nhiều thuật toán hiệu quả quan
trọng về chuỗi và được ứng dụng rộng rãi trong nhiều lĩnh vực khác nhau của
khoa học máy tính như: đối sánh mẫu, tìm xâu con chung, thống kê tần suất
“từ”,... Đây là những bài toán trong các kỹ thuật xử lý văn bản, tìm kiếm
thông tin, tin sinh học (bioinformatics), nén dữ liệu… Cây hậu tố cho một
chuỗi S là một cây có các cạnh được gắn nhãn với các chuỗi, sao cho mỗi hậu
tố của S tương ứng với đúng một đường đi từ gốc đến hậu tố đó, nó có thể sử
dụng như một sơ đồ (diagram) của trạng thái dịch chuyển.
Một trong những điểm mạnh của cây hậu tố là cho phép thay đổi và mở
rộng cấu trúc mỗi khi có sự cập nhật dữ liệu mới. Tính chất này có thể xử lý
trên một tập dữ liệu lớn với nhiều dạng dữ liệu khác nhau, đặc biệt là dữ liệu
sinh học, sẽ tiết kiệm được thời gian và không gian xử lý dữ liệu.
Khái niệm đầu tiên được giới thiệu bởi Weiner vào năm 1973, đến năm
1976 McCreight đã đơn giản hóa thao tác xây dựng cây hậu tố với thời gian
và không gian tuyến tính, và đến 1995 Ukkonen cung cấp giải thuật dựng cây
hậu tố trực tuyến với thời gian tuyến tính (On-line construction of suffix
trees) và được gọi là thuật toán Ukkonen [6]. Dưới đây chúng tôi xin được
trình bày các khái niệm và giải thuật dựng cây hậu tố cũng như một số Ứng
dụng của cây hậu tố.
2.2. Các khái niệm cơ bản.
Định nghĩa 1: (Cây hậu tố) Cây hậu tố T của chuỗi |S| kí tự của S là
cây có hướng, có gốc và có các tính chất sau:
- Các đường đi từ gốc đến lá tương ứng 1 - 1 với các hậu tố của S.
- Mỗi nút trong, trừ nút gốc, có ít nhất là hai con.
14



- Mỗi cạnh được gán nhãn bằng một chuỗi con (không rỗng) của chuỗi S.
- Các cạnh bất kỳ xuất phát từ một nút chung phải bắt đầu bằng các ký tự
khác nhau.
- Đối với mỗi nút lá thứ i, có nhãn là đường đi từ nút gốc đến nút đó biểu
diễn hậu tố (suffix) thứ i của chuỗi S.[5]
Để đảm bảo luôn dựng được cây hậu tố của chuỗi S người ta thêm một ký
tự đặc biệt ($) vào cuối chuỗi S, gọi là kí tự kết thúc, như vậy sẽ không có hậu
tố nào là tiền tố của một hậu tố khác. Ví dụ cây hậu tố T(bbabab).

Hình 2.1. Cây hậu tố của chuỗi bbabab

Trong ví dụ minh họa cây hậu tố T của chuỗi ω = bbabab$ có bẩy hậu
tố là bbabab$, babab$, abab$, bab$, ab$, b$ và $ được đánh số từ 1 đến 7
như hình vẽ, nhãn của nút w là ab, nhãn của nút u là b và xâu baba là nhãn
của đường đi từ gốc đến giữa cạnh (u, 2).
Sau đây là một số khái niệm liên quan đến cây hậu tố:
Định nghĩa 2: (Chuỗi, chuỗi con, hậu tố và tiền tố) Một chuỗi S là danh sách
các ký tự trên bảng chữ cái ∑ (có |∑| ký tự) được viết liên tục từ trái sang
phải. Bất kỳ xâu con S[i..j] thu được cũng là một xâu ký tự liên tục trong S,
có vị trí bắt đầu tại i và kết thúc tại j. Đặc biệt, S[1..i] là tiền tố của S kết thúc
tại vị trí i và S[i..|S|] là hậu tố của S bắt đầu tại vị trí i.

15


Định nghĩa 3: (Cây hậu tố tổng quát) Cây hậu tố tổng quát là một cây hậu tố
được xây dựng cho tập các chuỗi Si. Mỗi nút lá lúc này nhận hai giá trị, một là
chuỗi (i); hai là vị trí bắt đầu (hậu tố) của chuỗi đó.

Để giải quyết bài toán xâu con chung của hai hay nhiều chuỗi chúng ta
cần mở rộng khái niệm cây hậu tố để chứa nhiều chuỗi khác nhau trong một
cấu trúc dữ liệu chung, ta sử dụng cây hậu tố tổng quát, ví dụ cây hậu tố tổng
quát T cho hai chuỗi S1=TACTAG và S2=CACT.

Hình 2.2. Cây hậu tố tổng quát cho chuỗi S1=TACTAG; S2 = CACT.

Độ sâu chuỗi của một nút v trong cây T là P(v), là tổng của tất cả độ dài cạnh
trên đường đi từ gốc đến nút v, đường đi chính là chuỗi nhãn của nút v.
Định nghĩa 4: (Liên kết hậu tố): Cho xα biểu diễn một chuỗi bất kỳ, trong đó
x biểu diễn ký tự đơn và α biểu diễn một chuỗi con (có thể rỗng). Xét nút
trong v với chuỗi nhãn xα, nếu có một nút khác s(v) có nhãn là α, một con trỏ
từ v đến s(v) được gọi là liên kết hậu tố (suffix link). Trường hợp đặc biệt nếu

α rỗng thì xα có liên kết hậu tố được trỏ đến gốc (root). Nút gốc không được
coi là nút trong và không có liên kết hậu tố nào bắt đầu từ nó. Ví dụ như hình
dưới đây, liên kết hậu tố được thể hiện là đường nét gạch nối.

16


Hình 2.3. Cây hậu tố tổng quát và các liên kết.

2.3. Biểu diễn cây hậu tố tổng quát trong máy tính
Một cách hiệu quả để biểu diễn các cạnh giả sử là S[p...q] của cây hậu
tố thay vì biểu diễn tường minh nhãn cạnh của chúng, ta chỉ mô tả là một cặp
số nguyên (p,q). Do đó mỗi cạnh có thể lưu trữ với kích thước là hằng số, vì
vậy không gian lưu trữ cây hậu tố là O(m). Cây hậu tố tổng quát có thể chứa
rất nhiều chuỗi khác nhau nên mỗi cạnh khi lưu trữ cần lưu cả chỉ số của xâu
con nó biểu diễn. Ví dụ cây hậu tố tổng quát cho hai chuỗi S1 = TACTAG và

S2 = CACT trong bộ nhớ như hình 2.4.

17


Hình 2.4. Biểu diễn cây hậu tố tổng quát trong máy tính.

Trên đây là một số khái niệm về cây hậu tố liên quan, phần tiếp theo
chúng tôi xin trình bày thuật toán dựng cây hậu tố tổng quát của Ukkonen [6].
2.4. Thuật toán dựng cây hậu tố.
2.4.1. Dựng cây hậu tố ngầm định (implicit suffix tree)
Cây hậu tố ngầm định của chuỗi S là cây nhận được từ cây hậu tố của S
sau các bước xử lý:
i) Xóa tất cả các ký tự kết thúc $ trong các nhãn
ii) Xóa các cạnh không có nhãn (cạnh rỗng)
iii) Xóa các nút có ít hơn 2 con
Thuật toán: Gọi cây Ti là cây hậu tố ngầm định cho S[1..i]. Ý tưởng xây
dựng của thuật toán là cập nhất cây T từ cây T2,…Tm+1 trong m pha. Thêm ký tự
S[m+1]=$ thì việc mở rộng cuối cùng ta được cây hậu tố ngầm định chính là
cây hậu tố của S$.
Đầu tiên ta có cây T1 với một cạnh duy nhất chứa S1. Pha i+1 được chia
nhỏ thành i+1 bước mở rộng trong đó ta thêm ký tự Si+1 vào hậu tố S[j..i] của
xâu S[1..i]. Tại bước mở rộng j, xét đường đi từ gốc có nhãn β = S[j..i] và thực
hiện một trong ba luật mở rộng sau đây:
1) Nếu β là nhãn của một nút lá: ký tự Si+1 được thêm vào cạnh nối với
18


nút lá đó.
2) Nếu không có đường đi từ β bắt đầu bằng Si+1 nhưng có ít nhất một

đường đi nối tiếp β: trường hợp này ta thêm một cạnh có nhãn là Si+1,
nếu β kết thúc ở giữa một cạnh thì tạo một nút mới.
3) Nếu có đường đi nối tiếp β bắt đầu bằng Si+1: không làm gì và
chuyển sang bước tiếp theo.
Tại bước mở rộng i+1 của pha i+1, β là xâu rỗng, thuật toán đơn giản
thêm ký tự Si+1 bên dưới nút gốc (trừ khi nó đã có).
Xét ví dụ trong hình 2.5 bốn hậu tố đầu tiên kết thúc ở nút lá, hậu tố cuối
cùng chỉ gồm ký tự x kết thúc bên trong mỗi cạnh. Khi thêm ký tự thứ sáu b,
bốn hậu tố đầu tiên được mở rộng bằng luật 1, hậu tố thứ năm sử dụng luật 2
và với hậu tố thứ sáu là luật 3.

(a)

(b)

Hình 2.5. Cây hậu tố ngầm định cho xâu axabx trước (a) và sau (b) khi thêm ký tự thứ sáu b.

Dế dàng thấy rằng ta có thể tìm thấy điểm kết thúc của mỗi hậu tố trong
i+1 hậu tố của xâu S[1..i] bằng cách duyệt cây từ gốc với chi phí thời gian là
O(|β|). Trong thuật toán Ukkonen, mỗi nút trong mới được tạo ra sẽ có một
liên kết hậu tố khi pha tiếp theo kết thúc. Liên kết hậu tố có thể được sử dụng
để giảm độ phức tạp khi thao tác.
Đường đi có nhãn S[1..i] chắc chắn phải kết thúc ở lá và nó có đường
đi dài nhất trong cây Ti. Khi xây dựng cây Ti ta lưu lại nút lá tương ứng với

19


toàn bộ xâu đang xét S[1..i]. Bước bổ sung đầu tiên của pha i+1 lấy nút lá này
và áp dụng luật thứ nhất do đó chỉ cần thời gian hằng số [4].

Đặt S[1..i] = xα và (v, 1) là cạnh đến nút lá, nhãn của cạnh là γ, bước
mở rộng tiếp theo thuật toán cần tìm đường đi có nhãn là S[2..i] = α. Nếu v là
nút gốc, ta duyệt cây từ gốc theo thuật toán trước. Nếu v không phải nút gốc
thì có liên kết hậu tố từ v đến nút s(v), ta bắt đầu duyệt cây từ nút s(v). Đường
đi từ vị trí hiện tại có nhãn γ là đường đi từ gốc có nhãn α.
Tại bước mở rộng thứ j với j > 2 ta cũng làm tương tự. Bắt đầu và kết
thúc của S[j-1..i] là nhãn của một nút trong, khi đó ta có liên kết hậu tố của
nút này. Kể cả khi xâu S[j-1..i] kết thúc ở một nút lá thì nút cha của nó hoặc
là một nút trong (do đó có liên kết hậu tố) hoặc là nút gốc. Vậy ta không bao
giờ phải đi ngược lên quá một cạnh.

Hình 2.6. Bước mở rộng j > 1 trong pha i. Đi lên tối đa là cạnh từ cuối đường đi S[j-1..i]
đến nút v sau đó theo liên kết hậu tố đến s(v), đi xuống theo đường đi có nhãn γ rồi áp
dụng luật bổ sung phù hợp để thêm hậu tố S[j..i+1].

Việc tìm đường đi có nhãn γ theo cách thông thường cần thời gian O(|
γ|), do đường đi nhãn γ chắc chắn tồn tại và không có hai cạnh nào cùng xuất
phát từ một đỉnh có nhãn bắt đầu cùng một ký tự nên ta có thể dựa vào ký tự
đầu nhãn và độ dài của cạnh để tìm ra điểm kết thúc của đường đi trong thời
gian tỉ lệ với số nút trên đường đi.
20


Gọi (v, s(v)) là một liên kết hậu tố, thì độ sâu nút của v tối đa lớn hơn
độ sâu nút của s(v) một đơn vị. Với mỗi nút v trên đường đi xα, có một nút
s(v) trên đường đi α. Tuy nhiên, độ sâu của v có thể lớn hơn, bằng hoặc nhỏ
hơn độ sâu của nút s(v) một đơn vị.
Mặc dù đã được cải thiện tại mỗi pha của thuật toán Ukkonen có thể
được thực hiện trong thời gian O(m). Tuy nhiên đến đây chúng ta vẫn thấy
rằng độ phức tạp của nó được thực hiện trong thời gian O(m2).

Để thuật toán dựng cây hậu tố ngầm định đạt được trong thời gian
tuyến tính chúng ta có một số nhận xét sau đây:
Nhận xét 1: Luật mở rộng 3 kết thúc mỗi pha [5].
Nếu luật 3 được áp dụng nghĩa là đường đi có nhãn S[j..i] chắc chắn
được nối tiếp bằng ký tự Si+1 nên tất cả các đường đi có nhãn S[k..i] với k > j.
Gọi j* là chỉ số của bước mở rộng đầu tiên khi luật 3 được áp dụng. Theo đó
ta không cần thực hiện các bước mở rộng k với k > j* trong pha hiện tại.
Nhận xét 2: Khi đã là nút lá thì luôn luôn là nút lá [5].
Rõ ràng trong 3 luật mở rộng không có luật nào cho phép thêm một nút
lá mới bên dưới một nút lá có nhãn α. Do đó khi một nút lá đã được tạo ra thì
nó sẽ luôn luôn là nút lá cho đến khi pha cuối cùng của thuật toán kết thúc.
Với nhận xét trên gợi ý cách cài đặt hiệu quả thuật toán: thay vì cập
nhật nhãn của các nút lá một cách tường minh, ta gán nhãn cho các nút lá là
cặp (p,ε). Trong đó p là vị trí bắt đầu của xâu con và ε là vị trí kết thúc của
xâu con trong S, thay thế cho vị trí cuối xâu đang xét. Như vậy trong pha i+1
ta không cần thực hiện ji bước mở rộng tường minh đầu tiên. Điểm mà ta thấy
phù hợp với hậu duệ đầu tiên được gọi là điểm kết thúc. Bằng cách xét các
điểm kết thúc, ta sẽ biết các điểm hoạt động sẽ được đi qua tiếp theo.

21


Thuật toán Ukkonen dựng cây hậu tố ngầm định:
input: Chuỗi S.
Dựng cây hậu tố ngầm định T1. // T1 có một cạnh đơn nhãn là S[1].
for i = 1 to m-1 do
begin

// Giai đoạn i+1.
// Cập nhật Ti (với tất cả các hậu tố của S[1..i] đến

Ti+1 với tất các hậu tố S[1..i+1])

for j = 1 to i+1 do
begin

// Mở rộng j

Trong cây hiện tại, tìm vị trí kết thúc của đường đi từ
gốc có nhãn t[j..i]. Để có thể, mở rộng đường đi bằng
cách thêm ký tự t[i+1], để có xâu t[j..i+1] trong cây.
end;
end;

Như vậy, sử dụng liên kết hậu tố và các nhận xét trên, giải thuật Ukkonen có
thể dựng cây hậu tố ngầm định trong thời gian O(m).
Trong mỗi pha i của thuật toán, ta chỉ cần thực hiện các bước mở rộng
tường minh từ ji-1 đến j*. Do bước mở rộng cuối cùng theo luật 1 hoặc 2 được
áp dụng chính là một bước trước khi luật 3 lần đầu tiên được áp dụng nên ta
có ji = j*-1. Như vậy số bước mở rộng được thực hiện có thể tính theo công
thức:



m

i=2

( j i − ji −1 + 1) + 1 = j m − j1 + m ≤ 2m

. Vậy thời gian thực hiện của thuật


toán là O(m). Như hình minh họa quá trình thực hiện của thuật toán dưới đây,
mỗi dòng là một giai đoạn trong thuật toán, mỗi số là một bước mở rộng
tường minh được thực hiện.

22


Dưới đây là hình ảnh minh họa quá trình thực hiện của thuật toán:

Hình 2.7. Quá trình thực hiện của thuật toán

Cây hậu tố ngầm định cuối cùng Tm được chuyển thành cây hậu tố thực
sự trong thời gian O(m). Ta chỉ việc thêm ký tự $ vào cuối chuỗi S và thực
hiện thuật toán, kết quả là một cây hậu tố ngầm định của chuỗi mà không có
hậu tố nào là tiền tố của hậu tố khác.
2.4.2. Dựng cây hậu tố tổng quát
Áp dụng thuật toán Ukkonen như đã trình bày ta dễ dàng dựng cây hậu
tố tổng quát trong thời gian O(n) với n là tổng độ dài các chuỗi.
Đầu tiên ta dựng cây hậu tố thông thường cho xâu S1. Với các xâu S2,
S3, .. , SK trước tiên ta tìm tiền tố dài nhất Sk[1..i] đã tồn tại trong cây. Ta thực
hiện các giai đoạn i+1, i+2, ... mk của thuật toán để mở rộng cây hậu tố tổng
quát cho toàn bộ xâu.
Việc tìm tiền tố dài nhất đã có trong cây đồng nghĩa với việc tìm đường
đi dài nhất trong cây có nhãn Sk[1..i] bằng cách duyệt từng ký tự trên đường
đi từ gốc. Có hai trường hợp xảy ra:
1. Đường đi kết thúc ở nút v (có thể là nút gốc): thêm nút con mới nối
với v bằng cạnh có nhãn là Sk[i+1].
2. Đường đi kết thúc giữa một cạnh: chia đôi cạnh tại điểm đường đi
kết thúc và tạo ra nút mới v. Tạo nút con của v nối với nó bằng cạnh Sk[i+1].

Sau khi thực hiện xong bước mở rộng đầu tiên của giai đoạn i+1 đã
hoàn thành, ta có thể đi theo nút cha của v, theo liên kết hậu tố để thực hiện
23


các bước tiếp theo. Lưu ý trong trường hợp 2 ta cũng cần đảm bảo liên kết
hậu tố của v sẽ được thiết lập trong bước mở rộng tiếp theo.
2.5. Ứng dụng cây hậu tố.
Cây hậu tố thường được sử dụng trong nhiều ứng dụng khác nhau, đặc
biệt trong lĩnh vực Tin sinh học như: tìm kiếm các mẫu trình tự DNA; sắp xếp
các chuỗi gien hay Protein (mà có thể được xem như chuỗi dài các ký tự);
trong nén dữ liệu... Cây hậu tố cũng được sử dụng trong phân tích cụm dữ
liệu biểu hiện gien [17], để tìm kiếm các bicluster trong dữ liệu biểu hiện gien
(chúng tôi sẽ trình bày chi tiết ở phần chương 3).
Với nhiều ứng dụng và thường cung cấp giải pháp trong thời gian tuyến
tính, dưới đây là một số ứng dụng của cây hậu tố:
• Chuỗi con chung dài nhất (Longest Common Substring):
Chuỗi con của một chuỗi S là chuỗi thu được bằng cách chọn ra một số ký
tự liên tục trong S. Nói cách khác. Giả sử S=S1S2...Sm, một chuỗi
Z=Si+1Si+2...Si+t với i ≥ 0 và i+t ≤ m là chuỗi con của S. Ví dụ: chuỗi Z=bcd là
chuỗi con của chuỗi S=aabcbcdabdab.
Cho hai chuỗi S và T, ta nói Z là chuỗi con chung của S và T nếu Z
đồng thời là chuỗi con của cả hai. Ví dụ: S=abcdefg và T=bccdegf có:


Z = bc là chuỗi con chung.



Chuỗi efg không phải chuỗi con chung.




Z = bc có độ dài 2 không phải là chuỗi con chung dài nhất.
√ Chuỗi cde là chuỗi con dài nhất có độ dài 3.
Trong cây hậu tố tổng quát của chuỗi S và T, đánh dấu các nút trong
bằng 1 (hoặc 2) nếu cây con tại nút đó chứa nút lá có nhãn 1 (hoặc 2). Nhãn
của đường đi từ gốc đến nút được đánh dấu cả hai là một chuỗi con chung của
hai chuỗi. Nút có nhãn dài nhất hay độ sâu đường đi lớn nhất cho ta lời giải
của bài toán.
24


• Chuỗi con chung có chiều dài k (Common substrings of length k):
Cho m chuỗi S1, S2, ..., Sm, với mỗi giá trị k từ 2 đến m, gọi là l(k), là độ dài
của chuỗi con chung dài nhất của ít nhất k chuỗi trong tập đã cho.
Ví dụ. Xác định chuỗi con chung dài nhất của ít nhất hai chuỗi: Cho tập
gồm m chuỗi, l(k) (2 ≤ k ≤ m) là chiều dài của chuỗi con chung dài nhất tối
thiểu là k của m chuỗi. Ví dụ cho các chuỗi sau: {sanddollar, sandlot, handler,
grand, pantry} ta có:
k
l(k) chuỗi
2
4
sand
3
3
and
4
3

and
5
2
an
Như vậy vấn đề chuỗi con chung dài nhất của ít nhất hai chuỗi có thể được
thực hiện như sau:
- Input: Các chuỗi S1, …, Sm (tổng chiều dài n)
- Output: l(k) (2 ≤ k ≤ m) - các chuỗi con và độ dài của nó.

Xây dựng cây hậu tố tổng quát cho m chuỗi, mỗi chuỗi duy nhất có một
ký tự kết thúc.
Kết luận
Trong chương này, chúng tôi đã trình bày tổng quan về các chức năng
của cây hậu tố, một số kiến thức liên quan đến việc tìm kiếm chuỗi. Những
kiến thức quan trọng này sẽ làm nền tảng cho các kết quả sẽ trình bày trong
các chương tiếp theo của luận văn.

25


×