Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 70 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
70
Dung lượng
1,38 MB
Nội dung
ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CNTT & TRUYỀN THÔNG TRẦN ĐỨC THUẬN PHÂN CỤM DỮ LIỆU VÀ ỨNG DỤNG TRONG PHÂN LOẠI CẤU TRÚC PROTEIN LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH THÁI NGUYÊN - 2012 Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CNTT & TRUYỀN THÔNG TRẦN ĐỨC THUẬN PHÂN CỤM DỮ LIỆU VÀ ỨNG DỤNG TRONG PHÂN LOẠI CẤU TRÚC PROTEIN Chuyên ngành: Khoa học máy tính Mã số: 60.48.01 LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH Người hướng dẫn khoa học: PGS.TS ĐOÀN VĂN BAN THÁI NGUYÊN - 2012 Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn i LỜI CAM ĐOAN Tôi xin cam đoan luận văn “Phân cụm liệu ứng dụng phân loại cấu trúc protein" cơng trình nghiên cứu riêng Các số liệu luận văn đƣợc sử dụng trung thực Kết nghiên cứu đƣợc trình bày luận văn chƣa đƣợc cơng bố cơng trình khác Tơi xin chân thành cảm ơn thầy cô Viện Công nghệ Thông tin, thầy cô Trƣờng Công Nghệ Thông Tin Truyền thông Thái Nguyên, thầy giáo Trần Đăng Hƣng - Giảng viên Khoa Công nghệ thơng tin Trung tâm khoa học tính tốn, Đại học Sƣ phạm Hà Nội, bạn bè, đồng nghiệp Trung tâm Thông tin Công nghệ - Sở Khoa học Công nghệ Thái Nguyên, Cục Dự trữ Nhà nƣớc khu vực Bắc Thái giúp đỡ nhiều q trình học tập, sƣu tầm, tìm tịi tài liệu cơng tác để tơi hồn thành luận văn Tơi xin bày tỏ lịng kính trọng, biết ơn sâu sắc tới PGS.TS Đồn Văn Ban, ngƣời trực tiếp hƣớng dẫn, giúp đỡ suốt thời gian thực luận văn Thái Nguyên, tháng 08 năm 2012 Học viên Trần Đức Thuận Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn ii MỤC LỤC Lời cam đoan i Mục lục ii Danh mục bảng biểu v Danh mục hình v Mở đầu 1 Lý chọn đề tài Mục tiêu nghiên cứu Phƣơng pháp nghiên cứu Tổng quan luận văn CHƢƠNG 1-TỔNG QUAN LÝ THUYẾT VỀ PHÂN CỤM DỮ LIỆU 1.1 Tổng quan phân cụm liệu 1.2 Phân cụm phân loại liệu 1.3 Các yêu cầu phân cụm liệu 1.4 Các kiểu liệu phân cụm 1.4.1 Phân loại kiểu liệu dựa kích thƣớc miền 1.4.2 Phân loại kiểu liệu dựa hệ đo 1.5 Các phép đo độ tƣơng tự khoảng cách kiểu liệu 10 1.5.1 Khái niệm tƣơng tự phi tƣơng tự 10 1.5.2 Thuộc tính khoảng cách 11 1.5.3 Thuộc tính nhị phân 13 1.5.4 Thuộc tính định danh 15 1.5.5 Thuộc tính có thứ tự 16 1.5.6 Thuộc tính tỉ lệ 16 1.6 Kết luận chƣơng 17 CHƢƠNG - KỸ THUẬT PHÂN CỤM DỮ LIỆU ỨNG DỤNG TRONG PHÂN LOẠI CẤU TRÚC PROTEIN 18 2.1 Giới thiệu 18 2.2 Thuật toán K-means 18 2.3 Thuật toán PAM 22 2.4 Thuật toán CLARA 24 2.5 Thuật toán CLARANS 26 Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn iii 2.6 Kết luận chƣơng 28 CHƢƠNG - TIN SINH HỌC VÀ PHÂN LOẠI CẤU TRÚC PROTEIN 29 3.1 Tổng quan tin sinh học 29 3.1.1 Chủ thuyết trung tâm sinh học phân tử 29 3.1.2 DNA (DesoxyriboNucleic Acid) 30 3.1.3 RNA (RiboNucleic Acid) 31 3.1.4 Protein 31 3.1.5 Các dạng protein 32 3.2 Các phƣơng pháp phân loại cấu trúc protein 34 3.2.1 Phân loại cấu trúc với SCOP 38 3.2.2 Phân loại cấu trúc với CATH 39 3.2.3 Phân loại cấu trúc với phân loại miền Dali (DDD) 40 3.3 Kết luận chƣơng 41 CHƢƠNG - CHƢƠNG TRÌNH DEMO VỚI PHẦN MỀM CLUSTERS 3.0 42 4.1 Phần mềm Clusters 3.0 42 4.1.1 Yêu cầu phần cứng 42 4.1.2 Nguồn liệu demo chƣơng trình 42 4.1.3 Sử dụng thƣ viện phân cụm 42 4.2 Sử dụng thuật toán K-mean, K-medians 43 4.2.1 Khởi tạo 43 4.2.2 Tìm trọng tâm cụm 44 4.2.3 Tìm trung bình cụm, trung vị cụm 44 4.2.4 Tìm giải pháp tối ƣu với K-means K-medians 46 4.3 Phần mềm demo 48 4.3.1 Đầu vào chƣơng trình 48 4.3.2 Giao diện số chức chƣơng trình 49 4.3.3 Tệp đầu chƣơng trình 52 KẾT LUẬN VÀ HƢỚNG NGHIÊN CỨU 53 Kết luận 53 Hƣớng nghiên cứu thời gian tới 53 TÀI LIỆU THAM KHẢO 54 PHỤ LỤC 56 Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn iv BẢNG KÝ HIỆU CÁC CHỮ VIẾT TẮT Chữ viết tắt Nghĩa tiếng anh Nghĩa tiếng việt DesoxyriboNucleic Acid Phân tử nucleic acid mang thông tin di truyền mã hóa cho hoạt động sinh trƣởng phát triển dạng sống RNA RiboNucleic Acid Là hai loại axít nucleic, sở di truyền cấp độ phân PAM Partitioning Around Medoids Thuật toán phân cụm phân vùng xung quanh Medoids CLARA Clustering Large Application Thuật toán phân cụm ứng dụng lớn CLARANS Clustering Large Applications Thuật toán phân cụm với ứng based upon RANdomized dụng lớn sở tìm kiếm Search ngẫu nhiên rRNA ribosome RNA Là ARN mã hóa mang thơng tin từ ADN tRNA transfer RNA Là RNA vận chuyển mRNA messenger RNA RNA thông tin SCOP Structural Classification of Proteins Phân loại cấu trúc protein CATH Class Architecture Topology Homologous superfamily Phân loại cấu trúc protein với CATH DDD Dali Domain Dictionary Từ điển miền Dali PDB Protein Data Bank Ngân hàng liệu protein FSSP Families of Structurally Similar Proteins Dòng họ protein với cấu trúc tƣơng tự DNA Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn v DANH MỤC BẢNG BIỂU Bảng 1.1 Bảng dự đoán cho hai đối tƣợng nhị phân x y…………… 14 Bảng 1.2 Ví dụ độ phi tƣơng tự thuộc tính nhị phân…………… 15 Bảng 2.1 Bảng so sánh thuật toán phân cụm trung tâm…………… 28 Bảng 3.1 Đƣa số nguồn tài nguyên phân loại trình tự protein… 35 Bảng 3.2 Nguồn tài nguyên cho phân loại cấu trúc protein…………… 36 Bảng 3.3 Các cấp độ CATH………………………………… 39 DANH MỤC CÁC HÌNH Hình 1.1 Phân cụm vector truy vấn Hình 1.2 Hình thành cụm cha Hình 1.3 Các tỉ lệ khác dẫn tới cụm khác Hình 2.1 Sơ đồ phân loại phƣơng pháp phân cụm………………… Hình 2.2 Các thiết lập để xác định danh giới cụm ban đầu Hình 2.3 Tính tốn trọng tâm cụm Hình 2.4 Ví dụ minh họa thuật tốn K-means Hình 2.5 Ví dụ minh họa thuật tốn PAM Hình 3.1 Chủ thuyết trung tâm sinh học phân tử Hình 3.2 Cấu trúc DNA Hình 3.3 Các kiểu cấu trúc Protein Hình 3.4 Cấu trúc bậc thƣờng thấy protein Hình 3.5 Hai ví dụ protein màng Hình 3.6 Sự phát triển cấu trúc liệu protein Hình 4.1 Đầu vào liệu……………………………………………… Hình 4.2 Giao diện chọn tệp đầu vào…………………………………… Hình 4.3 Giao diện tab Lọc liệu…………………………………… Hình 4.4 Giao diện tab chỉnh sửa liệu……………………………… Hình 4.5 Giao diện Tab K-Means, sử dụng K-means K-medians để phân cụm………………………………………………………………… Hình 4.6 Đầu liệu………………………………………………… Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn 12 18 19 20 21 24 30 30 32 33 34 35 48 49 49 50 51 52 MỞ ĐẦU LÝ DO CHỌN ĐỀ TÀI Với phát triển vƣợt bậc công nghệ thông tin, đặc biệt ứng dụng công nghệ thông tin vào ngành sinh học giúp ích nhiều cho việc tìm hiểu nghiên cứu sinh học phân tử Chính Tin sinh học, lĩnh vực mới, đời, sử dụng cơng nghệ ngành tốn học ứng dụng, tin học, thống kê, khoa học máy tính, trí tuệ nhân tạo, hóa học, sinh học để giải vấn đề sinh học Nhƣ biết, sở phân tử sống dựa hoạt động phân tử sinh học, bao gồm axit nucleic (DNA RNA), carbohydrate, chất béo, protein Mặc dù loại đóng vai trị thiết yếu sống, nhƣng protein có bật chúng thành phần biểu diễn chức tế bào Chính vậy, tìm hiểu nghiên cứu cấu trúc phân tử sinh học lên nhƣ hƣớng với trải nghiệm hƣớng vào việc khám phá cấu trúc phân tử sinh học Hƣớng phát triển sinh học trải qua với phát triển cao thông qua nghiên cứu cấu trúc với mục đích có nhìn tồn diện không gian cấu trúc protein, thông tin lƣu trữ liệu cấu trúc protein chìa khóa để thành công nằm khả để tổ chức, phân tích thơng tin chứa sở liệu, tích hợp thơng tin với nỗ lực khác nhằm giải bí ẩn chức tế bào Nhận thấy tính thiết thực vấn đề đƣợc gợi ý giảng viên hƣớng dẫn, em chọn đề tài "Phân cụm liệu ứng dụng phân loại cấu trúc protein" MỤC TIÊU NGHIÊN CỨU - Tìm hiểu tổng quan lý thuyết phân cụm liệu - Nghiên cứu số kỹ thuật phân cụm liệu ứng dụng phân loại cấu trúc protein Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn - Tìm hiểu Tin sinh học số vấn đề liên quan, nghiên cứu phƣơng pháp phân loại cấu trúc protein - Tìm hiểu sử dụng phần mềm Cluster 3.0 ứng dụng vào phân loại cấu trúc protein PHƢƠNG PHÁP NGHIÊN CỨU - Nghiên cứu qua tài liệu nhƣ: sách, sách điện tử, báo, thông tin tài liệu website tài liệu liên quan - Phân tích, tổng hợp lý thuyết giới thiệu phân cụm liệu số thuật toán phân cụm liệu dựa vào cụm trung tâm ứng dụng phân loại cấu trúc protein - Tìm hiểu sử dụng phần mềm Cluster 3.0 ứng dụng thuật toán Kmeans để phân loại cấu trúc protein TỔNG QUAN LUẬN VĂN Luận văn đƣợc trình bày chƣơng phần kết luận, với nội dung đƣợc trình bày từ việc tìm hiểu khái niệm đến nội dung cần sâu tìm hiểu, giúp ngƣời đọc có nhìn tổng quan nhƣ vấn đề đƣợc nghiên cứu: - Chƣơng - Tổng quan: Giới thiệu tổng quan lý thuyết phân cụm liệu - Chƣơng - Một số kỹ thuật phân cụm liệu ứng dụng phân loại cấu trúc protein - Chƣơng - Tin sinh học Phân loại cấu trúc Protein - Chƣơng - Chƣơng trình Demo với phần mềm cluster 3.0 - Kết luận - Tóm tắt nội dung chính, kết đạt đƣợc hƣớng nghiên cứu luận văn Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn CHƢƠNG TỔNG QUAN LÝ THUYẾT VỀ PHÂN CỤM DỮ LIỆU 1.1 TỔNG QUAN VỀ PHÂN CỤM DỮ LIỆU Phân cụm chia liệu thành nhóm mà đối tƣợng nhóm giống theo nghĩa khác với đối tƣợng nhóm khác Mỗi nhóm đƣợc gọi cluster Mỗi đối tƣợng đƣợc mô tả tập độ đo mối quan hệ với đối tƣợng khác Cũng có nhiều định nghĩa cluster, nhƣng định nghĩa sau đƣợc sử dụng nhiều [4]: - "Một cluster tập đối tƣợng giống khác với đối tƣợng khơng cluster đó" - "Một cluster tập điểm không gian mà khoảng cách hai điểm ln nhỏ khoảng cách điểm điểm ngồi" - "Các cluster đƣợc mô tả nhƣ miền liên thông không gian đa chiều chứa mật độ tƣơng đối cao điểm, phân biệt miền mật độ thấp điểm" Phân cụm có ý nghĩa quan trọng hoạt động ngƣời từ y tế, giáo dục, xử lý thơng tin, nghiên cứu phân tích thị trƣờng,… Phân cụm đƣợc sử dụng rộng rãi nhiều ứng dụng, bao gồm nhận dạng mẫu, phân tích liệu, xử lý ảnh, nghiên cứu thị trƣờng, phân loại tin sinh học,… Bằng phân cụm, thƣơng mại giúp nhà phân tích thị trƣờng tìm nhóm khách hàng có nhu cầu riêng dựa độ tuổi, sở thích tâm lý tiêu dùng Trong sinh học, đƣợc sử dụng để phân loại thực vật, động vật, phân loại cấu trúc protein dựa cấu trúc tƣơng đồng vốn có, từ xây dựng ngân hàng liệu protein Trong xử lý thông tin, phân cụm giúp phân loại tài liệu với dạng lƣu trữ văn, đĩa Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn 49 4.3.2 Giao diện số chức chƣơng trình - Giao diện chọn file đầu vào: Hình 4.2 Giao diện chọn tệp đầu vào - Giao diện tab Lọc liệu: Hình 4.3 Giao diện tab Lọc liệu Tab Data Filter cho phép ta để loại bỏ gen thuộc tính mong muốn từ sở liệu Các thuộc tính đƣợc sử dụng để lọc liệu % Present> = X - Thuộc tính cho phép loại bỏ tất gen bị giá trị lớn (100 - X ) phần trăm cột SW (Gene Vector)> = X - Điều loại bỏ tất gen có độ lệch chuẩn giá trị nhận xét đƣợc X Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn 50 At least X observation with abs (Val)> = Y Điều loại bỏ tất gen khơng có X nhận xét với giá trị tuyệt đối lớn so với Y MaxVal - MinVal> = X Điều loại bỏ tất gene có giá trị tối đa trừ giá trị tối thiểu nhỏ so với X Ghi chú: Khi ta bấm nút Filter, lọc không áp dụng cho tập liệu Khi lần bấm Filter, có thơng báo có gen thông qua lọc Nếu muốn chấp nhận kết lọc, bấm Accept, khơng khơng có thay đổi đƣợc thực - Giao diện tab Chỉnh sửa liệu: Hình 4.4 Giao diện tab chỉnh sửa liệu Từ tab liệu Ajust data, ta thực số hoạt động thay đổi liệu từ liệu đầu vào Các hoạt động là: - Log Transform Data: thay tất liệu giá trị x cách đăng log2(x) - Center genes [mean median]: Tùy chọn mean median từ giá trị hàng liệu, giá trị trung bình trung bình hàng Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn 51 - Center arrays [mean median]: Trừ cột mean median từ giá trị cột liệu, giá trị trung bình trung bình cột - Normalize genes: Nhân tất giá trị hàng liệu với hệ số tỷ lệ S để tổng bình phƣơng giá trị hàng 1.0 (riêng S đƣợc tính cho hàng) - Normalize genes: Nhân tất giá trị cột liệu với hệ số tỉ lệ S để tổng bình phƣơng giá trị cột 1.0 (riêng S đƣợc tính cho cột) Các hoạt động riêng rẽ, thứ tự hoạt động đƣợc áp dụng quan trọng, nên xem xét cẩn thận trƣớc áp dụng hoạt động Thứ tự hoạt động: + Log transform all values + Center rows by subtracting the mean or median + Normalize rows + Center columns by subtracting the mean or median + Normalize columns - Giao diện Tab k-Means, sử dụng K-means K-medians để phân cụm Hình 4.5 Giao diện Tab k-Means, sử dụng K-means K-medians Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn 52 Với hai khung Genes Arrays, ngƣời dùng chọn trƣớc số cụm k số lần chạy thuật tốn nhƣ hình vẽ Chƣơng trình cho phép ngƣời dùng sử dụng loại K-means K-medians chọn độ đo tƣơng tự với tùy chọn nhƣ tính theo khoảng cách Euclide khoảng cách City-block 4.3.3 Tệp đầu chƣơng trình Là file text (Có thể mở tệp đầu Excel) với gen có cấu trúc tƣơng tự đƣợc phân cụm xếp theo tham số đầu vào chƣơng trình Hình 4.6 Đầu liệu Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn 53 KẾT LUẬN VÀ HƢỚNG NGHIÊN CỨU KẾT LUẬN Trong luận văn tơi tìm hiểu, nghiên cứu số vấn đề sau: - Luận văn trình bày lý thuyết phân cụm liệu, số thuật toán phân cụm liệu dựa vào cụm trung tâm để ứng dụng vào phân loại cấu trúc protein - Giới thiệu Protein, cấu trúc, chức protein, số phƣơng pháp phân loại cấu trúc protein - Luận văn sử dụng chƣơng trình Cluster 3.0 với mục đích biểu diễn phân cụm liệu sử dụng thuật tốn K-means K-medians Chƣơng trình có sử dụng thƣ viện phân cụm C áp dụng thuật tốn K-means, Kmedians để tìm trung tâm cụm, trung vị cụm xử lý phân cụm dựa hai thuật toán Với nhiệm vụ nghiên cứu tìm hiểu việc áp dụng số thuật tốn phân cụm để phân loại cấu trúc protein Tuy nhiên chƣơng trình có nhiều hạn chế: - Chƣơng trình sử dụng đầu vào tập tin txt (có thể mở với excel) chƣa sử dụng định dạng protein từ đƣợc ngân hàng liệu protein PDB để phân loại - Chƣơng trình dừng việc sử dụng thuật toán K-means K-medians HƢỚNG NGHIÊN CỨU TRONG THỜI GIAN TỚI Trong tƣơng lai đề tài phát triển theo hƣớng nghiên cứu phân loại Protein với phân loại trình tự, phân loại cấu trúc protein Tìm hiểu ngân hàng liệu protein sử dụng nguồn liệu chƣơng trình Cơ sở liệu protein lớn đa dạng cho nhiều loài, cần sử dụng thuật tốn có tốc độ xử lý tốt Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn 54 TÀI LIỆU THAM KHẢO Tiếng Việt [1] Lƣu Thị Hải Yến (2008), Luận văn Thạc sỹ - Đề tài: Nghiên cứu phát triển hệ thống đa phương tiện sở phân cụm liệu, Đại học Thái Nguyên- Khoa công nghệ thông tin [2] Nguyễn Q.D., Trần Đ.H., Trần T.T.B., Phạm T.H (2011) Dự đoán chức protein phƣơng pháp phân cụm liệu, Đặc san CNTT, Tạp chí Khoa học ĐHSPHN, 56, 3-16 Tiếng Anh [3] A.K Jain, M.N Murty and P,J Flyn (1999), Data Clustering: A Review, ACM Computing Survey [4] A.K Jain, Richard C Dubes (1988), Algorithms for Clustering Data, Prentice Hall, Englewood Cliffs, New Jersey 07632 [5] Patrice Koehl (2006), Protein Structure Classification, Department of Computer Science and Genome Center, University of California, Davis, California [6] Michiel Jan Laurens de Hoon (2010), The C Clustering Library for cDNA microarray data, The University of Tokyo, Institute of Medical Science, Human Genome Center, University of Tokyo, 4-6-1 Shirokanedai, Minato-ku, Tokyo 108-8639, Japan [7] Michael Eisen; updated by Michiel de Hoon (2002), Cluster 3.0 Manual, Human Genome Center, University of Tokyo, 4-6-1 Shirokanedai, Minato-ku, Tokyo 108-8639, Japan [8] Michelle Kamber and Jiawei Han (2001), Data Mining: Concepts and Techniques Morgan Kaufmann Publishers, University of Illinois at Urbana-Champaign, 500 Sansome Street, Suite 400, San Francisco, CA 94111 Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn 55 [9] Michael R Anderberg (1973), Cluster analysis for applications Academic Press [10] Periklis Andritsos (2002), Data Clustering Technique, University of Toronto, Department of Computer Science Nguồn internet: [11] http://bonsai.hgc.jp/~mdehoon/software/cluster/software.htm [12] http://en.wikipedia.org/wiki/Structural_Classification_of_Proteins_ database [13] http://en.wikipedia.org/wiki/CATH [14] http://rana.lbl.gov/EisenSoftware.htm [15] http://www.agbiotech.com.vn/vn/?mnu=preview&key=475 Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn 56 PHỤ LỤC /* ********HÀM GETCLUSTERCENTROIDS*******/ int getclustercentroids(int nclusters, int nrows, int ncolumns,double** data, int** mask, int clusterid[], double** cdata, int** cmask,int transpose, char method) { switch(method) { case 'm': { const int nelements = (transpose==0) ? nrows: ncolumns; double* cache = malloc(nelements*sizeof(double)); if (!cache) return 0; getclustermedians(nclusters, nrows, ncolumns, data, mask, clusterid, cdata, cmask, transpose, cache); free(cache); return 1; } case 'a': { getclustermeans(nclusters, nrows, ncolumns, data, mask, clusterid, cdata, cmask, transpose); return 1; } } return 0; } /* **********THỦ TỤC GETCLUSTERMEANS******* */ static void getclustermeans(int nclusters, int nrows, int ncolumns, double** data, int** mask, int clusterid[], double** cdata, int** cmask, int transpose) { int i, j, k; if (transpose==0) { for (i = 0; i < nclusters; i++) { for (j = 0; j < ncolumns; j++) { cmask[i][j] = 0; cdata[i][j] = 0.; } } for (k = 0; k < nrows; k++) { i = clusterid[k]; for (j = 0; j < ncolumns; j++) { if (mask[k][j] != 0) { cdata[i][j]+=data[k][j]; cmask[i][j]++; } } } for (i = 0; i < nclusters; i++) { for (j = 0; j < ncolumns; j++) { if (cmask[i][j]>0) { cdata[i][j] /= cmask[i][j]; cmask[i][j] = 1; } Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn 57 } } } else { for (i = 0; i < nrows; i++) { for (j = 0; j < nclusters; j++) { cdata[i][j] = 0.; cmask[i][j] = 0; } } for (k = 0; k < ncolumns; k++) { i = clusterid[k]; for (j = 0; j < nrows; j++) { if (mask[j][k] != 0) { cdata[j][i]+=data[j][k]; cmask[j][i]++; } } } for (i = 0; i < nrows; i++) { for (j = 0; j < nclusters; j++) { if (cmask[i][j]>0) { cdata[i][j] /= cmask[i][j]; cmask[i][j] = 1; } } } } } /* ****************THỦ TỤC GETCLUSTERMEDIANS***********/ static void getclustermedians(int nclusters, int nrows, int ncolumns, double** data, int** mask, int clusterid[], double** cdata, int** cmask,int transpose, double cache[]) { int i, j, k; if (transpose==0) { for (i = 0; i < nclusters; i++) { for (j = 0; j < ncolumns; j++) { int count = 0; for (k = 0; k < nrows; k++) { if (i==clusterid[k] && mask[k][j]) { cache[count] = data[k][j]; count++; } } if (count>0) { cdata[i][j] = median(count,cache); cmask[i][j] = 1; } else { cdata[i][j] = 0.; cmask[i][j] = 0; } } } } else Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn 58 { for (i = 0; i < nclusters; i++) { for (j = 0; j < nrows; j++) { int count = 0; for (k = 0; k < ncolumns; k++) { if (i==clusterid[k] && mask[j][k]) { cache[count] = data[j][k]; count++; } } if (count>0) { cdata[j][i] = median(count,cache); cmask[j][i] = 1; } else { cdata[j][i] = 0.; cmask[j][i] = 0; } } } } } /* *************THỦ TUC KCLUSTER********** */ void kcluster (int nclusters, int nrows, int ncolumns,double** data, int** mask, double weight[], int transpose,int npass, char method, char dist, int clusterid[], double* error, int* ifound) */ { const int nelements = (transpose==0) ? nrows: ncolumns; const int ndata = (transpose==0) ? ncolumns: nrows; int i; int ok; int* tclusterid; int* mapping = NULL; double** cdata; int** cmask; int* counts; if (nelements < nclusters) { *ifound = 0; return; } /* More clusters asked for than elements available */ *ifound = -1; /* This will contain the number of elements in each cluster, which is * needed to check for empty clusters */ counts = malloc(nclusters*sizeof(int)); if(!counts) return; /* Find out if the user specified an initial clustering */ if (npass1) { free(tclusterid); free(mapping); return; } } if (method=='m') { double* cache = malloc(nelements*sizeof(double)); if(cache) { *ifound = kmedians(nclusters, nrows, ncolumns, data, mask, weight, transpose, npass, dist, cdata, cmask, clusterid, error, tclusterid, counts, mapping, cache); free(cache); } } else *ifound = kmeans(nclusters, nrows, ncolumns, data, mask, weight, transpose, npass, dist, cdata, cmask, clusterid, error, tclusterid, counts, mapping); /* Deallocate temporarily used space */ if (npass > 1) { free(mapping); free(tclusterid); } if (transpose==0) freedatamask(nclusters, cdata, cmask); else freedatamask(ndata, cdata, cmask); free(counts); } /* ********************************************************************* */ static int kmeans(int nclusters, int nrows, int ncolumns, double** data, int** mask, Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn 60 double weight[], int transpose, int npass, char dist, double** cdata, int** cmask, int clusterid[], double* error, int tclusterid[], int counts[], int mapping[]) { int i, j, k; const int nelements = (transpose==0) ? nrows: ncolumns; const int ndata = (transpose==0) ? ncolumns: nrows; int ifound = 1; int ipass = 0; /* Set the metric function as indicated by dist */ double (*metric) (int, double**, double**, int**, int**, const double[], int, int, int) = setmetric(dist); /* We save the clustering solution periodically and check if it reappears */ int* saved = malloc(nelements*sizeof(int)); if (saved==NULL) return -1; *error = DBL_MAX; { double total = DBL_MAX; int counter = 0; int period = 10; /* Perform the EM algorithm First, randomly assign elements to clusters */ if (npass!=0) randomassign (nclusters, nelements, tclusterid); for (i = 0; i < nclusters; i++) counts[i] = 0; for (i = 0; i < nelements; i++) counts[tclusterid[i]]++; /* Start the loop */ while(1) { double previous = total; total = 0.0; if (counter % period == 0) /* Save the current cluster assignments */ { for (i = 0; i < nelements; i++) saved[i] = tclusterid[i]; if (period < INT_MAX / 2) period *= 2; } counter++; /* Find the center */ getclustermeans(nclusters, nrows, ncolumns, data, mask, tclusterid, cdata, cmask, transpose); for (i = 0; i < nelements; i++) /* Calculate the distances */ { double distance; k = tclusterid[i]; if (counts[k]==1) continue; /* No reassignment if that would lead to an empty cluster */ /* Treat the present cluster as a special case */ distance = metric(ndata,data,cdata,mask,cmask,weight,i,k,transpose); Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn 61 for (j = 0; j < nclusters; j++) { double tdistance; if (j==k) continue; tdistance = metric(ndata,data,cdata,mask,cmask,weight,i,j,transpose); if (tdistance < distance) { distance = tdistance; counts[tclusterid[i]] ; tclusterid[i] = j; counts[j]++; } } total += distance; } if (total>=previous) break; /* total>=previous is FALSE on some machines even if total and previous * are bitwise identical */ for (i = 0; i < nelements; i++) if (saved[i]!=tclusterid[i]) break; if (i==nelements) break; /* Identical solution found; break out of this loop */ } if (npass=previous) break; /* total>=previous is FALSE on some machines even if total and previous * are bitwise identical */ for (i = 0; i < nelements; i++) if (saved[i]!=tclusterid[i]) break; if (i==nelements) break; /* Identical solution found; break out of this loop */ } if (npass