सबसे पहले, पूर्ण प्रकटीकरण प्रदान करने के लिए, मैं यह इंगित करना चाहता हूं कि यह मशीन लर्निंग क्लास में होमवर्क से संबंधित है। यह प्रश्न होमवर्क प्रश्न नहीं है और इसके बजाय आईडी 3 निर्णय ट्री एल्गोरिदम बनाने की बड़ी समस्या को पूरा करने के लिए मुझे कुछ पता लगाने की आवश्यकता है।सहायता की आवश्यकता एक बाइनरी वृक्ष को देखते हुए सत्य तालिका
मैं के समान पेड़ उत्पन्न करने के लिए की जरूरत है निम्नलिखित जब एक सच तालिका
let learnedTree = Node(0,"A0", Node(2,"A2", Leaf(0), Leaf(1)), Node(1,"A1", Node(2,"A2", Leaf(0), Leaf(1)), Leaf(0)))
learnedTree प्रकार BinaryTree जो मैं इस प्रकार परिभाषित किया है की है दिया:
type BinaryTree =
| Leaf of int
| Node of int * string * BinaryTree * BinaryTree
ID3 एल्गोरिदम को ध्यान में रखना पेड़ को विभाजित करने के लिए यह निर्धारित करने के लिए विभिन्न समीकरण, और मुझे यह पता चला है कि मुझे पता चला है कि मुझे अपनी सच्ची मेज से सीखने वाले पेड़ को बनाने में परेशानी हो रही है। उदाहरण के लिए अगर मैं निम्न तालिका
A1 | A2 | A3 | Class
1 0 0 1
0 1 0 1
0 0 0 0
1 0 1 0
0 0 0 0
1 1 0 1
0 1 1 0
है और मैं विशेषता A1 पर विभाजित करने का फैसला मैं निम्नलिखित के साथ खत्म हो जाएगा:
(A1 = 1) A1 (A1 = 0)
A2 | A3 | Class A2 | A3 | Class
0 0 1 1 0 1
0 1 0 0 0 0
1 0 1 0 0 0
0 1 1
तो मैं बाईं ओर विभाजित हैं और दाईं ओर विभाजित , और जब तक पत्ती नोड शुद्ध होते हैं तब तक रिकर्सिव पैटर्न जारी रखें और मैं विभाजन के आधार पर निम्नलिखित के समान पेड़ के साथ समाप्त होता हूं।
let learnedTree = Node(0,"A0", Node(2,"A2", Leaf(0), Leaf(1)), Node(1,"A1", Node(2,"A2", Leaf(0), Leaf(1)), Leaf(0)))
यहाँ है कि मैं क्या तरह का "काट दिया" किया है एक साथ इस प्रकार दूर है, लेकिन मुझे लगता है मैं जिस तरह से बंद हो सकता है:
let rec createTree (listToSplit : list<list<float>>) index =
let leftSideSplit =
listToSplit |> List.choose (fun x -> if x.Item(index) = 1. then Some(x) else None)
let rightSideSplit =
listToSplit |> List.choose (fun x -> if x.Item(index) = 0. then Some(x) else None)
if leftSideSplit.Length > 0 then
let pureCheck = isListPure leftSideSplit
if pureCheck = 0 then
printfn "%s" "Pure left node class 0"
createTree leftSideSplit (index + 1)
else if pureCheck = 1 then
printfn "%s" "Pure left node class 1"
createTree leftSideSplit (index + 1)
else
printfn "%s - %A" "Recursing Left" leftSideSplit
createTree leftSideSplit (index + 1)
else printfn "%s" "Pure left node class 0"
मैं बजाय मिलान पद्धति का उपयोग कर किया जाना चाहिए? कोई सुझाव/विचार/मदद? बहुत बहुत धन्यवाद!