ต้นไม้การตัดสินใจที่เพิ่มระดับการไล่ระดับสี

เช่นเดียวกับการแบ่งกลุ่มและการเพิ่มประสิทธิภาพ การเพิ่มความชันเป็นวิธีการที่ใช้ร่วมกับอัลกอริทึมแมชชีนเลิร์นนิงอื่น การเพิ่มประสิทธิภาพด้วย Gradient เกี่ยวข้องกับโมเดล 2 ประเภท ได้แก่

  • โมเดลแมชชีนเลิร์นนิงที่ "อ่อน" ซึ่งโดยทั่วไปคือแผนภูมิการตัดสินใจ
  • โมเดลแมชชีนเลิร์นนิงที่ "มีประสิทธิภาพ" ซึ่งประกอบด้วยโมเดลที่มีประสิทธิภาพต่ำหลายโมเดล

ในการเพิ่มประสิทธิภาพด้วย Gradient Boosting แต่ละขั้นตอนจะมีการฝึกโมเดลที่มีประสิทธิภาพต่ำแบบใหม่เพื่อคาดการณ์ "ข้อผิดพลาด" ของโมเดลที่มีประสิทธิภาพสูงปัจจุบัน (ซึ่งเรียกว่าการตอบสนองจำลอง) เราจะอธิบายรายละเอียด "error" ในภายหลัง ในระหว่างนี้ ให้ถือว่า "ข้อผิดพลาด" คือความแตกต่างระหว่างการคาดการณ์กับป้ายกำกับแบบถดถอย จากนั้นจะเพิ่มโมเดลที่มีประสิทธิภาพต่ำ (นั่นคือ "ข้อผิดพลาด") ลงในโมเดลที่มีประสิทธิภาพสูงโดยใส่เครื่องหมายลบเพื่อลดข้อผิดพลาดของโมเดลที่มีประสิทธิภาพสูง

การบูสต์ด้วย Gradient เป็นกระบวนการที่ต้องทำซ้ำ แต่ละรอบจะเรียกใช้สูตรต่อไปนี้

\[ F_{i+1} = F_i - f_i \]

where:

  • $F_i$ คือโมเดลที่มีประสิทธิภาพในระยะ $i$
  • $f_i$ คือโมเดลที่มีประสิทธิภาพต่ำในขั้นตอน $i$

การดำเนินการนี้จะซ้ำไปจนกว่าจะเป็นไปตามเกณฑ์การหยุด เช่น จํานวนการวนซ้ำสูงสุด หรือหากโมเดล (ที่มีประสิทธิภาพสูง) เริ่มปรับให้พอดีมากเกินไปตามที่วัดในชุดข้อมูลที่ใช้ตรวจสอบแยกต่างหาก

มาดูตัวอย่างการเพิ่มประสิทธิภาพด้วย Gradient Boosting ในชุดข้อมูลการหาค่าประมาณแบบง่ายกัน ดังนี้

  • วัตถุประสงค์คือคาดการณ์ $y$ จาก $x$
  • ระบบจะเริ่มต้นค่าประมาณที่แน่นอนให้เป็นค่าคงที่ 0: $F_0(x) = 0$
# Simplified example of regressive gradient boosting.

y = ... # the labels
x = ... # the features

strong_model = []
strong_predictions = np.zeros_like(y) # Initially, the strong model is empty.

for i in range(num_iters):

    # Error of the strong model
    error = strong_predictions - y

    # The weak model is a decision tree (see CART chapter)
    # without pruning and a maximum depth of 3.
    weak_model = tfdf.keras.CartModel(
        task=tfdf.keras.Task.REGRESSION,
        validation_ratio=0.0,
        max_depth=3)
    weak_model.fit(x=x, y=error)

    strong_model.append(weak_model)

    weak_predictions = weak_model.predict(x)[:,0]

    strong_predictions -= weak_predictions

มาลองใช้โค้ดนี้กับชุดข้อมูลต่อไปนี้กัน

ผังข้อมูลจากการสังเกตการณ์โดยตรงขององค์ประกอบ x รายการหนึ่งและป้ายกำกับ y ขององค์ประกอบนั้น พล็อตคือชุดของคลื่นไซน์ที่ค่อนข้างถูกทำให้อ่อนลง

รูปที่ 25 ชุดข้อมูลการถดถอยสังเคราะห์ที่มีฟีเจอร์ตัวเลข 1 รายการ

 

แผนภูมิ 3 รายการต่อไปนี้แสดงหลังจากการวนซ้ำครั้งแรกของอัลกอริทึมการเพิ่มประสิทธิภาพด้วยการเพิ่มเชิงลาด

ผัง 3 ผัง ผังแรกแสดงการคาดการณ์ของโมเดลที่มีประสิทธิภาพ ซึ่งก็คือเส้นตรงที่มีความชัน 0 และค่าคงที่ y เป็น 0 ผังภาพที่ 2 แสดงข้อผิดพลาดของรูปแบบที่แม่นยํา ซึ่งเป็นชุดของคลื่นไซน์ ผังภาพที่ 3 แสดงการคาดการณ์ของโมเดลที่มีประสิทธิภาพต่ำ ซึ่งเป็นชุดคลื่นสี่เหลี่ยม

รูปที่ 26 ผัง 3 ผังหลังจากการทำซ้ำครั้งแรก

 

