ทำความเข้าใจว่าโมเดล Machine Learning เหล่านี้ทำงานอย่างไรโดยการแสดงภาพพฤติกรรมในพื้นที่สามมิติ

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

สารบัญ

บทนำ
แผนผังการตัดสินใจและป่าสุ่ม
การวิเคราะห์ข้อมูล
การวางแผนแบบจำลอง
ภาพรวม
การฝึกอบรม/การแยกการตรวจสอบ
ชุดข้อมูลประดิษฐ์
ตารางเสริม< br /> แบบจำลอง
แบบจำลองค่าเฉลี่ยพื้นฐาน
แบบจำลองการถดถอยเชิงเส้น
แบบจำลองต้นไม้การตัดสินใจ
แบบจำลองฟอเรสต์แบบสุ่ม

หมายเหตุสรุป

บทนำ

โมเดลการเรียนรู้ของเครื่องได้รับการพัฒนาเพื่อแยกรูปแบบออกจากข้อมูลเพื่อคาดการณ์พฤติกรรมของข้อมูลใหม่ที่มองไม่เห็น ในปัญหาการจำแนกประเภท งานของแบบจำลองคือการแมปชุดคุณลักษณะกับสองหรือสองสามหมวดหมู่ ในปัญหาการถดถอย ภารกิจคือการแมปคุณลักษณะกับช่วงของค่าที่ตัวแปรเป้าหมายอาจสมมติได้ เช่น ในการทำนายราคาบ้านตามสถานที่ตั้ง พื้นที่เป็นตารางฟุต จำนวนห้องนอน เป็นต้น

สิ่งที่น่าสนใจหลักอย่างหนึ่งของโมเดล ML เช่น Decision Trees และ Random Forests คือความสามารถในการจับความสัมพันธ์แบบไม่เชิงเส้นระหว่างคุณลักษณะและตัวแปรเป้าหมาย เนื่องจากปัญหาและการประยุกต์ในโลกแห่งความเป็นจริงมักมีหลายมิติด้วยตัวแปรหลายตัว จึงเป็นการยากที่จะเห็นภาพความสัมพันธ์และการโต้ตอบที่ซับซ้อน

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

ต้นไม้ตัดสินใจและป่าสุ่ม

แผนผังการตัดสินใจ มีชื่อนี้เนื่องจากมีโครงสร้างคล้ายแผนผัง: จากโหนดรากเริ่มต้นเดียว (ซึ่งมีข้อมูลตัวอย่างทั้งหมด 'อยู่ข้างใน') อัลกอริธึมจะค้นหาคุณลักษณะซ้ำ ๆ เพื่อค้นหาการแยกที่เหมาะสมที่สุด จุดที่แยกชุดย่อยข้อมูลที่สรุปส่วนหนึ่งของเป้าหมายโดยมีข้อผิดพลาดน้อยที่สุด จากนั้น สำหรับเซ็ตย่อยนี้ อัลกอริธึมจะทำซ้ำขั้นตอนการค้นหาเพื่อค้นหาจุดแยกที่เหมาะสมที่สุด และต่อไปเรื่อยๆ จนกว่าจะถึงเกณฑ์การหยุด (เช่น ได้ระดับความลึกที่ระบุ) เมื่อโหนดเทอร์มินัลนี้บรรลุผลแล้ว ขั้นตอนถัดไปของอัลกอริทึมจะเกี่ยวข้องกับการแก้ปัญหาการแยกส่วนย่อยที่เหลือ ผลลัพธ์ที่ได้คือชุดของโหนดเทอร์มินัลที่สร้างการคาดการณ์เป้าหมายโดยลดข้อผิดพลาดให้เหลือน้อยที่สุด รูปด้านล่างแสดงตัวอย่างสมมุติฐานของแผนผังการตัดสินใจที่มีคุณสมบัติสองประการ (x1 และ x2) อัลกอริธึมใช้ x2 เพื่อแยกโหนด 0 ออกเป็นกิ่ง 1 และ 4 จากนั้นโหนด 1 ลงในโหนดเทอร์มินัล 2 และ 3 หลังจากนั้น อัลกอริธึมจะแก้ไขส่วนที่เหลือโดยใช้ x1

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

