Tiểu luận khai phá dữ liệu: Sử dụng phần mềm Weka phân lớp cho bộ dữ liệu golf dataset bằng cây quyết định C4.5

11 1.1K 7
Tiểu luận khai phá dữ liệu: Sử dụng phần mềm Weka phân lớp cho bộ dữ liệu  golf dataset bằng cây quyết định C4.5

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Tiểu luận về khai phá dữ liệu THUẬT TOÁN PHÂN LỚP HỌC CÂY QUYẾT ĐỊNH C4.5 1. Giới thiệu: - Cây quyết định là phương pháp xấp xỉ hóa bằng hàm mục tiêu những giá trị rời rạc trong đó những hàm được học được thể hiện bằng cây quyết định . Học cây quyết định là một trong những phương pháp thực dụng và được sử dụng rộng rãi nhất cho phương pháp suy diễn qui nạp. - Giải thuật học cây quyết định được sử dụng thành công trong hệ chuyên gia trong việc nắm bắt kiến thức. Công việc chính sử dụng trong các hệ thống này là việc sử dụng phương pháp qui nạp cho những giá trị cho trước của những thuộc tính của một đối tượng chưa biết để xác định sự phân loại xấp xỉ theo những luật của cây quyết định. Cây quyết định sẽ phân loại các trường hợp bằng cách duyệt từ nút gốc đến những nút lá. Chúng ta sẽ bắt đầu từ nút gốc của cây quyết định, kiểm tra thuộc tính xác định bởi nút này sau đó chuyển xuống những nhánh của cây theo giá trị thuộc tính trong tập hợp cho trước. Quá trình này được lặp lại tại những cây con. - Giải thuật cây quyết định thích hợp cho những điều dưới đây: + Mỗi trường hợp được biểu diễn bởi cặp những giá trị thuộc tính. Ví dụ thuộc tính “nhiệt độ“ có những giá trị “nóng”, “mát”, “lạnh”. Chúng cũng đồng thời liên quan đến thuộc tính mở rộng , giá trị tiếp theo, dữ liệu được tính toán ( giá trị thuộc tính bằng số) trong dự án của chúng ta. + Hàm mục tiêu có giá trị đầu ra là những giá trị rời rạc. Nó dễ dàng liên hệ đến trường hợp mà được gán vào một quyết định đúng hoặc sai. Nó cũng có thể mở rộng hàm mục tiêu đến giá trị đầu ra là những giá trị thực. + Những dữ liệu đưa vào có thể chứa đựng nhiều lỗi điều này liên quan đến kĩ thuật giản lược những dữ liệu thừa. - Trong các thuật toán học cây quyết định thì ID3 và C4.5 là hai thuật toán phổ dụng nhất. - Những thiếu sót của giải thuật ID3: + Một thiếu sót quan trọng của ID3 là không gian phân chia hợp lệ tại một node là cạn kiệt . Một sự phân chia là sự phân hoạch của mỗi trường hợp của không gian mà kết quả đạt được từ việc thử nghiệm tại một node quyết định. ID3 và con cháu của nó cho phép sự kiểm tra tại tại một thuộc tính đơn và nhánh trong kết quả cho ra từ sự kiểm tra này. + Một thiếu sót nữa mà ID3 mắc phải là nó dựa vào rất nhiều vào số lượng của những tập hợp dữ liệu đưa vào. Quản lý sự tạp nhiễu của tập dữ liệu vào là vô cùng quan trọng khi chúng ta ứng dụng giải thuật học cây quyết định vào thế giới thực . Ví dụ như Khi có sự lẫn tạp trong tập dữ liệu đưa vào hoặc khi số lượng ví dụ đưa vào là quá nhỏ để tạo ra một ví dụ điển hình của hàm mục tiêu đúng, ID3 có thể dẫn đến việc tạo quyết định sai. + Trong thuật toán ID3, giá trị các thuộc tính là rời rạc, trong khi đó ở thế giới thực còn tồn tại các thuộc tính có giá trị liên tục (giá trị số). + Trong thuật toán ID3, nếu các thuộc tính có nhiều giá trị mà mỗi giá trị lại duy nhất, sẽ dẫn tới tạo cây phức tạp, không đưa ra được quyết định cho các trường hợp trong thực tế. - C4.5 là sự mở rộng của giải thuật ID3 trên một số khía cạnh sau: + Trong việc xây dựng cây quyết định, chúng có thể liên hệ với tập huấn luyện mà có những records với những giá trị thuộc tính không được biết đến bởi việc đánh giá việc thu thập thông tin hoặc là tỉ số thu thập thông tin , cho những thuộc tính bằng việc xem xét chỉ những record mà ở đó thuộc tính được định nghĩa. + Trong việc xây dựng cây quyết định, giải thuật C4.5 có thể giải quyết tốt đối với trường hợp giá trị của các thuộc tính là giá trị thực. + Trong việc xây dựng cây quyết đinh, C4.5 có thể giải quyết tốt đối với trường hợp thuộc tính có nhiều giá trị mà mỗi giá trị này lại duy nhất. 2. Thuật toán xây dựng cây quyết định:

