Theo kết quả của cả hai thuật toán chạy (Tane và AFDMCEC), đặt cùng một AFDs từ các bộ dữ liệu UCI đã được tạo ra. Cho thấy các kết quả của các lần thực tế thay đổi thuật toán cần thiết cho TANE và cho FDMCEC thuật toán cho các bộ dữ liệu với UCI số thuộc tính khác nhau và bộ dữ liệu và với các ngưỡng khác nhau ε giá trị cho các khám phá tất cả AFDs.
( TANE và AFDMCEC các thuật toán) đối với một số bộ dữ liệu UCI cho ε ngưỡng khác nhau)
Từ Bảng 3.1, cùng AFDs được tìm thấy hiệu quả hơn bằng cách sử dụng thuật toán AFDMCEC với thuật toán Tane.
3.2.2 Những sự so sánh về độ phức tạp Thời gian.
Bảng 3 trình bày những so sánh phức tạp thời gian đó được tính toán trước đó cho AFDMCEC thuật toán và thuật toán TANE
Bảng 3.2: Thời gian phức tạp so sánh dựa trên T (n) cho cả hai thuật toán Cách tiếp cận dựa trên xem xét phân vùng của mối quan hệ và phát sinh phụ thuộc giá trị từ các phân vùng sẽ tìm kiếm thuật toán cho phụ thuộc vào chiều rộng một cách đầu tiên. Không gian tìm kiếm có thể được cắt tỉa một cách hiệu quả và làm thế nào các phân vùng và các phụ thuộc có thể được tính hiệu quả. Thử nghiệm và so sánh kết quả chứng minh rằng thuật toán nhanh chóng trong thực tế và quy mô tính chất của nó lên là cao hơn các phương pháp trước đó. Phương pháp này hoạt động tốt với các mối quan hệ lên đến hàng trăm ngàn bộ dữ liệu.
Ngoài ra còn có các ứng dụng khai thác các dữ liệu khác thú vị cho các phân vùng. Các quy tắc giữa các cặp thuộc tính-giá trị có thể được tính với một thay đổi nhỏ của các thuật toán hiện nay. Một lớp tương đương tương ứng sau đó đến một sự kết hợp đặc biệt giá trị của thuộc tính thiết lập. Bằng cách so sánh các lớp học tương đương thay vì phân vùng đầy đủ, chúng ta có thể tìm luật kết hợp.
KẾT LUẬN
Trong thời đại ngày nay, việc khám phá tri thức trong Cơ sở dữ liệu đang là một hướng quan trọng của nền CNTT thế giới. Nó có khả năng ứng dụng vào rất nhiều toán thực tế khác nhau. Bước quan trọng nhất của quá trình này là Khai phá dữ liệu, người sử dụng thu được những tri thức hữu ích từ những CSDL hoặc các nguồn khác. Chính vì thế, trước các nhu cầu của thực tế mà các nghiên cứu đã và đang không ngừng cải tiến các phương pháp khai phá dữ liệu nhằm đáp ứng ngày một tốt hơn nữa nhằm ứng dụng các phương pháp khai phá dữ liệu cho đời sống kinh tế, xã hội.
Sự phụ thuộc dữ liệu có ảnh hưởng lớn đến việc trích trọn mẫu huấn luyện nhằm xây dựng xây dựng cây quyết định có hiệu quả. Việc nhận ra sự phụ thuộc dữ liệu góp phần làm cải thiện hiệu quả trong bài toán phân lớp.
Việc khai phá dữ liệu ứng dụng phụ thuộc hàm xấp xỉ đã và đang được quan tâm nghiên cứu trong nhiều năm trở lại đây, với TANE, ta có thể tìm ra các phụ thuộc hàm xấp xỉ trên dữ liệu khá hiệu quả. Một trong những ứng dụng của việc tìm ra các phụ thuộc hàm xấp xỉ là xây dựng bảng quyết định. Từ đó xây dựng cây quyết định.
TÀI LIỆU THAM KHẢO
[1] Codd E.F(1970),”A relational model for large shared data banks”, Communication ACM12,pp.377-387
[2] Demetrovics J.,Thi V.D Relations and minimal keys. Acta Cybernetica 8,3(1988), 279-285
[3] Demetrovics J.,Thi V.D On keys in the Relations Datamodel, Inform.Process Cybern.EIK 24,10 (1988), 515-519
[4] Giannella, Chris and Robertson, Edward, 2004 “On Approximation Measures for Functional Dependencies”, Inform Action Systems Archive 29(6), 483-507. [5] Huhtala, Y., Karkkainen, J., Porkka P., and Toivonen, H., 1999. “Tane: An efficient algorithm for discovering functional and approximate dependencies”. The Computer Journal, 42(2):100-111.
[6] Kivinen, J., and Mannila, H., 1995. “Approximate Inference of Functional Dependencies From Relations”. Theoretical Computer Science, 149:129-149. [7] Kwok-Wa Lam, Victor C.S.Lee, Building Decision Trees Using Functional Dependencies, Processdings, of the International Conference on Information Technology: Coding and Computing(ITCC’04), 2004.
PHỤ LỤC Thủ tục Tính phụ thuộc hàm xấp xỉ double tinh_phuthuochamxapxi() { double tong_phan_hoach = 0; double sobanghi = 0;
int [] a = new int [100002];
int vt, j, dem = 0, k, dem_1 = 0, max = 0; string tam = "";
for (int i = 0; i<=100000; i++) a[i] = 0; for (int i = 0; i<=lbX.Items.Count-1; i++) { vt = 0; dem = 0; for (j = 0; j <= lbX.Items[i].Text.Length - 1; j++) if (lbX.Items[i].Text[j] == ' ') { dem++; tam = lbX.Items[i].Text.Substring(vt, j - vt); vt = j;
a[Convert.ToInt32(tam)] = 1; }
sobanghi = sobanghi + dem; int p; dem_1 = 0; max = 0; for (j = 0; j <= lbY.Items.Count - 1; j++) { int dem_tam = 0; vt = 0; for (k = 0; k <= lbY.Items[j].Text.Length - 1; k++) if (lbY.Items[j].Text[k] == ' ') { tam = lbY.Items[j].Text.Substring(vt, k - vt); p = Convert.ToInt32(tam); vt = k; if (a[p] == 1) { dem_tam++; dem_1++; a[p] = 2; } }
if (dem_tam > max) max = dem_tam; if (dem == dem_1) break;
}
tong_phan_hoach = tong_phan_hoach + max; }
return 1 - (tong_phan_hoach / sobanghi); }
Thủ tục phân hoạch
public void phanhoach(string x, ListBox lb)
{
lb.Items.Clear(); int i;
string s = "";
string [] x1= new string[100]; int sophantux1 = 0;
char[] x2 = new char[100]; int sophantux2 = 0;
for (int j = 0; j<= x.Length-1; j += 2) {
sophantux2++;
x2[sophantux2] = x[j]; }
int vt;
for (i = 0; i <= ListBox1.Items.Count - 1; i++) {
sophantux1 = 0; vt = 0;
for (int j = 0; j <= ListBox1.Items[i].Text.Length - 1; j++) if (ListBox1.Items[i].Text[j] == '+') { sophantux1++; x1[sophantux1] = ListBox1.Items[i].Text.Substring(vt, j-vt); vt = j+1; } s = ""; string xau_select = ""; xau_select = xau_select + x2[1] + " = " + "'" + x1[1] + "'"; for (int j = 2; j <= sophantux1; j++)
xau_select = xau_select + " and " + x2[j] + " = " + "'" + x1[j] + "'";
string connectionstring = ConfigurationSettings.AppSettings["connectioninfo"];
SqlConnection connection = new
SqlConnection(connectionstring); connection.Open();
string select = "select TupleID from bang_dulieu where " + xau_select;
SqlCommand comm = new SqlCommand(select, connection); SqlDataReader reader = comm.ExecuteReader();
while (reader.Read()) s = s + reader[0].ToString() + " "; lb.Items.Add(s); connection.Close(); } } Thủ tục tính số tổ hợp
void sotohop(int k, int n) {
lbtohop.Items.Clear(); string s = "";
int i,j, ok;
int [] a = new int[100];
for (i=1; i<=k; i++) a[i] = i; while (a[1]<=n-k+1) { s = ""; ok = 0; for (j = 1; j <= k; j++) { s = s + a[j].ToString() + " "; if (kiemtra(a[j]) == 1) { ok = 0; break; } if ((k>2) && (kiemtra(a[j])) == 0)
for (int p = 0; p <= lbtohop_luugiu.Items.Count - 1; p++) if (s == lbtohop_luugiu.Items[p].Text) ok = 1; } if (k <= 2) lbtohop.Items.Add(s);
else if (ok == 1) lbtohop.Items.Add(s); if (a[1] < (n - k + 1)) { i = k; if (a[i] == n) {
while ((a[i] == (n - k + i)) && (i>1)) { i--; a[i] = a[i] + 1; } for (j = i + 1; j <= k; j++) a[j] = a[j - 1] + 1; }
else a[i] = a[i] + 1; }
else a[1] = n - k + 2; }
}
Thủ tục loại bỏ
for (int i = 0; i <= lbtohop.Items.Count - 1; i++) { vt = 0; tam = ""; dem = 0; for (j = 0; j <= lbtohop.Items[i].Text.Length - 1; j++) if (lbtohop.Items[i].Text[j] == ' ') { dem++; tam = lbtohop.Items[i].Text.Substring(vt, j - vt); vt = j;
a[dem] = Convert.ToInt32(tam); }
string s = ""; s = s + b[a[1]];
ketqua = ketqua + lbthuoctinh.Items[(int)b[a[1]] - 64].Text;
for (j = 2; j <= dem - 1; j++) {
s = s + "," + b[a[j]];
ketqua = ketqua + "," + lbthuoctinh.Items[(int)b[a[j]] - 64].Text;
}
hienthi_thuoctinh(s); phanhoach(s, lbX);
s = s + "," + b[a[dem]];
ketqua = ketqua + "->" + lbthuoctinh.Items[(int)b[a[dem]] - 64].Text;
hienthi_thuoctinh(s); phanhoach(s, lbY); lbtohop_luugiu.Items.Clear(); int giu = 0; if (tinh_phuthuochamxapxi() < Convert.ToDouble(esynol.Text)) { Response.Write(ketqua); Response.Write("<br>");
for (int k = 0; k <= lbtohop.Items.Count - 1; k++) { vt = 0; while (vt <= lbtohop.Items[k].Text.Length - 1) { vt = lbtohop.Items[k].Text.IndexOf(' ', vt) + 1; if (vt <= lbtohop.Items[k].Text.Length - 1) giu = vt; }
string tam_1 = lbtohop.Items[k].Text.Substring(giu, lbtohop.Items[k].Text.Length - giu);
if (Convert.ToInt32(tam_1) == a[dem])
lbtohop.Items.Remove(lbtohop.Items[k]); else lbtohop_luugiu.Items.Add(lbtohop.Items[k]); } lb_loaibo.Items.Add(a[dem].ToString()); } } tohop++; }