สัญชาตญาณของคุณถูกต้อง คำตอบนี้แสดงให้เห็นเพียงตัวอย่าง
มันย่อมเป็นเรื่องธรรมดาเข้าใจผิดว่ารถเข็นสินค้า / RF เป็นอย่างใดที่มีประสิทธิภาพเพื่อค่าผิดปกติ
แสดงให้เห็นถึงการขาดความทนทานของ RF เพื่อการปรากฏตัวของค่าผิดปกติเดียวที่เราสามารถ (เบา ๆ ) ปรับเปลี่ยนรหัสที่ใช้ในคำตอบที่โซเรน Havelund เอ่อของด้านบนเพื่อแสดงให้เห็นว่าซิงเกิ้ล 'พอเพียง y'-ค่าผิดปกติที่จะสมบูรณ์แกว่งรุ่น RF ติดตั้ง ตัวอย่างเช่นถ้าเราคำนวณข้อผิดพลาดการคาดคะเนค่าเฉลี่ยของการสังเกตแบบไม่มีการปนเปื้อนเป็นฟังก์ชั่นของระยะห่างระหว่างค่าผิดปกติและส่วนที่เหลือของข้อมูลเราสามารถเห็น (ภาพด้านล่าง) ที่แนะนำค่าผิดพลาดเพียงครั้งเดียวโดยค่าตามอำเภอใจใน 'y'-space) พอเพียงเพื่อดึงการทำนายของโมเดล RF โดยพลการไกลจากค่าที่พวกเขาจะได้ถ้าคำนวณบนข้อมูลดั้งเดิม (ไม่มีการปนเปื้อน):
library(forestFloor)
library(randomForest)
library(rgl)
set.seed(1)
X = data.frame(replicate(2,runif(2000)-.5))
y = -sqrt((X[,1])^4+(X[,2])^4)
X[1,]=c(0,0);
y2<-y
rg<-randomForest(X,y) #RF model fitted without the outlier
outlier<-rel_prediction_error<-rep(NA,10)
for(i in 1:10){
y2[1]=100*i+2
rf=randomForest(X,y2) #RF model fitted with the outlier
rel_prediction_error[i]<-mean(abs(rf$predict[-1]-y2[-1]))/mean(abs(rg$predict[-1]-y[-1]))
outlier[i]<-y2[1]
}
plot(outlier,rel_prediction_error,type='l',ylab="Mean prediction error (on the uncontaminated observations) \\\ relative to the fit on clean data",xlab="Distance of the outlier")
ไกลแค่ไหน? ในตัวอย่างข้างต้นค่าผิดเพี้ยนเพียงอย่างเดียวมีการเปลี่ยนแปลงอย่างมากจนข้อผิดพลาดการคาดคะเน (บนที่ไม่มีการปนเปื้อน) อยู่ในขณะนี้1-2 ออเดอร์ที่มีขนาดใหญ่กว่าที่เคยเป็นมา
ดังนั้นจึงไม่เป็นความจริงที่ค่าผิดพลาดเพียงครั้งเดียวจะไม่ส่งผลกระทบต่อ RF fit
นอกจากนี้ขณะที่ผมชี้ให้เห็นอื่น ๆ , ค่าผิดปกติมีมากยากที่จะจัดการกับเมื่อมีที่อาจเกิดขึ้นหลายของพวกเขา (แม้ว่าพวกเขาจะไม่จำเป็นต้องมีขนาดใหญ่สัดส่วนของข้อมูลสำหรับผลกระทบของพวกเขาที่จะแสดงขึ้น) แน่นอนข้อมูลที่ปนเปื้อนสามารถมีค่าได้มากกว่าหนึ่งค่า ในการวัดผลกระทบของค่าผิดปกติหลายอย่างบน RF เปรียบเทียบให้พล็อตทางด้านซ้ายที่ได้รับจาก RF ในข้อมูลที่ไม่มีการปนเปื้อนกับพล็อตทางด้านขวาที่ได้รับโดยการเลื่อน 5% ของค่าการตอบสนอง .
ในที่สุดในบริบทการถดถอยสิ่งสำคัญคือต้องชี้ให้เห็นว่าผู้ผิดพลาดสามารถโดดเด่นจากข้อมูลจำนวนมากทั้งในพื้นที่การออกแบบและการตอบสนอง (1) ในบริบทเฉพาะของ RF ค่าผิดปกติของการออกแบบจะมีผลต่อการประมาณค่าพารามิเตอร์มากเกินไป อย่างไรก็ตามเอฟเฟกต์ที่สองนี้มีความชัดเจนมากขึ้นเมื่อจำนวนมิติมีขนาดใหญ่
สิ่งที่เราสังเกตที่นี่เป็นกรณีเฉพาะของผลลัพธ์ทั่วไป ความไวอย่างมากต่อค่าผิดปกติของวิธีการปรับข้อมูลแบบหลายตัวแปรตามฟังก์ชั่นการสูญเสียนูนได้ถูกค้นพบหลายครั้ง ดู (2) สำหรับภาพประกอบในบริบทเฉพาะของวิธีการ ML
แก้ไข
โชคดีที่ในขณะที่อัลกอริธึมพื้นฐานของ CART / RF นั้นไม่แข็งแรงอย่างชัดเจนต่อค่าผิดปกติ แต่ก็เป็นไปได้ (และง่ายต่อการเงียบ) ในการปรับเปลี่ยนขั้นตอนเพื่อบอกความทนทานให้กับ "y" ตอนนี้ฉันจะมุ่งเน้นไปที่การถดถอย RF (เนื่องจากนี่เป็นเป้าหมายของคำถาม OP โดยเฉพาะ) แม่นยำยิ่งขึ้นเขียนเกณฑ์การแยกสำหรับโหนดโดยพลการเป็น:เสื้อ
s* * * *= หาเรื่องสูงสุดs[ pLvar ( tL( s ) ) + pRvar ( tR( s ) ) ]
โดยที่และเป็นโหนดลูกที่เกิดขึ้นใหม่ขึ้นอยู่กับการเลือก (และเป็นฟังก์ชั่นโดยนัยของ ) และ
หมายถึงส่วนของข้อมูลที่อยู่ในโหนดลูกซ้ายและคือส่วนแบ่ง ของข้อมูลในt_Rจากนั้นเราสามารถบอก "y" - ความทนทานของพื้นที่เพื่อต้นไม้ถดถอย (และดังนั้น RF ของ) โดยการแทนที่ฟังก์ชั่นความแปรปรวนที่ใช้ในคำนิยามเดิมโดยทางเลือกที่แข็งแกร่ง นี่คือสิ่งสำคัญในวิธีการที่ใช้ใน (4) ซึ่งความแปรปรวนจะถูกแทนที่ด้วยเครื่องประเมินขนาด M ที่แข็งแกร่งt R s ∗ t L t R s p L t L p R = 1 - p L t Rเสื้อLเสื้อRs* * * *เสื้อLเสื้อRsพีLเสื้อLพีR= 1 - pLเสื้อR
- (1) เปิดโปง Outliers Multivariate และ Leverage Points Peter J. Rousseeuw และ Bert C. van Zomeren วารสารสมาคมอเมริกันสถิติฉบับที่ 85, หมายเลข 411 (ก.ย. , 1990), หน้า 633-639
- (2) การจำแนกเสียงแบบสุ่มเอาชนะผู้ที่มีศักยภาพนูนได้ทั้งหมด Philip M. Long และ Rocco A. Servedio (2008) http://dl.acm.org/citation.cfm?id=1390233
- (3) C. Becker และ U. Gather (1999) จุดแตกหักกำบัง Masking ของกฎการระบุค่าแบบหลายตัวแปรแบบเก่า
- (4) Galimberti, G. , Pillati, M. , & Soffritti, G. (2007) โครงสร้างการถดถอยที่แข็งแกร่งขึ้นอยู่กับตัวประเมิน M Statistica, LXVII, 173–190
library(forestFloor)
library(randomForest)
library(rgl)
set.seed(1)
X<-data.frame(replicate(2,runif(2000)-.5))
y<--sqrt((X[,1])^4+(X[,2])^4)
Col<-fcol(X,1:2) #make colour pallete by x1 and x2
#insert outlier2 and colour it black
y2<-y;Col2<-Col
y2[1:100]<-rnorm(100,200,1); #outliers
Col[1:100]="#000000FF" #black
#plot training set
plot3d(X[,1],X[,2],y,col=Col)
rf=randomForest(X,y) #RF on clean data
rg=randomForest(X,y2) #RF on contaminated data
vec.plot(rg,X,1:2,col=Col,grid.lines=200)
mean(abs(rf$predict[-c(1:100)]-y[-c(1:100)]))
mean(abs(rg$predict[-c(1:100)]-y2[-c(1:100)]))