ป่าสุ่ม มีชื่อนี้เนื่องจากเป็นกลุ่มของแผนผังการตัดสินใจแบบสุ่ม ต้นไม้ต้นเดียวภายใน 'ป่า' จะถูกสุ่มในแง่ที่ว่าแต่ละต้นได้รับการฝึกอบรมด้วยการสุ่มตัวอย่างคุณลักษณะและการสังเกต ในลักษณะที่ต้นไม้แต่ละต้นพัฒนาวิธีแก้ปัญหาสำหรับส่วนที่สังเกตได้ของข้อมูลด้วยทรัพยากร (คุณลักษณะ) ที่มีอยู่ . จากนั้นป่าไม้จะรวมเอาผลลัพธ์ของแผนผังการตัดสินใจหลายต้นเข้าด้วยกันเพื่อให้ได้แนวทางแก้ไข ด้วยวิธีนี้ โมเดลนี้จะช่วยลดความเสี่ยงในการติดตั้งมากเกินไป และเพิ่มความยืดหยุ่นในการคาดการณ์ โมเดล Random Forests มีพารามิเตอร์ที่สำคัญบางประการ เช่น จำนวนแผนผังการตัดสินใจ ความลึก และจำนวนคุณลักษณะ (เช่น สุ่มเลือก 30% ของคุณลักษณะสำหรับแต่ละแผนผัง)

ในบทความนี้ เราจะเห็นภาพการทำงานของแบบจำลองเหล่านี้ ตลอดจนคุณลักษณะและพฤติกรรมของแบบจำลองเหล่านี้ ฉันเลือกชุดข้อมูลขนาดเล็กเพื่อความเรียบง่าย มาทำการวิเคราะห์ข้อมูลเชิงสำรวจก่อนเริ่มงานการสร้างแบบจำลองกัน!

การวิเคราะห์ข้อมูล

ที่นี่ ฉันได้รวมโค้ด Python ที่ให้คำแนะนำได้ดีที่สุด และคุณจะพบได้ใน "หน้า Github" ซึ่งเป็น "สมุดบันทึก" ฉบับสมบูรณ์และเอกสารประกอบของโครงการศึกษานี้ ตัวอย่างด้านล่างแสดงไลบรารี Python

# Import libraries
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

from matplotlib import gridspec
from mpl_toolkits.mplot3d import Axes3D

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.tree import DecisionTreeRegressor
from sklearn.tree import export_graphviz
from sklearn.tree import export_text
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error

import warnings # For disabling a warning message from dtreeviz
import graphviz
from dtreeviz.trees import dtreeviz 
from IPython.display import SVG

ลองพิจารณา "ชุดข้อมูลขนาดเล็กจาก Kaggle" ซึ่งประกอบด้วยคะแนนของนักเรียนที่ควรทำนายด้วยคุณลักษณะ 2 ประการ ได้แก่ จำนวนหลักสูตรที่เข้าเรียนและเวลาเรียน

# Dataframe df gets the csv file 'Student_Marks.csv'
df = pd.read_csv('Student_Marks.csv')
display( df.head() ) # display the first 5 rows

สถิติเชิงพรรณนาด้านล่างแสดงให้เห็นว่าชุดข้อมูลประกอบด้วยการสังเกต 100 รายการ, number_courses เป็นตัวแปรแยกตั้งแต่ 3 ถึง 8, time_study เป็นตัวแปรต่อเนื่องตั้งแต่ 0.096 ถึง 7.957 และ เครื่องหมายเป็นตัวแปรต่อเนื่องตั้งแต่ 5.609 ถึง 55.299

ดังที่เราเห็นในแปลงด้านล่าง คุณลักษณะต่างๆ มีความสัมพันธ์แบบไม่เชิงเส้นกับเป้าหมาย เมื่อพิจารณาจาก number_courses(แผงด้านซ้าย) มีแนวโน้มกระจายและอ่อนแอสำหรับคะแนนที่สูงขึ้นและมีจำนวนหลักสูตรมากขึ้น เราจะเห็นรูปแบบค่าเฉลี่ยที่แตกต่างกันสองรูปแบบ — ประมาณ 19 สำหรับ 3 ถึง 5 คอร์ส และประมาณ 30 สำหรับ 6 ถึง 8 คอร์ส เมื่อพิจารณาจาก time_study(แผงด้านขวา) มีรูปแบบที่ชัดเจนในการเพิ่มคะแนนพร้อมกับเวลาศึกษาที่เพิ่มขึ้น การสังเกตใกล้สุดขั้วทั้งสองเบี่ยงเบนไปจากความเป็นเส้นตรง และรูปแบบโดยรวมอธิบายได้ดีกว่าโดยใช้เส้นโค้งมากกว่าเส้นตรง

แนวคิดก็คือการใช้ทั้งสองคุณสมบัติ — number_courses และ time_study — เพื่อทำนายคะแนนของนักเรียน ในแผนภาพสามมิติด้านล่าง เราสามารถสังเกตพฤติกรรมไม่เชิงเส้นที่เราจะสร้างแบบจำลองและแสดงภาพการถดถอยได้

การวางแผนแบบจำลอง

ภาพรวม

แนวทางที่ฉันนำมาใช้ประกอบด้วยการพัฒนาแบบจำลองสี่แบบ:

  1. แบบจำลองค่าเฉลี่ย พื้นฐานที่จะมีการอ้างอิงเริ่มต้น
  2. โมเดลการถดถอยเชิงเส้นเพื่อให้เห็นภาพวิธีแก้ปัญหาเชิงเส้น
  3. แบบจำลองการถดถอยแบบแผนผังการตัดสินใจ
  4. แบบจำลองป่าสุ่ม

มีการนำขั้นตอนต่อไปนี้มาใช้:

  1. ข้อมูลถูกแบ่งออกเป็น ชุดการฝึก (70%) และ ชุดการตรวจสอบ (30%) สำหรับการประเมินประสิทธิภาพของโมเดลด้วยข้อมูลใหม่ที่ไม่เคยเห็นมาก่อน
  2. ประสิทธิภาพในการตรวจสอบได้รับการประเมินโดย ค่าคลาดเคลื่อนสัมบูรณ์เฉลี่ย(หรือ MAE) ซึ่งบ่งชี้ว่าการคาดการณ์เบี่ยงเบนไปจากค่าจริงโดยเฉลี่ยมากน้อยเพียงใด ยิ่ง MAE มีค่าน้อย การคาดการณ์ก็จะใกล้เคียงกับค่าจริงมากที่สุด
  3. ก่อนหน้าแผนผังการตัดสินใจขั้นสุดท้ายและแบบจำลองฟอเรสต์แบบสุ่ม ฉันได้ติดตามการปรับพารามิเตอร์ให้เหมาะสมเพื่อให้แน่ใจว่ามีการสรุปข้อมูลทั่วไปที่เพียงพอกับข้อมูลใหม่
  4. สำหรับการแสดงภาพพฤติกรรมของแบบจำลอง ฉันได้สร้างชุดข้อมูลเทียมซึ่งประกอบด้วยการรวมกันระหว่างค่าที่เป็นไปได้ของ number_courses (เช่น ตัวเลขหกตัว ตั้งแต่ 3 ถึง 8) และ time_study โดยมีตัวเลข 100 ตัวเว้นระยะเท่ากันระหว่าง 0.096 ถึง 7.957 คู่ 600 คู่นี้ได้รับการประมวลผลโดยแบบจำลองที่ผ่านการฝึกอบรมเพื่อวางแผนช่วงของการคาดการณ์

แยกการฝึก/การตรวจสอบ

แบบจำลองได้รับการฝึกอบรมโดยใช้ข้อมูล 70% และ 30% ใช้สำหรับการตรวจสอบความถูกต้อง ตัวอย่างด้านล่างแสดงการแบ่งการทดสอบรถไฟ

# Separating the Features and the Target
X = df[['number_courses', 'time_study']]
y = df['Marks']

# Splitting the dataset into train and validation sets
X_train, X_valid, y_train, y_valid = train_test_split(X, y,
                                                      test_size=0.3, 
                                                      random_state=13)

# X_train: 70 rows, 2 columns, y_train: 70 rows, 1 column
# X_valid: 30 rows, 2 columns, y_valid: 30 rows, 1 column

ชุดข้อมูลประดิษฐ์

ตัวอย่างด้านล่างแสดงการสร้างตัวเลข 600 คู่โดยพิจารณาจากค่าผสมระหว่างค่า number_courses ที่เป็นไปได้ 6 ค่า และค่า time_study ที่เป็นไปได้ 100 ค่า ห้าแถวแรกและแถวสุดท้ายของชุดข้อมูลนี้จะแสดงอยู่ด้านล่าง

# Create values for plotting the solution space of the models

# Generate a set of values for x1 and x2 coordinates
# x1 values range from 3 to 8
x1_values = np.arange(df['number_courses'].min(),df['number_courses'].max() + 1, 1) 

# x2 values range between min and max 
# This generates 100 equally spaced values between min and max:
x2_values = np.linspace(df['time_study'].min(), df['time_study'].max(), 100) 

# Combinatory between coordinates
x1_values, x2_values = np.meshgrid(x1_values, x2_values)
X_artif = np.array([x1_values.flatten(), x2_values.flatten()]).T

# Create a dataframe and display the first and last 5 rows
X_artif = pd.DataFrame(X_artif, columns=['number_courses', 'time_study'])

display( X_artif )

ตารางเสริม

ฉันยังได้สร้างตารางสำหรับการลงทะเบียนและแสดงข้อผิดพลาดในการฝึกอบรมและการตรวจสอบความถูกต้อง รวมถึงตารางสำหรับการลงทะเบียนการคาดการณ์ของแบบจำลองกับชุดการตรวจสอบความถูกต้อง

# List of models
models = ['Mean Model',
          'Linear Regression Model',
          'Decision Tree Model',
          'Random Forest Model']
# List of columns
cols = ['Error (Train)', 'Error (Validation)']

# DF with models as index
df_models = pd.DataFrame(index=models, columns=cols)

# Create a DF for the validation set and log models' predictions
df_valid = pd.concat([X_valid, y_valid], axis=1)

โมเดล

แบบจำลองค่าเฉลี่ยพื้นฐาน

โดยเป็นจุดเริ่มต้น ฉันได้พิจารณา Mean Model แบบธรรมดาเพื่อใช้เป็นข้อมูลอ้างอิง เพียงแต่ส่งกลับค่าเฉลี่ยของชุดการฝึกไปยังชุดการทดสอบใดๆ ที่มีให้ ดังที่แสดงในฟังก์ชันด้านล่าง:

# This function returns an array with the mean of the training set target
def mean_model(y_train, X_test):
    return np.array( [y_train.mean()] * X_test.shape[0] )

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

# Predictions for the validation set
df_valid['y_mean'] = mean_model(y_train, X_valid)

# Generate predictions based on the artificial data
predictions_m = mean_model(y_train, X_artif)

# Compute MAE - Train and Valid
mae_train_m_model = mean_absolute_error(y_train, mean_model(y_train, X_train))
mae_valid_m_model = mean_absolute_error(y_valid, df_valid['y_mean'])

# Log in the DF and display the results
df_models.loc['Mean Model', 'Error (Train)'] = mae_train_m_model
df_models.loc['Mean Model', 'Error (Validation)'] = mae_valid_m_model

display( df_models.iloc[:1] )

ด้านล่างนี้ เราจะเห็นว่า Mean Model มีลักษณะอย่างไรในพื้นที่สามมิติ โปรดสังเกตรหัสสีที่ฉันใช้กับโครงเรื่อง: ข้อมูลชุดการฝึกจะเป็นสีเขียว และข้อมูลชุดการตรวจสอบจะเป็นสีส้ม ช่วงการคาดการณ์ของแบบจำลองต่อชุดประดิษฐ์จะเป็นสีน้ำเงิน

โมเดลการถดถอยเชิงเส้น

ตอนนี้ เรามาสำรวจความพอดีเชิงเส้นของข้อมูลกัน ตัวอย่างด้านล่างแสดงการใช้งาน

# Create model and fit to the training data
lr_model = LinearRegression()
lr_model.fit(X_train, y_train)

# Generate predictions based on validation data
df_valid['y_lr'] = lr_model.predict(X_valid)

# Generate predictions based on the artificial data
predictions_lr = lr_model.predict(X_artif)

# Compute MAE - Train and Valid
mae_train_lr_model = mean_absolute_error(y_train, lr_model.predict(X_train))
mae_valid_lr_model = mean_absolute_error(y_valid, df_valid['y_lr'])

# Log in the DF
df_models.loc['Linear Regression Model', 'Error (Train)'] = mae_train_lr_model
df_models.loc['Linear Regression Model', 'Error (Validation)'] = mae_valid_lr_model

# Compute the decrease % and display df_models
df_models['Valid. Error Decrease (%)'] = df_models['Error (Validation)'].pct_change() * 100
display( df_models.iloc[:2].round(2) )

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

แบบจำลองแผนผังการตัดสินใจ

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

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

# Create and fit the model 
dt_model = DecisionTreeRegressor(max_depth=3,
                                 criterion='absolute_error',
                                 random_state=15)
dt_model.fit(X_train, y_train)

# Generate predictions based on the validation data
df_valid['y_dt'] = dt_model.predict(X_valid)

# Generate predictions based on the artificial data
predictions_dt = dt_model.predict(X_artif)

# Compute MAE - Train and Valid
mae_train_dt_model = mean_absolute_error(y_train, dt_model.predict(X_train))
mae_valid_dt_model = mean_absolute_error(y_valid, df_valid['y_dt'])

# Log in the DF
df_models.loc['Decision Tree Model', 'Error (Train)'] = mae_train_dt_model
df_models.loc['Decision Tree Model', 'Error (Validation)'] = mae_valid_dt_model

# Compute the decrease % and display df_models
df_models['Valid. Error Decrease (%)'] = df_models['Error (Validation)'].pct_change() * 100

display( df_models.iloc[:3].round(2) )

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

เนื่องจากกระบวนการแยก พฤติกรรมของต้นไม้จึงมีลักษณะเฉพาะด้วยรูปแบบการตอบสนองแบบเลเยอร์ที่สามารถจับส่วนของความไม่เชิงเส้นได้ ต้นไม้ที่มีความลึก 3 จะสร้างโหนดเทอร์มินัล 8 จุด และจากล่างขึ้นบนของโครงเรื่อง (แผงด้านขวา) เราสามารถสังเกตการถดถอยทั้ง 8 ระดับได้

เมื่อดูการถดถอยแบบแผนผังการตัดสินใจในพื้นที่สามมิติ ตอนนี้เราสามารถสำรวจเพิ่มเติมว่าแบบจำลองพัฒนาโซลูชันได้อย่างไร ไลบรารีหลาม dtreeviz ให้การแสดงภาพที่ดี หากคุณจำคำอธิบายสั้น ๆ ของฉันเกี่ยวกับแผนผังการตัดสินใจได้ คุณควรอ่านรูปภาพด้านล่างตามลำดับหมายเลข โหนด 0 และ 1 ใช้ค่า time_study เพื่อแยกตัวอย่างเล็กๆ ที่มีจุดที่คล้ายกันมากกว่า และโหนด 2 ใช้ number_courses เพื่อสร้างโหนดเทอร์มินัล 3 และ 4 เพิ่มเติม โปรดสังเกตค่า Mark ที่คาดการณ์ไว้ ในโหนดเทอร์มินัล

โมเดลนี้มีการคาดการณ์ที่แตกต่างกัน 8 แบบ และด้วยเหตุนี้แผนผังการตัดสินใจจึงค่อนข้างจำกัดในการจับส่วนที่เกี่ยวข้องทั้งหมดของการกระจาย Figurebelow ที่สร้างโดยไลบรารี graphviz ยังให้การแสดงภาพที่สวยงามซึ่งรวมถึงข้อผิดพลาดที่แน่นอนและจำนวนตัวอย่างสำหรับแต่ละโหนด

การตรวจสอบความสำคัญของคุณลักษณะของโมเดลระบุว่า time_study เป็นตัวแปรที่สำคัญที่สุด

โมเดลป่าสุ่ม

จำนวนตัวประมาณค่าเป็นพารามิเตอร์ที่สำคัญของป่าสุ่ม และขั้นตอนแรกคือการทดสอบแบบจำลองที่มีจำนวนตัวประมาณค่าต่างกัน พารามิเตอร์อื่นๆ เช่น ความลึกของต้นไม้และจำนวนจุดสนใจนั้นคงที่และไม่มีข้อจำกัด ดังแสดงในรูปด้านล่าง การเพิ่มประสิทธิภาพระบุว่าระยะทางในการตรวจสอบความถูกต้องของรถไฟขั้นต่ำคือประมาณ 0.40 โดยมีตัวประมาณ 25 ตัว

ตัวอย่างด้านล่างแสดงการใช้งาน Random Forest โดยมีตัวประมาณค่า 25 ตัวและข้อผิดพลาดสัมบูรณ์เป็นเกณฑ์การแยก พารามิเตอร์อื่นๆ ของแบบจำลองมีข้อกำหนดมาตรฐาน ซึ่งหมายความว่าความลึกของต้นไม้ไม่ถูกจำกัด และต้นไม้ทั้งหมดมีคุณสมบัติทั้งสองประการ องค์ประกอบแบบสุ่มของแบบจำลองที่ได้มาจากการสุ่มตัวอย่างบูตสแตรปของชุดการฝึก

# Create and fit the model that produced the minimum MAE
best_n_estimator = 25
rf_model = model = RandomForestRegressor(n_estimators=best_n_estimator,
                                         criterion='absolute_error',
                                         random_state=15)
rf_model.fit(X_train, y_train)

# Generate predicions based on the validation set
df_valid['y_rf'] = rf_model.predict(X_valid)

# Generate predictions based on the artificial set
predictions_rf = rf_model.predict(X_artif)

# Compute MAE - Train and Valid
mae_train_rf_model = mean_absolute_error(y_train, rf_model.predict(X_train))
mae_valid_rf_model = mean_absolute_error(y_valid, df_valid['y_rf'])

# Log in the DF
df_models.loc['Random Forest Model', 'Error (Train)'] = mae_train_rf_model
df_models.loc['Random Forest Model', 'Error (Validation)'] = mae_valid_rf_model

# Compute the decrease % and display df_models
df_models['Valid. Error Decrease (%)'] = df_models['Error (Validation)'].pct_change() * 100
display( df_models.round(2) )

ประสิทธิภาพการตรวจสอบความถูกต้องของฟอเรสต์แบบสุ่มแสดงถึงข้อผิดพลาดลดลง 58.1% เมื่อเปรียบเทียบกับการถดถอยแบบแผนผังการตัดสินใจ และข้อผิดพลาดลดลง 63.8% เมื่อเปรียบเทียบกับการถดถอยเชิงเส้น การคาดการณ์เบี่ยงเบนไปจากเครื่องหมายจริงของชุดตรวจสอบโดยเฉลี่ย 1 จุด ซึ่งมีความแม่นยำมากกว่ารุ่นอื่นๆ มาก เนื่องจากมีจำนวนตัวประมาณค่าสูง Random Forest จึงสามารถคาดการณ์ได้ละเอียดมากขึ้น ในรูปด้านล่าง เราจะเห็นว่าการถดถอยของฟอเรสต์แบบสุ่มมีลักษณะอย่างไรในพื้นที่สามมิติ

การตรวจสอบความสำคัญของคุณลักษณะของโมเดลระบุว่า time_study เป็นคุณลักษณะที่สำคัญที่สุด และในกรณีนี้ ความสำคัญ number_courses สูงกว่าที่สังเกตได้จากโมเดลแผนผังการตัดสินใจ

สรุปข้อสังเกต

จุดประสงค์ของบทความนี้คือเพื่อสำรวจพฤติกรรมไม่เชิงเส้นของแผนผังการตัดสินใจและฟอเรสต์สุ่ม โดยเฉพาะอย่างยิ่งสำหรับการแสดงภาพการถดถอยและวิธีแก้ปัญหาแบบไม่เชิงเส้นของแบบจำลอง

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

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