Tiểu luận về khai phá dữ liệu THUẬT TOÁN PHÂN LỚP HỌC CÂY QUYẾT ĐỊNH C4.5 1. Giới thiệu: - Cây quyết định là phương pháp xấp xỉ hóa bằng hàm mục tiêu những giá trị rời rạc trong đó những hàm được học được thể hiện bằng cây quyết định . Học cây quyết định là một trong những phương pháp thực dụng và được sử dụng rộng rãi nhất cho phương pháp suy diễn qui nạp. - Giải thuật học cây quyết định được sử dụng thành công trong hệ chuyên gia trong việc nắm bắt kiến thức. Công việc chính sử dụng trong các hệ thống này là việc sử dụng phương pháp qui nạp cho những giá trị cho trước của những thuộc tính của một đối tượng chưa biết để xác định sự phân loại xấp xỉ theo những luật của cây quyết định. Cây quyết định sẽ phân loại các trường hợp bằng cách duyệt từ nút gốc đến những nút lá. Chúng ta sẽ bắt đầu từ nút gốc của cây quyết định, kiểm tra thuộc tính xác định bởi nút này sau đó chuyển xuống những nhánh của cây theo giá trị thuộc tính trong tập hợp cho trước. Quá trình này được lặp lại tại những cây con. - Giải thuật cây quyết định thích hợp cho những điều dưới đây: + Mỗi trường hợp được biểu diễn bởi cặp những giá trị thuộc tính. Ví dụ thuộc tính “nhiệt độ“ có những giá trị “nóng”, “mát”, “lạnh”. Chúng cũng đồng thời liên quan đến thuộc tính mở rộng , giá trị tiếp theo, dữ liệu được tính toán ( giá trị thuộc tính bằng số) trong dự án của chúng ta. + Hàm mục tiêu có giá trị đầu ra là những giá trị rời rạc. Nó dễ dàng liên hệ đến trường hợp mà được gán vào một quyết định đúng hoặc sai. Nó cũng có thể mở rộng hàm mục tiêu đến giá trị đầu ra là những giá trị thực. + Những dữ liệu đưa vào có thể chứa đựng nhiều lỗi điều này liên quan đến kĩ thuật giản lược những dữ liệu thừa. - Trong các thuật toán học cây quyết định thì ID3 và C4.5 là hai thuật toán phổ dụng nhất. - Những thiếu sót của giải thuật ID3: + Một thiếu sót quan trọng của ID3 là không gian phân chia hợp lệ tại một node là cạn kiệt . Một sự phân chia là sự phân hoạch của mỗi trường hợp của không gian mà kết quả đạt được từ việc thử nghiệm tại một node quyết định. ID3 và con cháu của nó cho phép sự kiểm tra tại tại một thuộc tính đơn và nhánh trong kết quả cho ra từ sự kiểm tra này. + Một thiếu sót nữa mà ID3 mắc phải là nó dựa vào rất nhiều vào số lượng của những tập hợp dữ liệu đưa vào. Quản lý sự tạp nhiễu của tập dữ liệu vào là vô cùng quan trọng khi chúng ta ứng dụng giải thuật học cây quyết định vào thế giới thực . Ví dụ như Khi có sự lẫn tạp trong tập dữ liệu đưa vào hoặc khi số lượng ví dụ đưa vào là quá nhỏ để tạo ra một ví dụ điển hình của hàm mục tiêu đúng, ID3 có thể dẫn đến việc tạo quyết định sai. + Trong thuật toán ID3, giá trị các thuộc tính là rời rạc, trong khi đó ở thế giới thực còn tồn tại các thuộc tính có giá trị liên tục (giá trị số). + Trong thuật toán ID3, nếu các thuộc tính có nhiều giá trị mà mỗi giá trị lại duy nhất, sẽ dẫn tới tạo cây phức tạp, không đưa ra được quyết định cho các trường hợp trong thực tế. - C4.5sự mở rộng của giải thuật ID3 trên một số khía cạnh sau: + Trong việc xây dựng cây quyết định, chúng có thể liên hệ với tập huấn luyện mà có những records với những giá trị thuộc tính không được biết đến bởi việc đánh giá việc thu thập thông tin hoặc là tỉ số thu thập thông tin , cho những thuộc tính bằng việc xem xét chỉ những record mà ở đó thuộc tính được định nghĩa. + Trong việc xây dựng cây quyết định, giải thuật C4.5 có thể giải quyết tốt đối với trường hợp giá trị của các thuộc tính là giá trị thực. + Trong việc xây dựng cây quyết đinh, C4.5 có thể giải quyết tốt đối với trường hợp thuộc tính có nhiều giá trị mà mỗi giá trị này lại duy nhất. 2. Thuật toán xây dựng cây quyết định: Dữ liệu vào: Tập dữ liệu D, tập danh sách thuộc tính, tập nhãn lớp Dữ liệu ra: Mô hình cây quyết định Thuật toán: Tạocây(Tập dữ liệu E, tập danh sách thuộc tính F, tập nhãn lớp) 1 Nếu điều_kiện_dừng(E,F) = đúng 2 nútlá = CreateNode() 3 nútlá.nhãnlớp=Phânlớp(E) 4 return nútlá 5 Ngược lại 6 Nútgốc = CreateNode() 7 Nútgốc.điềukiệnkiểmtra = tìm_điểm_chia_tốt_nhất(E, F) 8 Đặt F = F \ {Nút chọn phân chia} 9 Đặt V = {v| v thoả điều kiện là phần phân chia xuất phát từ Nútgốc} 10 Lặp qua từng tập phân chia v ∈ V 11 Đặt Ev = {e | Nútgốc.điềukiệnkiểmtra(e) = v và e ∈ E} 12 Nútcon = Tạocây(Ev, F, tập nhãn lớp) 13 Dừng lặp 14 End if 15 Trả về nútgốc. Hàm chính Gọi hàm Tạocây (E, tập danh sách thuộc tính của E, tập nhãn lớp). Giải thích thuật toán: Đây là một thuật toán kiểu đệ qui tạo cây quyết định. + Tại hàm chính, gọi hàm đệ qui Tạocây() với ba tham số vào là tập dữ liệu E, tập danh sách thuộc tính của E và tập nhãn. Thuật toán làm việc bằng cách đệ qui chọn giá trị thuộc tính tốt nhất để chia, lưu ý là chọn giá trị của thuộc tính sao cho điều kiện chia tốt nhất (bước 7), tiếp tục tiến hành mở rộng nút con bằng cách gọi đệ qui cho đến khi điều kiện dừng (ở bước 1) được thỏa mãn. Dưới đây là phần giải thích chi tiết thuật toán: + Dòng đầu tiên sẽ kiểm tra điều kiện dừng, nếu được thỏa mãn nghĩa là đã đệ qui để tạo ra được đến nút lá. Điều kiện dừng chỉ xảy ra khi:  Tất cả các dòng trong tập dữ liệu E thuộc về cùng một lớp duy nhất (1).   Không có bất cứ dòng nào trong tập E, điều này có thể xảy ra khi tập con được tạo ở bước phân chia các tập con là rỗng (2). Trong trường hợp (1) chỉ việc tiến hành tạo nút lá bằng hàm createNode() và tiến hành gán nhãn cho nút lá này bằng cách gán nhãn duy nhất cho thuộc tính nhãn của nút vừa được tạo này. Trường hợp (2) sẽ trả về nút lá bằng rỗng và tiến hành gán nhãn cho nút cha là nhãn lớp xuất hiện nhiều nhất như sau: Nhãn lớp = max (tổng của từng giá trị nhãn lớp riêng biệt trong E). Hàm Phânlớp(E) thực hiện việc xác định nhãn cho một tập dữ liệu E, nó tự động xác định và trả về đúng giá trị nhãn cho cả hai trường hợp trên. + Dòng 3 và 4 xảy ra khi chỉ còn một thuộc tính trong nút cha (lưu ý nút cha là nút sau khi đã phân chia tạo ra tập dữ liệu D này). Nếu sau khi phân chia trên nút cha mà tập D không còn chứa thuộc tính để phân chia, trả về nút lá là giá trị nhãn xuất hiện nhiều nhất trong D. + Xét dòng 5, nếu thuật toán chưa thỏa mãn điều kiện để dừng, tiếp tục xét bằng cách tìm kiếm điểm chia tốt nhất. Để tìm điểm chia tốt nhất cần sử dụng một hàm đánh giá, kết quả của hàm này sẽ trả về thuộc tính được chọn tương ứng. Về các tiêu chuẩn đánh giá cũng như chọn điểm chia sẽ được giải thích rõ hơn trong các phần bên dưới. + Xét dòng 7 và 8, sau khi đã chọn được điểm chia tốt nhất, tiến hành phân chia tập D thành các tập con Di, cập nhật lại danh sách các thuộc tính. + Dòng 9 và 10: lặp qua danh sách các tập con D i và tiến hành gọi đệ qui hàm Tạocây() với tham số mới tương ứng. 3. Độ đo sử dụng để xác định điểm chia tốt nhất:  Entropy: Đại lượng đo tính đồng nhất hay tính thuần nhất của các mẫu. i c i i ppSEntropy 2 1 log)( ∑ = −= Trong đó:  S là tập dữ liệu huấn luyện.  C i là một nhãn lớp bất kỳ trong tập dữ liệu S.  P i là xác suất của một bộ bất kỳ trên S thuộc về nhãn C i . Giả sử phân chia các bộ trong S trên một thuộc tính A bất kỳ, để không mất tính tổng quát có thể xem như A có các giá trị phân biệt {a 1 , a 2 , …, a v }. Nếu thuộc tính A được sử dụng để chia thành v tập con, những tập con này sẽ tương ứng với các nhánh con của nút hiện tại, độ đo thông tin có được sau khi phân lớp theo v tập con trên sẽ được tính như sau: ∑ = ×= v j j j A SEntropy S S SEntropy 1 )()( Trong đó: j S là tổng số bộ dữ liệu được phân chia vào tập con thứ j.  Information gain: độ đo xác định ảnh hưởng của một thuộc tính trong mẫu đó trong việc phân lớp gọi là độ lợi thông tin. Độ lợi thông tin dựa trên phân nhánh bằng thuộc tính A: )()(),( SEntropySEntropyASGain A −=  SplitInformation: Thông tin tiềm ẩn được tạo ra bằng cách chia tập dữ liệu trong một số tập con nào đó. Splitinfomation(S,A) = - ∑ = c i ii S S S S 1 2 log Trong đó S i là tập con của S chứa các ví dụ có thuộc tính A mang giá trị V i . Để ý rằng Splitinfomation thực sự chính là Entropy của S với sự liên quan trên những giá trị của thuộc tính A.  GainRatio: Sự đánh giá thay đổi các giá trị của thuộc tính. Gain(S,A) GainRation(S,A) = SplitInformation(S,A) Tất cả các thuộc tính sẽ được tính toán độ đo tỷ lệ Gain, thuộc tính nào có độ đo tỷ lệ Gain lớn nhất sẽ được chọn làm thuộc tính phân chia. 4. Một số vấn đề với thuộc tính:  Thuộc tính liên tục: Thuật toán ID3 bị giới hạn bởi việc liên quan đến tập những giá trị rời rạc. Trong thuật toán C4.5 chúng ta sẽ mở rộng phạm vi hoạt của nó cho những thuộc tính có giá trị liên tục (giá trị số) để phù hợp với thế giới thực. Thuật toán C4.5 đưa ra định nghĩa những giá trị rời rạc mới để phân những giá trị liên tục thành những thuộc tính tượng trưng một lần nữa theo các quy tắc sau: - Dựa trên một giá trị nếu muốn phân chia nhị phân. - Dựa trên vài giá trị nếu muốn có nhiều nhánh. - Với mỗi giá trị tính các mẫu thuộc một lớp theo dạng A < v và A > v. - Cách chọn giá trị v hiệu quả: + Sắp xếp các giá trị tăng dần. + Chọn giá trị trung bình của từng cặp giá trị của thuộc tính để phân chia và tính chỉ số gain. + Chọn giá trị phân chia có chỉ số gain cao nhất Áp dụng vào dữ liệu http://www.hakank.org/weka/golf.arff Bài toán được đặt ra như sau: David là quản lý của một câu lạc bộ đánh golf nổi tiếng. Anh ta đang có rắc rối chuyện các thành viên đến hay không đến. Có ngày ai cũng muốn chơi golf nhưng số nhân viên câu lạc bộ lại không đủ phục vụ. Có hôm, không hiểu vì lý do gì mà chẳng ai đến chơi, và câu lạc bộ lại thừa nhân viên. Mục tiêu của David là tối ưu hóa số nhân viên phục vụ mỗi ngày bằng cách dựa theo thông tin dự báo thời tiết để đoán xem khi nào người ta sẽ đến chơi golf. Để thực hiện điều đó, anh cần hiểu được tại sao khách hàng quyết định chơi và tìm hiểu xem có cách giải thích nào cho việc đó hay không. Người ta thu được bảng số liệu như sau: Chúng ta sẽ sử dụng thuật toán c4.5 để giải quyết do: ở đây có 2 thuộc tính temperature và humidity có kiểu dữ liệu là numeric là thuộc tính kiểu số. Khai báo : @RELATION golf // tên dữ liệu @ATTRIBUTE outlook {sunny,overcast, rain} @ATTRIBUTE temperature integer @ATTRIBUTE humidity integer @ATTRIBUTE windy {false, true} @ATTRIBUTE class {dont_play, play} Phần dữ liệu @DATA sunny, 65, 85, false, dont_play sunny, 80, 90, true, dont_play overcast, 83, 78, false, play rain, 70, 96, false, play rain, 68, 80, false, play rain, 65, 70, true, play Thông tin về các thuộc tính outlook Thuộc tính temperature Thuộc tính attribute Thuộc tính windy Lớp class luật sinh ra : outlook = sunny: dont_play (2.0) outlook = overcast: play (1.0) outlook = rain: play (3.0) liệt kê thông tin tổng quát về mức độ chính xác của bộ phân loại vừa thực thi orrectly Classified Instances 3 50 % Incorrectly Classified Instances 3 50 % Kappa statistic -0.2857 Mean absolute error 0.5 Root mean squared error 0.6377 Relative absolute error 95.4545 % Root relative squared error 117.9081 % Total Number of Instances 6 Chi tiết kết quả của bộ phân loại trên từng phân lóp Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure ROC Area Class 0 0.25 0 0 0 0.5 dont_play 0.75 1 0.6 0.75 0.667 0.5 play Weighted Avg. 0.5 0.75 0.4 0.5 0.444 0.5 === Confusion Matrix === a b <-- classified as 0 2 | a = dont_play 1 3 | b = play Cây quyết định Code thuật toán C4.5 package weka.classifiers; import weka.core.Attribute; import weka.core.Capabilities; import weka.core.Capabilities.Capability; import weka.core.Instance; import weka.core.Instances; import weka.core.RevisionUtils; import weka.classifiers.Classifier; public class WekaWrapper extends Classifier { /** * Returns only the toString() method. * * @return a string describing the classifier */ public String globalInfo() { return toString(); } /** * Returns the capabilities of this classifier. * * @return the capabilities */ public Capabilities getCapabilities() { weka.core.Capabilities result = new weka.core.Capabilities(this); result.enable(weka.core.Capabilities.Capability.NOMINAL_ATTRIBUTES); result.enable(weka.core.Capabilities.Capability.BINARY_ATTRIBUTES); result.enable(weka.core.Capabilities.Capability.UNARY_ATTRIBUTES); result.enable(weka.core.Capabilities.Capability.EMPTY_NOMINAL_ATTRIBUTES); result.enable(weka.core.Capabilities.Capability.NUMERIC_ATTRIBUTES); result.enable(weka.core.Capabilities.Capability.DATE_ATTRIBUTES); result.enable(weka.core.Capabilities.Capability.MISSING_VALUES); result.enable(weka.core.Capabilities.Capability.NOMINAL_CLASS); result.enable(weka.core.Capabilities.Capability.BINARY_CLASS); result.enable(weka.core.Capabilities.Capability.MISSING_CLASS_VALUES); result.setMinimumNumberInstances(0); return result; } /** * only checks the data against its capabilities. * * @param i the training data */ public void buildClassifier(Instances i) throws Exception { // can classifier handle the data? getCapabilities().testWithFail(i); } /** * Classifies the given instance. * * @param i the instance to classify * @return the classification result */ public double classifyInstance(Instance i) throws Exception { Object[] s = new Object[i.numAttributes()]; for (int j = 0; j < s.length; j++) { if (!i.isMissing(j)) { if (i.attribute(j).isNominal()) s[j] = new String(i.stringValue(j)); else if (i.attribute(j).isNumeric()) s[j] = new Double(i.value(j)); } } // set class value to missing s[i.classIndex()] = null; return WekaClassifier.classify(s); } /** * Returns the revision string. * * @return the revision */ public String getRevision() { return RevisionUtils.extract("1.0"); } /** * Returns only the classnames and what classifier it is based on. *

Ngày đăng: 13/12/2013, 11:27

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan