ค่าเฉลี่ยเคลื่อนที่แบบธรรมดา ค่าเฉลี่ยเคลื่อนที่แบบถ่วงน้ำหนัก ค่าเฉลี่ยเคลื่อนที่แบบเอ็กซ์โพเนนเชียล ใช้ในการเรียนรู้ของเครื่องและอัลกอริธึมการหาค่าเหมาะที่สุด คณิตศาสตร์
ค่าเฉลี่ยเคลื่อนที่เป็นเทคนิคทางสถิติที่ใช้ในการวิเคราะห์ข้อมูลอนุกรมเวลาโดยการคำนวณค่าเฉลี่ยของหน้าต่างเลื่อนของจุดข้อมูลที่ต่อเนื่องกัน ค่าเฉลี่ยเคลื่อนที่สามารถใช้เพื่อลดความผันผวนของข้อมูลและช่วยลดผลกระทบของความผันผวนในระยะสั้นและสัญญาณรบกวนในข้อมูล ทำให้ระบุแนวโน้มและรูปแบบได้ง่ายขึ้น พวกเขายังสามารถระบุแนวโน้มและช่วยระบุทิศทางโดยรวมของแนวโน้มในข้อมูล ไม่ว่าจะเพิ่มขึ้น ลดลง หรือทรงตัว ค่าเฉลี่ยเคลื่อนที่สามารถใช้เป็นวิธีที่ง่ายและมีประสิทธิภาพในการคาดการณ์ข้อมูลอนุกรมเวลา จากข้อความข้างต้น ค่าเฉลี่ยเคลื่อนที่สามารถใช้ในการวิเคราะห์ทางเทคนิคของตลาด (หุ้น) หรือการเรียนรู้ของเครื่องได้
การกำหนดค่าและข้อจำกัด
อย่างไรก็ตาม เทคนิคค่าเฉลี่ยเคลื่อนที่ทุกเทคนิคต้องมีการกำหนดค่า ขนาดหน้าต่าง ขนาดหน้าต่างหรือที่เรียกว่าช่วง จะกำหนดจำนวนจุดข้อมูลที่ใช้ในการคำนวณค่าเฉลี่ยเคลื่อนที่ ขนาดหน้าต่างที่ใหญ่ขึ้นส่งผลให้ค่าเฉลี่ยราบรื่นขึ้น แต่อาจทำให้การตอบสนองต่อการเปลี่ยนแปลงข้อมูลช้าลงด้วย ขนาดหน้าต่างที่เล็กลงจะให้การตอบสนองที่ละเอียดอ่อนกว่า แต่ก็อาจเพิ่มผลกระทบของความผันผวนของข้อมูลในระยะสั้นด้วย ข้อจำกัดนี้มาจากการตอบสนองที่ช้าต่อการเปลี่ยนแปลงข้อมูล และอาจล่าช้ากว่าค่าจริง นอกจากนี้ ค่าเฉลี่ยเคลื่อนที่อาจมีความอ่อนไหวต่อค่าผิดปกติของข้อมูล และอาจแสดงรูปแบบที่ซ่อนอยู่ในข้อมูลได้ไม่ถูกต้อง
หลังจากกำหนดพารามิเตอร์และข้อจำกัดที่จำเป็นทั้งหมดแล้ว ในบทความนี้ เราจะดูที่ Simple Moving Average (SMA), Weighted Moving Average (WMA) และ Exponential Moving Average (EMA)
ค่าเฉลี่ยเคลื่อนที่อย่างง่าย (SMA)
นี่เป็นรูปแบบค่าเฉลี่ยเคลื่อนที่ที่ง่ายที่สุด โดยค่าเฉลี่ยจะถูกคำนวณในหน้าต่างคงที่ (ขนาดหน้าต่าง) ของจุดข้อมูล และเป็นเครื่องมือวิเคราะห์ทางเทคนิคที่ใช้กันทั่วไปในการคำนวณราคาเฉลี่ยของเครื่องมือทางการเงินตามจำนวนระยะเวลาที่ผ่านมาที่ระบุ สูตรการคำนวณค่าเฉลี่ยเคลื่อนที่อย่างง่าย (SMA) ถูกกำหนดเป็น:
ที่ไหน:
- n คือจำนวนงวดที่ใช้ในการคำนวณค่าเฉลี่ย
- Σ แสดงถึงผลรวมของข้อมูลที่ป้อน x_i ตามจำนวนงวดที่ระบุ
- x คืออินพุตของข้อมูลในช่วงเวลา i
ตอนนี้ เรามาดูการใช้งาน SMA ในภาษาการเขียนโปรแกรม Python กันสั้นๆ กัน
def SMA(J, n): T = len(J) J_avg = [0] * n SMA = [] for t in range(1, T): J_avg.pop(0) J_avg.append(J[t]) SMA.append(sum(J_avg) / n) return SMA # Example usage J = [100, 105, 103, 110, 115, ...] n = 11 SMA_values = SMA(J, n)
ค่าเฉลี่ยเคลื่อนที่ถ่วงน้ำหนัก (WMA)
Weighted Moving Average (WMA) เป็นเครื่องมือวิเคราะห์ทางเทคนิคที่ใช้กันทั่วไป ซึ่งจะคำนวณราคาเฉลี่ยของตราสารทางการเงินในช่วงเวลาที่กำหนดในอดีต WMA กำหนดน้ำหนักให้กับจุดราคาแต่ละจุดในการคำนวณ โดยราคาล่าสุดจะให้น้ำหนักมากที่สุด มักใช้เพื่อระบุแนวโน้มและสร้างสัญญาณซื้อหรือขาย คล้ายกับ Simple Moving Average (SMA) และ Exponential Moving Average (EMA) สูตรการคำนวณ WMA ถูกกำหนดเป็น:
ที่ไหน:
- w1 ที่จะ wn คือน้ำหนักที่กำหนดให้กับจุดข้อมูล n จุดในหน้าต่าง โดยปกติแล้ว น้ำหนักจะถูกเลือกเพื่อให้จุดข้อมูลล่าสุดมีน้ำหนักที่สูงกว่า
- x คืออินพุตของข้อมูลในช่วงเวลา i
หลังจากกำหนดสูตรสำหรับการคำนวณ WMA แล้ว ตอนนี้เราสามารถเจาะลึกถึงการนำ WMA ไปใช้ในภาษาการเขียนโปรแกรม Python ได้แล้ว
T = 50 J = [100, 105, 103, 110, 115, ...] n = 11 w = [1, 2, 3, 4, 5, ..., 11] sum_weights = sum(w) values = list() for t in range(1, T): WMA = 0 for i in range(n): WMA += J[t-i] * w[i] WMA /= sum_weights values.append(WMA)
ค่าเฉลี่ยเคลื่อนที่แบบเอ็กซ์โปเนนเชียล (EMA)
Exponential Moving Average (EMA) เป็นค่าเฉลี่ยเคลื่อนที่ประเภทหนึ่งที่ให้น้ำหนักกับจุดข้อมูลล่าสุดมากกว่า และให้น้ำหนักน้อยลงกับจุดข้อมูลเก่า การคำนวณ EMA ขึ้นอยู่กับการสลายแบบเอ็กซ์โปเนนเชียลของน้ำหนักที่กำหนดให้กับจุดข้อมูล โดยจุดข้อมูลล่าสุดจะมีน้ำหนักสูงสุด สูตรทางคณิตศาสตร์สำหรับ EMA คือ:
ที่ไหน:
- t คือจุดเวลา
- Xt คือจุดข้อมูลปัจจุบัน
- อัลฟา (α) คือปัจจัยการปรับให้เรียบ (ค่าระหว่าง 0 ถึง 1)
- EMA(t-1) คือค่าก่อนหน้าของ EMA,
- และ EMA(t) คือมูลค่าปัจจุบันที่กำลังคำนวณ
ปัจจัยการปรับให้เรียบจะกำหนดน้ำหนักที่กำหนดให้กับจุดข้อมูลปัจจุบันในการคำนวณ EMA ค่าอัลฟาที่มากกว่าจะให้น้ำหนักแก่จุดข้อมูลปัจจุบันมากขึ้น และค่าอัลฟ่าที่น้อยกว่าจะให้น้ำหนักกับค่าก่อนหน้าของ EMA มากขึ้น โดยทั่วไปค่าของ α จะถูกตั้งค่าไว้ระหว่าง 0.8 ถึง 0.98 โดยจะใช้ค่าที่มากกว่าเพื่อให้ได้ผลลัพธ์ที่ตอบสนองมากขึ้น และใช้ค่าที่น้อยกว่าเพื่อให้มีความเรียบเนียนมากขึ้น EMA มีข้อดีหลายประการเหนือค่าเฉลี่ยเคลื่อนที่แบบธรรมดา (SMA) และค่าเฉลี่ยเคลื่อนที่แบบถ่วงน้ำหนัก (WMA) EMA ตอบสนองต่อการเปลี่ยนแปลงข้อมูลได้เร็วกว่าและได้รับผลกระทบจากความล่าช้าและความอ่อนไหวต่อค่าผิดปกติที่มีอยู่ใน SMA และ WMA น้อยลง อย่างไรก็ตาม การคำนวณ EMA นั้นซับซ้อนกว่า SMA และ WMA และการเลือกปัจจัยการปรับให้เรียบอาจมีผลกระทบอย่างมีนัยสำคัญต่อผลลัพธ์ที่ได้รับ หลังจากทฤษฎีที่จำเป็นทั้งหมดแล้ว เราจะมาดูการนำ EMA ไปใช้ในภาษาการเขียนโปรแกรม Python
def exponential_moving_average(values, alpha): ema = [values[0]] for i in range(1, len(values)): ema.append(alpha * values[i] + (1 - alpha) * ema[i-1]) return ema
ค่าเฉลี่ยเคลื่อนที่และอัลกอริธึมการปรับให้เหมาะสมในการเรียนรู้ของเครื่อง
ในการเรียนรู้ของเครื่อง เป้าหมายคือการค้นหาพารามิเตอร์ที่เหมาะสมที่สุดของแบบจำลองที่ช่วยลดข้อผิดพลาดระหว่างการคาดการณ์ของแบบจำลองกับค่าเป้าหมายจริง โดยทั่วไปข้อผิดพลาดนี้วัดโดยฟังก์ชันวัตถุประสงค์ ซึ่งเป็นนิพจน์ทางคณิตศาสตร์ที่สรุปประสิทธิภาพของแบบจำลอง อัลกอริธึมการปรับให้เหมาะสมใช้เพื่อปรับพารามิเตอร์ของแบบจำลองเพื่อลดฟังก์ชันวัตถุประสงค์ให้เหลือน้อยที่สุด
ความท้าทายประการหนึ่งในการเพิ่มประสิทธิภาพคือการค้นหาอัตราการเรียนรู้ที่เหมาะสม ซึ่งจะกำหนดขนาดของขั้นตอนที่ดำเนินการในการวนซ้ำแต่ละครั้ง วิธีแก้ปัญหาทั่วไปสำหรับความท้าทายนี้คือการใช้ค่าเฉลี่ยเคลื่อนที่เพื่อกำหนดเวลาอัตราการเรียนรู้
วิธีค่าเฉลี่ยเคลื่อนที่เกี่ยวข้องกับการคำนวณค่าเฉลี่ยเคลื่อนที่แบบถ่วงน้ำหนักแบบเอ็กซ์โปเนนเชียลของฟังก์ชันวัตถุประสงค์ในช่วงเวลาหนึ่ง ให้ J(t) เป็นฟังก์ชันวัตถุประสงค์ ณ เวลาวนซ้ำ t และให้ J_avg(t) เป็นค่าเฉลี่ยเคลื่อนที่ ณ เวลาวนซ้ำ t ค่าเฉลี่ยเคลื่อนที่ได้รับการอัปเดตในแต่ละรอบโดยใช้สมการต่อไปนี้:
J_avg(t+1) = beta * J_avg(t) + (1 - beta) * J(t+1)
ที่ไหน:
- เบต้าเป็นพารามิเตอร์ที่กำหนดน้ำหนักที่กำหนดให้กับค่าเฉลี่ยก่อนหน้า หากเบต้าเข้าใกล้ 1 ค่าเฉลี่ยเคลื่อนที่จะเปลี่ยนแปลงช้ามาก ทำให้มีน้ำหนักกับอดีตมากขึ้น หากค่าเบต้าใกล้กับ 0 ค่าเฉลี่ยเคลื่อนที่จะเปลี่ยนแปลงอย่างรวดเร็ว ทำให้ให้น้ำหนักกับการวนซ้ำในปัจจุบันมากขึ้น การเลือกเบต้าจะส่งผลต่อพฤติกรรมของค่าเฉลี่ยเคลื่อนที่และกระบวนการปรับให้เหมาะสม
อัตราการเรียนรู้ (η) ถูกตั้งค่าให้เป็นสัดส่วนผกผันกับรากที่สองของค่าเฉลี่ยเคลื่อนที่ เพื่อให้มีค่าน้อยลงเมื่อค่าเฉลี่ยมีขนาดใหญ่ บ่งชี้ว่าแบบจำลองอยู่ใกล้ค่าต่ำสุด และมีขนาดใหญ่ขึ้นเมื่อค่าเฉลี่ยมีขนาดเล็ก ซึ่งบ่งชี้ว่า ว่าโมเดลนั้นอยู่ไกลจากขั้นต่ำ อัตราการเรียนรู้ (η) คำนวณโดยใช้สมการต่อไปนี้:
learning_rate = alpha / sqrt(J_avg(t))
ที่ไหน:
- อัลฟ่าเป็นปัจจัยคงที่ที่กำหนดอัตราการเรียนรู้เริ่มต้น
หลังจากกำหนดพารามิเตอร์ที่จำเป็นทั้งหมดแล้ว เราก็พร้อมที่จะใช้ตัวอย่างของอัลกอริธึมค่าเฉลี่ยเคลื่อนที่ในภาษาการเขียนโปรแกรม Python
import numpy as np def moving_average_schedule(x_0, gradient, J, T, alpha, beta): J_avg = J(x_0) x = x_0 for t in range(T): learning_rate = alpha / np.sqrt(J_avg) x = x - learning_rate * gradient(x) J_avg = beta * J_avg + (1 - beta) * J(x) return x
ในตัวอย่างนี้ x_0 คือพารามิเตอร์การหาค่าเหมาะที่สุดเริ่มต้น การไล่ระดับสี(x) คือฟังก์ชันที่ส่งคืนการไล่ระดับสีของฟังก์ชันวัตถุประสงค์ที่ x, J(x) เป็นฟังก์ชันที่ส่งคืนค่าของฟังก์ชันวัตถุประสงค์ที่ x, T คือจำนวนการวนซ้ำ alpha เป็นปัจจัยคงที่ที่กำหนดค่าเริ่มต้น >อัตราการเรียนรู้ และ เบต้า คือพารามิเตอร์ค่าเฉลี่ยเคลื่อนที่ ผลลัพธ์สุดท้าย x คือพารามิเตอร์ที่ปรับให้เหมาะสมหลังจากการวนซ้ำ T
โดยสรุป วิธีการค่าเฉลี่ยเคลื่อนที่เป็นวิธีที่ง่ายและมีประสิทธิภาพในการกำหนดอัตราการเรียนรู้ในอัลกอริธึมการปรับให้เหมาะสม ด้วยการใช้ค่าเฉลี่ยเคลื่อนที่ของฟังก์ชันวัตถุประสงค์ อัตราการเรียนรู้สามารถปรับแบบไดนามิกตามการบรรจบกันของกระบวนการปรับให้เหมาะสม ซึ่งช่วยปรับปรุงเสถียรภาพและประสิทธิภาพของการเพิ่มประสิทธิภาพ
หากคุณชอบบทความนี้อย่าลืมติดตามฉันเพื่อรับบทความใหม่ของฉัน
เนื้อหาเพิ่มเติมได้ที่ PlainEnglish.io ลงทะเบียนเพื่อรับ จดหมายข่าวรายสัปดาห์ฟรี ของเรา ติดตามเราบน Twitter, LinkedIn, YouTube และ Discord .
สนใจที่จะขยายขนาดการเริ่มต้นซอฟต์แวร์ของคุณหรือไม่ ลองดูที่ วงจร