Báo cáo trí tuệ nhân tạo - học máy
Trí Tuệ Nhân Tạo – Học Máy MỤC LỤC Giới thiệu chung Các khái niệm Các kiểu định .7 Ưu điểm định .8 Giao diện: 30 30 Code chương trình: 31 NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN Trí Tuệ Nhân Tạo – Học Máy HỌC MÁY Giới thiệu học máy Từ trí tuệ nhân tạo đời nay, người ta không ngừng thực cơng trình nghiên cứu để đưa tư tưởng nghiên cứu với máy tính để ứng dụng vào việc giải công việc thực tiễn đời sống Một nguyên nhân làm cho trí tuệ nhân tạo trở thành lĩnh vực mũi nhọn thời đại việc làm cho máy tính trở nên thơng minh hơn, nói cụ thể người ta tìm cách tạo chương trình thơng minh có khả giải vấn đề thực tế cách giải người Một lĩnh vực lý thú trí tuệ nhân tạo đề cập chuyên đề Học máy Học máy hướng tiếp cận thay người phải tri thức cần thiết để giải toán, máy tính tự động rút trích tri thức cách từ liệu cung cấp Học máy mơ q trình học Trí Tuệ Nhân Tạo – Học Máy người qua mức từ đơn giản đến phức tạp: máy tính ghi nhớ trường họp xuất cuối học trường hợp tổng quát chưa xuất Trong toán học máy, đầu vào tập liệu huấn luyện bao gồm mẫu liệu Mỗi mẫu liệu bao gồm tập giá trị ứng với thuộc tính Tập thuộc tính chia làm hai phần: thuộc tính quan sát thuộc tính kết Mục tiêu học máy tìm ánh xạ từ thuộc tính quan sát vào thuộc tính kết (tìm moi quan hệ thuộc tính quan sát thuộc tính kết quả) ứng với tập liệu huấn luyện Ánh xạ áp dụng lên mẫu quan sát để rút kết tương ứng Bảng trình bày ví dụ học máy, tốn dự đốn việc có chơi tennis hay khơng # 10 11 12 13 14 Outlook Temperature Humidity Wind Target Sunny Hot High Weak No Sunny Hot High Strong No Overcast Hot High Weak Yes Rain Mild High Weak Yes Rain Cool Normal Weak Yes Rain Cool Normal Strong No Overcast Cool Normal Strong Yes Sunny Mild High Weak No Sunny Cool Normal Weak Yes Rain Mild Normal Weak Yes Sunny Mild Normal Strong Yes Overcast Mild High Strong Yes Overcast Hot Normal Weak Yes Rain Mild High Strong No Trong toán này, học máy tìm mối quan hệ thuộc tính quan sát: Outlook (quang cảnh), Temperature (Nhiệt độ), Humidity (Độ ẩm), Wind (Sức gió) với Trí Tuệ Nhân Tạo – Học Máy thuộc tính kết Target Kết dùng dự đoán giá trị Target nhập vào thuộc tính quan sát cho mẫu ví dụ: # Outlook Temperature Humidity Wind Target 15 Sunny Mild Normal Strong ? 16 Rain Cool High Strong ? Việc dự đốn cho mẫu 15 tương đối dễ dàng, mẫu có giá trị quan sát tương tự mẫu số 11 nên giá trị Target tương tự Yes (trường hợp học máy đơn giản -ghi nhớ) Tuy nhiên việc dự đoán cho mẫu 16 khó khăn mẫu khơng giống mẫu biết Đây trường hợp tổng quát học máy - gặp trường hợp chưa xuất Các phương pháp học máy đưa nhằm giải toán trường hợp tổng quát Phần I: Cây định Trong lý thuyết định (chẳng hạn quản lí rủi ro), định (decision tree) đồ thị định hậu (bao gồm rủi ro hao phí tài ngun) Cây định sử dụng để xây dựng kế hoạch nhằm đạt mục tiêu mong muốn Các định dùng để hỗ trợ trình định Cây định dạng đặc biệt cấu trúc Giới thiệu chung Trong lĩnh vực học máy, định kiểu mơ hình dự báo (predictive model), nghĩa ánh xạ từ quan sát vật/hiện tượng tới kết luận giá trị mục tiêu vật/hiện tượng Mỗi nút (internal node) tương ứng với biến; đường nối với nút thể giá trị cụ thể cho biến Mỗi nút đại diện cho giá trị dự đoán biến mục tiêu, cho trước giá trị biến biểu diễn đường từ nút gốc tới nút Kỹ thuật học máy dùng Trí Tuệ Nhân Tạo – Học Máy định gọi học định, hay gọi với tên ngắn gọn định Học định phương pháp thông dụng khai phá liệu Khi đó, định mơ tả cấu trúc cây, đó, đại diện cho phân loại cành đại diện cho kết hợp thuộc tính dẫn tới phân loại Một định học cách chia tập hợp nguồn thành tập dựa theo kiểm tra giá trị thuộc tính Q trình lặp lại cách đệ qui cho tập dẫn xuất Q trình đệ qui hồn thành tiếp tục thực việc chia tách nữa, hay phân loại đơn áp dụng cho phần tử tập dẫn xuất Một phân loại rừng ngẫu nhiên (random forest) sử dụng số định để cải thiện tỉ lệ phân loại Cây định phương tiện có tính mơ tả dành cho việc tính tốn xác suất có điều kiện Cây định mơ tả kết hợp kỹ thuật tốn học tính tốn nhằm hỗ trợ việc mơ tả, phân loại tổng quát hóa tập liệu cho trước Dữ liệu cho dạng ghi có dạng: ( x, y ) = ( x1 , x2 , x3 , , xk , y ) Biến phụ thuộc (dependant variable) y biến mà cần tìm hiểu, phân loại hay tổng quát hóa x1 , x2 , x3 biến giúp ta thực cơng việc Các khái niệm 2.1 Cây định: Là mơ hình liệu mã hóa phân bố nhãn lớp (cũng y) theo thuộc tính dùng để dự đốn Đây đồ thị có hướng phi chu trình dạng Nút gốc (nút nằm đỉnh) đại diện cho tồn liệu Cây định thơng thường sử dụng cho việc đạt thông tin cho mục đính tạo định Cây định bắt đầu với nút gốc từ user nhận hành động Từ nút này, user chia nút theo cách đệ qui theo giải thuật học định Kết cuối Trí Tuệ Nhân Tạo – Học Máy định nhánh thể trường hợp định hệ định 2.2 Ví dụ tốn chơi tennis để giải thích định Người quản lý câu lạc chơi tennis gặp rắc rối chuyện thành viên đến hay khơng đến Có ngày muốn chơi tennis số nhân viên câu lạc lại không đủ phục vụ Có hơm chẳng đến chơi, câu lạc lại thừa nhân viên Mục tiêu Người quản lý tối ưu hóa số nhân viên phục vụ ngày cách dựa vào thời tiết để đoán xem người ta đến chơi tennis Để thực điều đó, anh cần hiểu khách hàng định chơi tìm hiểu xem có cách giải thích cho việc hay không Vậy hai tuần, thu thập thông tin về: Trời Outlook (quang cảnh), Temperature (Nhiệt độ), Humidity (Độ ẩm), Wind (Sức gió) với thuộc tính kết Target Dữ liệu sau: # 10 11 12 13 14 Outlook Temperature Humidity Wind Target Sunny Hot High Weak No Sunny Hot High Strong No Overcast Hot High Weak Yes Rain Mild High Weak Yes Rain Cool Normal Weak Yes Rain Cool Normal Strong No Overcast Cool Normal Strong Yes Sunny Mild High Weak No Sunny Cool Normal Weak Yes Rain Mild Normal Weak Yes Sunny Mild Normal Strong Yes Overcast Mild High Strong Yes Overcast Hot Normal Weak Yes Rain Mild High Strong No Trí Tuệ Nhân Tạo – Học Máy Sau đó, để giải tốn, người ta đưa mơ hình định Kết luận thứ nhất: trời nhiều mây, người ta luôn chơi tennis Tiếp theo, ta lại chia nhóm trời nắng thành hai nhóm Ta thấy khách hàng không muốn chơi golf độ ẩm cao Cuối cùng, ta chia nhóm trời có gió thành hai thấy khách hàng không chơi tennis trời nhiều gió Và lời giải ngắn gọn cho tốn mơ tả phân loại Người quản lý phần lớn cho nhân viên nghỉ vào ngày trời nắng ẩm, ngày gió mạnh Vì chẳng có chơi ngày Vào hơm khác, nhiều người đến chơi tennis, thuê thêm nhân viên thời vụ để phụ giúp công việc Kết luận định giúp ta biến biểu diễn liệu phức tạp thành cấu trúc đơn giản nhiều Các kiểu định Cây định cịn có hai tên khác: • Cây hồi quy (Regression tree): ước lượng hàm có giá trị số thực thay Trí Tuệ Nhân Tạo – Học Máy sử dụng cho nhiệm vụ phân loại (ví dụ: ước tính giá ngơi nhà khoảng thời gian bệnh nhân nằm viện) • Cây phân loại (Classification tree): biến phân loại như: giới tính (nam hay nữ), kết trận đấu (thắng hay thua) Ưu điểm định • Cây định dễ hiểu Người ta hiểu mơ hình định sau giải thích ngắn • Việc chuẩn bị liệu cho định không cần thiết Các kỹ thuật khác thường đòi hỏi chuẩn hóa liệu, cần tạo biến phụ (dummy variable) loại bỏ giá trị rỗng • Cây định xử lý liệu có giá trị số liệu có giá trị tên thể loại Các kỹ thuật khác thường chuyên để phân tích liệu gồm loại biến Chẳng hạn, luật quan hệ dùng cho biến tên, mạng nơ-ron dùng cho biến có giá trị số • Cây định mơ hình hộp trắng Nếu quan sát tình cho trước mơ hình, dễ dàng giải thích điều kiện logic Boolean Mạng nơ-ron ví dụ mơ hình hộp đen, lời giải thích cho kết phức tạp để hiểu • Có thể thẩm định mơ hình kiểm tra thống kê Điều làm cho ta tin tưởng vào mơ hình • Cây định xử lý tốt lượng liệu lớn thời gian ngắn Có thể dùng máy tính cá nhân để phân tích lượng liệu lớn thời gian đủ ngắn phép nhà chiến lược đưa định dựa phân tích định Trí Tuệ Nhân Tạo – Học Máy Phần II: Thuật toán ID3 Thuật toán: Thuật toán ID3 Ross Quinlan đề xuất dùng để xây dựng định thỏa tính chất Thuật tốn tn theo ngun tắc dao cạo Occam để xây dựng định cách bước kiểm tra, cố gắng chọn thuộc tính (nút nhánh) đơn giản Để xác định độ đơn giản thuộc tính, ID3 sử dụng giá trị độ đo entropy thông tin (độ hỗn loạn thơng tin) Với thuộc tính cho trước, tập liệu chia thành n tập với tỷ lệ Pi tương ứng (ví dụ, với thuộc tính Target, tập liệu huấn luyện chia thành tập Yes với Po = 9/14 tập No với P;=5/14) Khi đó, entropy tập liệu thuộc tính chọn là: Trí Tuệ Nhân Tạo – Học Máy n H Ví dụ, entropy tập liệu tennis theo thuộc tính kết là: H = - 9/14 * log29/14 - 5/14 * log25/14 = 0,94 Entropy đo độ hỗn loạn tập Entropy cao độ hỗn loạn tập cao Tập liệu hồn tồn đồng entropy = Và trường hợp tập liệu có lớp, tập liệu hồn tồn hỗn loạn có entropy = Thuật tốn ID3: Bắt đầu với nút gốc, Chọn A thuộc tính định "tốt nhất" cho nút Gán A thuộc tính định cho nút Với giá trị A, tạo nhánh nút Phân loại mẫu huấn luyện cho nhánh Nếu mẫu huấn luyện nhánh phân loại hoàn toàn (đồng loại) NGƯNG, ta nút Ngược lại, lặp với nút nhánh Thuộc tính tốt thuộc tính có entropy trung bình thấp theo thuộc tính kết Entropy trung bình thuộc tính trung bình theo tỉ lệ entropy nhánh: 10 Trí Tuệ Nhân Tạo – Học Máy ⇒ Luật L5: Nếu O = R ∧ W = S Target = Yes (xố mẫu_6) Kết luận: luật phân lớp L1 L5 Phần III: Thuật tốn Nạve Bayes Tiếp cận thống kê Luật Bayes Trong cách tiếp cận thống kê, lý thuyết định sử dụng để chọn giá trị kết xuất cho mẫu Theo lý thuyết định, mẫu x cung cấp, giá trị thuộc tính định y giá tri yk cho xác suất P(y = yk|x) lớn Ví dụ tốn tennis, với mẫu #16 ta cần xác định hai giá trị xác xuất P(Target = Yes|#16) P(Target = No|#16) chọn phân lớp ứng với giá trị lớn hai giá trị Giá trị P(y = yk|x) thường khó tính (do phải có nhiều mẫu huấn luyện xấp xỉ xác) Cơng thức Bayes giúp đưa giá trị dạng dễ tính hơn: Giá trị P(x) phân lớp nên ta cần so sánh từ số phân số Một lần nữa, giá trị P(x|y=yk) (gọi phân số liệu phân lớp) khó tính tốn Giả định độc lập có điều kiện thuộc tính (Nạve) cho 26 Trí Tuệ Nhân Tạo – Học Máy phép ta tính phân bố xác suất mẫu liệu thông qua phân bố xác suất giá trị thuộc tính thành phần: Ví dụ với #16, ta tính: P(#16| Target=Yes)= P(Outlook=Rain| Target=Yes) x P(Temp=Cool| Target=Yes) x P(Humidity=High| Target=Yes) x P(Wind=Strong| Target=Yes) tính tương tự cho mẫu P(#16| Target=No) Thuật toán học máy Nạve Bayes Thuật tốn học máy Nạve Bayes biểu diễn ánh xạ học dạng tập giá trị phân bố xác suất Các giá trị phân bố xác xuất tính giai đoạn huấn luyện sử dụng để xác định giá trị định cho mẫu Thuật tốn Nạve Bayes Huấn luyện Thống kê (đếm) xác suất lớp yk P(yk) giá trị phân bố xác suất P(Ai=vij|yk) Để đơn giản ta ký hiệu RAi(vij, yk) tỷ lệ mẫu có thuộc tính Ai = vij thuộc phân lớp yk: Sử dụng Với mẫu x, tính khả x rơi vào phân lớp yk 27 Trí Tuệ Nhân Tạo – Học Máy chọn phân lớp có giá trị S lớn Sửa lỗi Laplace: liệu ít, giá trị R = bị nhiễu Nếu R = giá trị S tương ứng = Để tránh trường hợp đó, phép sửa lỗi đưa nhằm đảm bảo giá trị xác suất > Sửa lỗi Laplace thực sau: Các giá trị P R sau sửa lỗi sử dụng bình thường Ví dụ Áp dụng thuật tốn Nạve Bayes vào ví dụ tennis, ta thực bước sau: # 10 11 12 13 14 Outlook Temperature Sunny Hot Sunny Hot Overcast Hot Rain Mild Rain Cool Rain Cool Overcast Cool Sunny Mild Sunny Cool Rain Mild Sunny Mild Overcast Mild Overcast Hot Rain Mild Humidity High High High High Normal Normal Normal High Normal Normal Normal High Normal High Wind Target Weak No Strong No Weak Yes Weak Yes Weak Yes Strong No Strong Yes Weak No Weak Yes Weak Yes Strong Yes Strong Yes Weak Yes Strong No • Huấn luyện: P(Yes) = 9/14 sửa lỗi: P(Yes) = 10/16 P(No) = 5/14 sửa lỗi: P(No) = 6/16 ROverlook(Sunny, Yes) = 2/9, (sửa lỗi) = 3/12 {Tử + 1, Mẫu + (S, O, R)} ROverlook(Overcast, Yes) = 4/9, (sửa lỗi) = 5/12 28 Trí Tuệ Nhân Tạo – Học Máy ROverlook(Rain, Yes) = 3/9 = 4/12 (sửa lỗi) ROverlook(Sunny, No) = 3/5 = 4/8 (sửa lỗi) ROverlook(Overcast, No) = 0/5 = 1/8 (sửa lỗi) ROverlook(Rain, No) = 2/5 = 3/8 (sửa lỗi) RTemperature (sửa lỗi) Hot Mild Cool Yes 3/12 5/12 4/12 No 3/8 2/8 3/8 RHumidity (sửa lỗi) Normal High Yes 7/11 4/11 No 2/7 5/7 RWind (sửa lỗi) Dự đoán cho mẫu #16: S(Yes) = P(Yes) x RO(Rain, Yes) x RT(Cool, Yes) x RH(Hum, Yes) x RW(Sunny, Yes) = 10/16 * 4/12 * 4/12 * 4/11 * 4/11 = 0,009 S(No) = P(No) x RO(Rain,No) x RT(Cool,No) x RH(Hum,No) x RW(S,No) = 6/12 * 3/8 * 2/8 * 5/7 * 4/7 = 0,019 Vậy #16 thuộc lớp No S(No) > S(Yes) 29 Trí Tuệ Nhân Tạo – Học Máy Phần V: Code xây dựng định thuật toán ID3 Giao diện: Kết định danh Dữ liệu có sẵn từ file input.txt Tạo định danh Chọn liệu khác 30 Trí Tuệ Nhân Tạo – Học Máy Code chương trình: using using using using using System; System.Collections; System.Data; System.IO; System.Collections.Generic; namespace ExemploID3 { public class Attribute { ArrayList mValues; string mName; object mLabel; public Attribute(string name, string[] values) { mName = name; mValues = new ArrayList(values); mValues.Sort(); } public Attribute(object Label) { mLabel = Label; mName = string.Empty; mValues = null; } public string AttributeName { get { return mName; } } 31 Trí Tuệ Nhân Tạo – Học Máy public string[] values { get { if (mValues != null) return (string[])mValues.ToArray(typeof(string)); else return null; } } public bool isValidValue(string value) { return indexValue(value) >= 0; } public int indexValue(string value) { if (mValues != null) return mValues.BinarySearch(value); else return -1; } public override string ToString() { if (mName != string.Empty) { return mName; } else { return mLabel.ToString(); } } } // Tạo Treeview public class TreeNode { private ArrayList mChilds = null; private Attribute mAttribute; public TreeNode(Attribute attribute) { if (attribute.values != null) { mChilds = new ArrayList(attribute.values.Length); for (int i = 0; i < attribute.values.Length; i++) mChilds.Add(null); } else { mChilds = new ArrayList(1); mChilds.Add(null); } mAttribute = attribute; } public void AddTreeNode(TreeNode treeNode, string ValueName) { 32 Trí Tuệ Nhân Tạo – Học Máy int index = mAttribute.indexValue(ValueName); mChilds[index] = treeNode; } public int totalChilds { get { return mChilds.Count; } } public TreeNode getChild(int index) { return (TreeNode)mChilds[index]; } public Attribute attribute { get { return mAttribute; } } public TreeNode getChildByBranchName(string branchName) { int index = mAttribute.indexValue(branchName); return (TreeNode)mChilds[index]; } } //Xây dựng public class DecisionTreeID3 { private DataTable mSamples; private int mTotalPositives = 0; private int mTotal = 0; private string mTargetAttribute = "Target"; private double mEntropySet = 0.0; private int countTotalPositives(DataTable samples) { int result = 0; foreach (DataRow aRow in samples.Rows) { if ((bool)aRow[mTargetAttribute] == true) result++; } return result; } private double calcEntropy(int positives, int negatives) { int total = positives + negatives; double ratioPositive = (double)positives/total; double ratioNegative = (double)negatives/total; if (ratioPositive != 0) 33 Trí Tuệ Nhân Tạo – Học Máy ratioPositive = -(ratioPositive) * System.Math.Log(ratioPositive, 2); if (ratioNegative != 0) ratioNegative = - (ratioNegative) * System.Math.Log(ratioNegative, 2); double result = } ratioPositive + ratioNegative; return result; private void getValuesToAttribute(DataTable samples, Attribute attribute, string value, out int positives, out int negatives) { positives = 0; negatives = 0; foreach (DataRow aRow in samples.Rows) { if ( ((string)aRow[attribute.AttributeName] == value) ) if ( (bool)aRow[mTargetAttribute] == true) positives++; else negatives++; } } //Tính Gain private double gain(DataTable samples, Attribute attribute) { string[] values = attribute.values; double sum = 0.0; for (int i = 0; i < values.Length; i++) { int positives, negatives; positives = negatives = 0; getValuesToAttribute(samples, attribute, values[i], out positives, out negatives); double entropy = calcEntropy(positives, negatives); sum += -(double)(positives + negatives)/mTotal * entropy; } return mEntropySet + sum; } //Tìm Gain lớn private Attribute getBestAttribute(DataTable samples, Attribute[] attributes) { double maxGain = 0.0; Attribute result = null; foreach (Attribute attribute in attributes) { double aux = gain(samples, attribute); if (aux > maxGain) { 34 Trí Tuệ Nhân Tạo – Học Máy maxGain = aux; result = attribute; } } } return result; private bool allSamplesPositives(DataTable samples, string targetAttribute) { foreach (DataRow row in samples.Rows) { if ( (bool)row[targetAttribute] == false) return false; } } return true; private bool allSamplesNegatives(DataTable samples, string targetAttribute) { foreach (DataRow row in samples.Rows) { if ( (bool)row[targetAttribute] == true) return false; } return true; } private ArrayList getDistinctValues(DataTable samples, string targetAttribute) { ArrayList distinctValues = new ArrayList(samples.Rows.Count); foreach(DataRow row in samples.Rows) { if (distinctValues.IndexOf(row[targetAttribute]) == -1) } distinctValues.Add(row[targetAttribute]); return distinctValues; } private object getMostCommonValue(DataTable samples, string targetAttribute) { ArrayList distinctValues = getDistinctValues(samples, targetAttribute); int[] count = new int[distinctValues.Count]; foreach(DataRow row in samples.Rows) { int index = distinctValues.IndexOf(row[targetAttribute]); count[index]++; } 35 Trí Tuệ Nhân Tạo – Học Máy int MaxIndex = 0; int MaxCount = 0; for (int i = 0; i < count.Length; i++) { if (count[i] > MaxCount) { MaxCount = count[i]; MaxIndex = i; } } return distinctValues[MaxIndex]; } private TreeNode internalMountTree(DataTable samples, string targetAttribute, Attribute[] attributes) { if (allSamplesPositives(samples, targetAttribute) == true) return new TreeNode(new Attribute(true)); if (allSamplesNegatives(samples, targetAttribute) == true) return new TreeNode(new Attribute(false)); if (attributes.Length == 0) return new TreeNode(new Attribute(getMostCommonValue(samples, targetAttribute))); mTotal = samples.Rows.Count; mTargetAttribute = targetAttribute; mTotalPositives = countTotalPositives(samples); mTotalPositives); mEntropySet = calcEntropy(mTotalPositives, mTotal Attribute bestAttribute = getBestAttribute(samples, attributes); TreeNode root = new TreeNode(bestAttribute); DataTable aSample = samples.Clone(); foreach(string value in bestAttribute.values) { aSample.Rows.Clear(); DataRow[] rows = samples.Select(bestAttribute.AttributeName + " = " + "'" + value + "'"); foreach(DataRow row in rows) { aSample.Rows.Add(row.ItemArray); } ArrayList aAttributes = new ArrayList(attributes.Length - 1); 36 Trí Tuệ Nhân Tạo – Học Máy for(int i = 0; i < attributes.Length; i++) { if (attributes[i].AttributeName != bestAttribute.AttributeName) aAttributes.Add(attributes[i]); } if (aSample.Rows.Count == 0) { return new TreeNode(new Attribute(getMostCommonValue(aSample, targetAttribute))); } else { DecisionTreeID3 dc3 = new DecisionTreeID3(); TreeNode ChildNode = dc3.mountTree(aSample, targetAttribute, (Attribute[])aAttributes.ToArray(typeof(Attribute))); root.AddTreeNode(ChildNode, value); } } return root; } public TreeNode mountTree(DataTable samples, string targetAttribute, Attribute[] attributes) { mSamples = samples; return internalMountTree(mSamples, targetAttribute, attributes); } } class ID3Sample { public static void printNode(TreeNode root, string tabs) { Console.WriteLine(tabs + '|' + root.attribute + '|'); if (root.attribute.values != null) { for (int i = 0; i < root.attribute.values.Length; i+ +) { Console.WriteLine(tabs + "\t" + ""); TreeNode childNode = root.getChildByBranchName(root.attribute.values[i]); printNode(childNode, "\t" + tabs); } } } static DataTable getDataTableFromFile() { DataTable rs = new DataTable("samples"); DataColumn column = new DataColumn(); StreamReader sr = new StreamReader("input.txt"); string record; int i = 1; int n, k = 0; 37 Trí Tuệ Nhân Tạo – Học Máy } string[] samples = null; List list = new List(); while ((record = sr.ReadLine()) != null) { string[] words = record.Split('\t'); if (i == 1) { n = int.Parse(words[0]); k = int.Parse(words[1]); } else if (i == 2) { samples = words; for (int j = 0; j < k - 1; j++) { column = rs.Columns.Add(words[j]); column.DataType = typeof(string); } column = rs.Columns.Add(words[k-1]); column.DataType = typeof(bool); } else { object[] ob = new object[5]; for (int j = 0; j < k - 1; j++) { ob[j] = (object)words[j]; } if (words[k-1] == "Yes") ob[k - 1] = true; else ob[k - 1] = false; rs.Rows.Add(ob); } i++; } return rs; static Attribute[] getAttibute(DataTable rs) { string bk; string tmp = ""; int mattr = 0; int k = rs.Columns.Count; Attribute[] attr = new Attribute[k - 1]; for (int i = 0; i < k - 1; i++) { for (int j = 0; j < rs.Rows.Count; j++) { bk = (string)rs.Rows[j][i]; if (tmp.IndexOf(bk) == -1) { tmp += (string)rs.Rows[j][i] + ","; } } tmp = tmp.Substring(0, tmp.Length - 1); attr[mattr] = new Attribute(rs.Columns[i].ColumnName, tmp.Split(',')); 38 Trí Tuệ Nhân Tạo – Học Máy mattr++; tmp = ""; } } return attr; [STAThread] static void Main(string[] args) { DataTable samples = getDataTableFromFile(); Attribute[] attributes = getAttibute(samples); DecisionTreeID3 id3 = new DecisionTreeID3(); TreeNode root = id3.mountTree(samples, "Target", attributes); printNode(root, ""); Console.ReadKey(); } } } Phần VI: Tài liệu tham khảo [1] Bài giảng: Trí Tuệ Nhân Tao – Học Máy Tác giả: Ths Tơ Hồi Việt [2] Wikipedia - Bách khoa toàn thư mở - Cây định http://en.wikipedia.org/wiki/Decision tree [3] Tom M Mitchell, (1997) Machine Learning, Singapore, McGraw - Hill [4] Google, … 39 ... S(Yes) 29 Trí Tuệ Nhân Tạo – Học Máy Phần V: Code xây dựng định thuật toán ID3 Giao diện: Kết định danh Dữ liệu có sẵn từ file input.txt Tạo định danh Chọn liệu khác 30 Trí Tuệ Nhân Tạo – Học Máy Code... lý thú trí tuệ nhân tạo đề cập chuyên đề Học máy Học máy hướng tiếp cận thay người phải tri thức cần thiết để giải toán, máy tính tự động rút trích tri thức cách từ liệu cung cấp Học máy mơ q... Học máy mơ q trình học Trí Tuệ Nhân Tạo – Học Máy người qua mức từ đơn giản đến phức tạp: máy tính ghi nhớ trường họp xuất cuối học trường hợp tổng quát chưa xuất Trong toán học máy, đầu vào tập