วิธีใช้ตอการตัดสินใจในฐานะผู้เรียนที่อ่อนแอใน Adaboost


12

ฉันต้องการใช้ Adaboost โดยใช้ Decision Stump ถูกต้องหรือไม่ที่จะทำการตัดสินใจตอให้มากที่สุดเท่าที่คุณสมบัติของชุดข้อมูลของเราในแต่ละการซ้ำของ Adaboost

ตัวอย่างเช่นถ้าฉันมีชุดข้อมูลที่มี 24 คุณลักษณะฉันควรมีตัวแยกประเภทตอการตัดสินใจ 24 ครั้งในการวนซ้ำแต่ละครั้งหรือไม่ หรือฉันควรเลือกคุณสมบัติบางอย่างแบบสุ่มและสร้างตัวจําแนกพวกมันแทนคุณสมบัติทั้งหมดหรือไม่

คำตอบ:


12

วิธีการทั่วไปในการฝึกอบรมต้นไม้ตัดสินใจ (ระดับ 1) คือการค้นหาคุณลักษณะที่ให้การแบ่งที่บริสุทธิ์ที่สุด นั่นคือถ้าเราแบ่งชุดข้อมูลของเราออกเป็นสองชุดย่อยเราต้องการให้ป้ายกำกับภายในชุดย่อยเหล่านี้มีความเหมือนกันมากที่สุด ดังนั้นจึงสามารถเห็นได้ว่าเป็นการสร้างต้นไม้จำนวนมาก - ต้นไม้สำหรับแต่ละคุณลักษณะ - จากนั้นเลือกต้นไม้ที่สร้างการแยกที่ดีที่สุด

ในบางกรณีก็เหมาะสมที่จะเลือกเซ็ตย่อยของแอ็ตทริบิวต์จากนั้นฝึกฝนต้นไม้บนเซ็ตย่อย ตัวอย่างเช่นนี้ใช้ในป่าสุ่มเพื่อลดความสัมพันธ์ระหว่างต้นไม้แต่ละต้น

แต่เมื่อพูดถึง AdaBoost โดยทั่วไปแล้วก็เพียงพอที่จะตรวจสอบให้แน่ใจว่าตัวจําแนกพื้นฐานสามารถฝึกอบรมในจุดข้อมูลที่มีการชั่งนํ้าหนักได้และการเลือกคุณสมบัติแบบสุ่มมีความสําคัญน้อยกว่า ต้นไม้การตัดสินใจสามารถรับน้ำหนักได้ (ดูเช่นที่นี่หรือที่นี่ ) มันอาจทำได้โดยการถ่วงน้ำหนักการมีส่วนร่วมของแต่ละจุดข้อมูลไปที่การปนเปื้อนรวมย่อย

สำหรับการอ้างอิงฉันจะเพิ่ม AdaBoost ของฉันใน python โดยใช้ numpy และsklearnDecisionTreeClassifierด้วยmax_depth=1:

# input: dataset X and labels y (in {+1, -1})
hypotheses = []
hypothesis_weights = []

N, _ = X.shape
d = np.ones(N) / N

for t in range(num_iterations):
    h = DecisionTreeClassifier(max_depth=1)

    h.fit(X, y, sample_weight=d)
    pred = h.predict(X)

    eps = d.dot(pred != y)
    alpha = (np.log(1 - eps) - np.log(eps)) / 2

    d = d * np.exp(- alpha * y * pred)
    d = d / d.sum()

    hypotheses.append(h)
    hypothesis_weights.append(alpha)

สำหรับการทำนายฉลาก:

# X input, y output
y = np.zeros(N)
for (h, alpha) in zip(hypotheses, hypotheses_weight):
    y = y + alpha * h.predict(X)
y = np.sign(y)

ขอบคุณ ตอการตัดสินใจใช้เป็น rpart (เป็นอัลกอริธึมทรีการตัดสินใจ) ที่มีความลึกสูงสุด 1 หรือไม่ ฉันหมายถึงฉันควรเลือกแอตทริบิวต์แบบสุ่มหรือแผนภูมิควรแยกตามเกณฑ์เฉพาะเช่นดัชนี Gini @AlexeyGrigorev
Pegah

Decision stump = 1-rule = แผนผังการตัดสินใจที่มีหนึ่งโหนด (ที่มีความลึกสูงสุด 1) คุณควรเลือกการแยกตามการวัดสิ่งเจือปนบางอย่างเช่นตามดัชนี Gini
Alexey Grigorev

ขอบคุณสำหรับคำตอบโดยละเอียด!
xsari3x
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.