RMSE คืออะไร หรือที่เรียกว่า MSE, RMD หรือ RMS มันแก้ปัญหาอะไรได้บ้าง?
ถ้าคุณเข้าใจ RMSE: (ข้อผิดพลาดรูตเฉลี่ยกำลังสอง), MSE: (ข้อผิดพลาดกำลังสองเฉลี่ย) RMD (รูตเฉลี่ยเบี่ยงเบนกำลังสอง) และ RMS: (รูตเฉลี่ยกำลังสอง), ดังนั้นการขอให้ห้องสมุดคำนวณสิ่งนี้สำหรับคุณ . ตัวชี้วัดทั้งหมดเหล่านี้เป็นรหัสไพ ธ อนบรรทัดเดียวที่ยาวไม่เกิน 2 นิ้ว สามเมทริก rmse, mse, rmd และ rms อยู่ที่แกนหลักของพวกเขาที่มีแนวคิดเหมือนกัน
RMSE ตอบคำถาม: "วิธีการที่คล้ายกันโดยเฉลี่ยเป็นตัวเลขในlist1
การlist2
?" รายการทั้งสองจะต้องมีขนาดเท่ากัน ฉันต้องการ "ขจัดเสียงรบกวนระหว่างองค์ประกอบสองอย่างที่กำหนดล้างขนาดของข้อมูลที่รวบรวมและรับความรู้สึกจำนวนเดียวสำหรับการเปลี่ยนแปลงตลอดเวลา"
ปรีชาและ ELI5 สำหรับ RMSE:
ลองนึกภาพคุณกำลังเรียนรู้การโยนลูกดอกที่กระดานปาเป้า ทุกวันที่คุณฝึกฝนเป็นเวลาหนึ่งชั่วโมง คุณต้องการทราบว่าคุณดีขึ้นหรือแย่ลง ดังนั้นทุกวันคุณจะขว้าง 10 ครั้งและวัดระยะห่างระหว่างเป้าและที่โผของคุณชน
list1
คุณทำให้รายการของตัวเลขเหล่านั้น ใช้ข้อผิดพลาดกำลังสองเฉลี่ยของรูทระหว่างระยะทางในวันที่ 1 และศูนย์list2
ที่มีค่าศูนย์ทั้งหมด ทำเช่นเดียวกันในวันที่ 2 และวันที่ สิ่งที่คุณจะได้รับคือตัวเลขเดียวที่หวังว่าจะลดลงเมื่อเวลาผ่านไป เมื่อหมายเลข RMSE ของคุณเป็นศูนย์คุณจะเข้าหาเป้าทุกครั้ง หากหมายเลข rmse สูงขึ้นแสดงว่าคุณกำลังแย่ลง
ตัวอย่างในการคำนวณรูทค่าเฉลี่ยข้อผิดพลาดกำลังสองในไพ ธ อน:
import numpy as np
d = [0.000, 0.166, 0.333] #ideal target distances, these can be all zeros.
p = [0.000, 0.254, 0.998] #your performance goes here
print("d is: " + str(["%.8f" % elem for elem in d]))
print("p is: " + str(["%.8f" % elem for elem in p]))
def rmse(predictions, targets):
return np.sqrt(((predictions - targets) ** 2).mean())
rmse_val = rmse(np.array(d), np.array(p))
print("rms error is: " + str(rmse_val))
สิ่งที่พิมพ์:
d is: ['0.00000000', '0.16600000', '0.33300000']
p is: ['0.00000000', '0.25400000', '0.99800000']
rms error between lists d and p is: 0.387284994115
สัญกรณ์ทางคณิตศาสตร์:
Glyph Legend: n
เป็นจำนวนเต็มบวกทั้งหมดที่แสดงจำนวนการโยน i
แสดงถึงตัวนับจำนวนเต็มบวกทั้งหมดที่ระบุผลรวม d
ย่อมาจากระยะทางในอุดมคติที่list2
มีศูนย์ทั้งหมดในตัวอย่างข้างต้น p
ย่อมาจากประสิทธิภาพlist1
ในตัวอย่างข้างต้น superscript 2 หมายถึงกำลังสองเป็นตัวเลข d ฉันเป็นดัชนี i'th d
ของ หน้าฉันเป็นดัชนี i'th p
ของ
rmse ทำในขั้นตอนเล็ก ๆ ดังนั้นจึงสามารถเข้าใจได้:
def rmse(predictions, targets):
differences = predictions - targets #the DIFFERENCEs.
differences_squared = differences ** 2 #the SQUAREs of ^
mean_of_differences_squared = differences_squared.mean() #the MEAN of ^
rmse_val = np.sqrt(mean_of_differences_squared) #ROOT of ^
return rmse_val #get the ^
RMSE ทุกขั้นตอนทำงานอย่างไร:
การลบจำนวนหนึ่งจากอีกจำนวนหนึ่งจะช่วยให้คุณมีระยะห่างระหว่างกัน
8 - 5 = 3 #absolute distance between 8 and 5 is +3
-20 - 10 = -30 #absolute distance between -20 and 10 is +30
หากคุณคูณจำนวนใด ๆ ด้วยตัวเองผลลัพธ์จะเป็นค่าบวกเสมอเพราะเวลาลบเป็นลบเป็นบวก:
3*3 = 9 = positive
-30*-30 = 900 = positive
เพิ่มพวกเขาทั้งหมด แต่รอแล้วอาร์เรย์ที่มีหลายองค์ประกอบจะมีข้อผิดพลาดที่ใหญ่กว่าอาร์เรย์ขนาดเล็กดังนั้นค่าเฉลี่ยพวกเขาตามจำนวนขององค์ประกอบ
แต่เดี๋ยวก่อนเรากำลังสองพวกมันทั้งหมดก่อนหน้านี้เพื่อบังคับพวกมันให้เป็นบวก เลิกทำดาเมจด้วยรากที่สอง!
นั่นทำให้คุณมีหมายเลขเดียวที่แสดงโดยเฉลี่ยระยะทางระหว่างทุกค่าของ list1 กับค่าองค์ประกอบที่สอดคล้องกันของ list2
หากค่า RMSE ลดลงเมื่อเวลาผ่านไปเรายินดีเพราะความแปรปรวนลดลง
RMSE ไม่ใช่กลยุทธ์การวางสายที่แม่นยำที่สุดโดยรวมกำลังสองน้อยที่สุดคือ:
ค่าเฉลี่ยรากของข้อผิดพลาดกำลังสองวัดระยะทางแนวตั้งระหว่างจุดและเส้นดังนั้นหากข้อมูลของคุณมีรูปร่างเหมือนกล้วยแบนใกล้กับด้านล่างและสูงชันใกล้ด้านบน RMSE จะรายงานระยะทางมากขึ้นถึงจุดสูง แต่ระยะทางสั้น ๆ ไป คะแนนต่ำเมื่อในความเป็นจริงระยะทางเทียบเท่า สิ่งนี้ทำให้เกิดความเบ้ซึ่งเส้นนั้นชอบที่จะเข้าใกล้กับจุดที่สูงกว่าต่ำ
หากนี่เป็นปัญหาวิธีกำลังสองน้อยที่สุดจะแก้ไขสิ่งนี้:
https://mubaris.com/posts/linear-regression
Gotchas ที่สามารถทำลายฟังก์ชัน RMSE นี้:
หากมีโมฆะหรืออินฟินิตี้ในรายการอินพุตอย่างใดอย่างหนึ่งแล้วค่าเอาท์พุท rmse จะไม่เหมาะสม มีสามกลยุทธ์ในการจัดการกับค่าโมฆะ / ค่าที่ขาดหายไป / อินฟินิตี้ในรายการใดรายการหนึ่ง: ละเว้นองค์ประกอบนั้นให้เป็นศูนย์หรือเพิ่มการคาดเดาที่ดีที่สุด การรักษาแต่ละวิธีมีข้อดีข้อเสียของมันขึ้นอยู่กับความหมายของข้อมูลของคุณ โดยทั่วไปไม่ต้องการส่วนประกอบใด ๆ ที่มีค่าที่ขาดหายไป แต่อคติ RMSE นี้มีค่าเป็นศูนย์ทำให้คุณคิดว่าประสิทธิภาพจะดีขึ้นเมื่อไม่ได้ใช้งานจริง การเพิ่มสัญญาณรบกวนแบบสุ่มในการเดาที่ดีที่สุดอาจเป็นที่ต้องการหากมีค่าที่ขาดหายไปจำนวนมาก
เพื่อรับประกันความถูกต้องสัมพัทธ์ของเอาต์พุต RMSE คุณต้องกำจัด nulls / infinites ทั้งหมดออกจากอินพุต
RMSE มีความอดทนเป็นศูนย์สำหรับจุดข้อมูลที่ไม่มีค่า
รูทค่าเฉลี่ยกำลังสองข้อผิดพลาดกำลังสองขึ้นอยู่กับข้อมูลทั้งหมดที่ถูกต้องและทั้งหมดจะถูกนับเป็นเท่ากับ นั่นหมายถึงจุดหนึ่งหลงทางที่อยู่ทางด้านซ้ายจะเป็นการทำลายการคำนวณทั้งหมด หากต้องการจัดการกับจุดข้อมูลที่ล้าสมัยและยกเลิกอิทธิพลอย่างมากหลังจากขีด จำกัด บางตัวโปรดดูตัวประมาณที่แข็งแกร่งซึ่งสร้างขึ้นในขีด จำกัด สำหรับการเลิกจ้างค่าผิดปกติ