โปรดทราบข้อมูลต่อไปนี้เกี่ยวกับผังในรูปที่ 26

  • ผังแรกแสดงการคาดการณ์ของโมเดลที่มีประสิทธิภาพ ซึ่งปัจจุบันจะเท่ากับ 0 เสมอ
  • ผังภาพที่ 2 แสดงข้อผิดพลาด ซึ่งเป็นป้ายกํากับของโมเดลที่มีประสิทธิภาพต่ำ
  • ผังภาพที่ 3 แสดงโมเดลที่มีประสิทธิภาพต่ำ

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

ด้านล่างนี้คือผังเดียวกันสำหรับอีกรอบหนึ่งของอัลกอริทึม

ผัง 3 ผัง ผังแรกแสดงการคาดการณ์ของโมเดลที่มีประสิทธิภาพ ซึ่งผังนี้กลับกันกับผังการคาดการณ์ของโมเดลที่มีประสิทธิภาพต่ำจากรูปภาพก่อนหน้า ผังภาพที่ 2 แสดงข้อผิดพลาดของโมเดลที่มีประสิทธิภาพสูง ซึ่งเป็นชุดคลื่นไซน์ที่มีสัญญาณรบกวน ผังที่สามแสดงการคาดการณ์ของโมเดลที่มีประสิทธิภาพต่ำ ซึ่งเป็นคลื่นสี่เหลี่ยมจัตุรัส 2 รูป

รูปที่ 27 ผัง 3 รายการหลังจากการวนซ้ำครั้งที่ 2

 

โปรดทราบข้อมูลต่อไปนี้เกี่ยวกับผังในรูปที่ 27

  • ตอนนี้โมเดลที่มีประสิทธิภาพจะมีข้อมูลการคาดการณ์ของโมเดลที่มีประสิทธิภาพต่ำของการทำซ้ำก่อนหน้า
  • ความคลาดเคลื่อนใหม่ของโมเดลที่มีประสิทธิภาพสูงจะน้อยกว่าเล็กน้อย
  • การคาดการณ์ใหม่ของโมเดลที่มีประสิทธิภาพต่ำตอนนี้มุ่งเน้นที่ส่วนด้านขวาของพื้นที่ลักษณะ

เราเรียกใช้อัลกอริทึมซ้ำอีก 8 ครั้ง ดังนี้

ผังแสดงให้เห็นว่าโมเดลที่มีประสิทธิภาพดีค่อยๆ เข้าใกล้ข้อมูลจากการสังเกตการณ์โดยตรงมากขึ้น ขณะที่การคาดการณ์ของโมเดลที่มีประสิทธิภาพต่ำค่อยๆ อ่อนแอลง

รูปที่ 28 ผัง 3 รายการหลังจากการวนซ้ำครั้งที่ 3 และครั้งที่ 10

 

ในรูปที่ 28 โปรดสังเกตว่าการคาดการณ์ของโมเดลที่มีประสิทธิภาพเริ่มคล้ายกับผังชุดข้อมูล

ตัวเลขเหล่านี้แสดงอัลกอริทึมการเพิ่มประสิทธิภาพด้วย Gradient Boosting โดยใช้ต้นไม้การตัดสินใจเป็นอัลกอริทึมการเรียนรู้แบบอ่อน การผสมผสานนี้เรียกว่าต้นไม้ (การตัดสินใจ) ที่เพิ่มประสิทธิภาพด้วย Gradient

ผังก่อนหน้าแสดงถึงแก่นแท้ของการเพิ่มประสิทธิภาพด้วย Gradient อย่างไรก็ตาม ตัวอย่างนี้ไม่มีการดำเนินการ 2 รายการต่อไปนี้ซึ่งเกิดขึ้นจริง

  • การลดลง
  • การเพิ่มประสิทธิภาพค่าใบด้วยวิธีของนิวตัน 1 ขั้นตอน

การหดตัว

โมเดลที่อ่อนแอ $f_i$ จะคูณด้วยค่าเล็กๆ $\nu$ (เช่น $\nu = 0.1$) ก่อนที่จะเพิ่มลงในโมเดลที่แข็งแกร่ง $F_i$ ค่าเล็กๆ นี้เรียกว่าการหดตัว กล่าวคือ แทนที่จะใช้สูตรต่อไปนี้ในการวนซ้ำแต่ละครั้ง

\[ F_{i+1} = F_i - f_i \]

แต่ละรอบจะใช้สูตรต่อไปนี้

\[ F_{i+1} = F_i - \nu f_i \]

การลดลงในการเพิ่มประสิทธิภาพด้วย Gradient Boosting นั้นคล้ายกับอัตราการเรียนรู้ในโครงข่ายประสาทเทียม การลดขนาดควบคุมความเร็วในการเรียนรู้ของโมเดลที่มีประสิทธิภาพ ซึ่งช่วยจำกัดการจับคู่ที่มากเกินไป กล่าวคือ ค่าการหดตัวที่ใกล้กับ 0.0 จะช่วยลดการพอดีมากเกินไปได้มากกว่าค่าการหดตัวที่ใกล้กับ 1.0

ในโค้ดด้านบน เราจะใช้การหดตัวดังนี้

shrinkage = 0.1   # 0.1 is a common shrinkage value.
strong_predictions -= shrinkage * weak_predictions