Machine Learning
Scikit-Learn : การแบ่งข้อมูลด้วย train_test_split
ข้อมูลดิบที่รวบรวมมาใช้ในการเรียนรู้ของเครื่องเป็นข้อมูลชุดเดียว โดยสามารถจัดเตรียมและใช้ในการ train ได้ แต่อย่างไรก็ตาม ในกรณีที่ต้องการทดสอบ หรือวัดประสิทธิภาพการทำงานของโมเดล จำเป็นต้องมีข้อมูลเพื่อการทดสอบดังกล่าว ดังนั้นจึงอาจแบ่งข้อมูลที่มีทั้งหมดออกเป็นส่วนของการเรียนรู้ และส่วนของการทดสอบ โดยใช้ train_test_split ซึ่งจะทำหน้าที่แบ่งข้อมูลนำเข้า (แอร์เรย์ หรือ เมตริก) ออกเป็นส่วนของข้อมูลเพื่อการเรีนรู้ (train) และการทดสอบ (test) โดยข้อมูลที่แบ่งแล้วจะมีรูปแบบ และ รูปร่างเช่นเดียวกับข้อมูลดิบ โดยมีรายละเอียดของการใช้งาน ดังนี้
รูปแบบของคำสั่ง
train_test_split(arrays, *options)
โดย
*arrays เป็นข้อมูลนำเข้า ซึ่งรองรับข้อมูล 4 รูปแบบ คือ
- python lists
- numpy arrays
- scipy-sparse matrices
- pandas dataframes
*options เป็นเงื่อนไข หรือข้อกำหนดรายละเอียดของการแบ่งข้อมูล ดังนี้
- test_size : กำหนดขนาด (จำนวน) ของข้อมูลเพื่อทดสอบ โดยสามารถกำหนดในรูปของทศนิยม จำนวนเต็ม หรือไม่กำหนด (ใช้ค่า default) หากกำหนดเป็นทศนิยม (0.0 - 1.0) จะแบ่งข้อมูลเพื่อการทดสอบเป็นร้อยละ 0 ถึง 100 เช่น test_size=0.1 จะแบ่งข้อมูลทดสอบเป็น 10 % เป็นต้น (ส่วนที่เหลือ 90 % จะเป็นข้อมูลเพื่อการเรียนรู้) ในกรณีที่กำหนดเป็นจำนวนเต็ม จะแบ่งข้อมูลดเพื่อการตามจำนวนที่กำหนด เช่น test_size=50 จะได้ข้อมูลเพื่อการทดสอบ 50 รายการ ส่วนที่เหลือจะเป็นข้อมูลเพื่อการเรียนรู้ ในกรณีที่ไม่มีการกำหนดค่า test_size จะทำการแบ่งข้อมูลตามค่า default คือ ข้อมูลเพื่อการเรียนรู้ 75% และข้อมูลเพื่อการทดสอบ 25 %
-
train_size : กำหนดขนาด (จำนวน) ของข้อมูลเพื่อการเรียนรู้ โดยมีหลักการเช่นเดียวกันกับ การกำหนด test_size ซึ่งโดยปกติแล้ว หากมีการกำหนด test_size แล้ว จะไม่กำหนด train_size หรือหากกำหนด train_size ก็จะไม่กำหนด test_sizeแต่ในกรณีที่ไม้ต้องการใช้ข้อมูลทั้งหมด เช่น มีข้อมูล 100,000,000 รายการ แต่ต้องการใช้งานข้อมูลเพียงบางส่วน เช่น ข้อมูลเพื่อการเรียนรู้ 50,000,0000 รายการ และ ข้อมูลเพื่อการทดสอบ 10,000,000 รายการ จะต้องกำหนดทั้ง test_size และ train_size
-
random_state : กำหนดค่าเริ่มต้นในการสุ่มเพื่อการแบ่งข้อมูลโดยค่าที่กำหนดเป็นเลขจำนวนเต็มเท่านั้น โดยหากมีการกำหนดค่าของ random_state จะใช้ค่าจำนวนเต็มนั้นเป็นจุดเริ่มต้น (seed) ในการสุ่ม ซึ่งจะมีผลทำให้การสุ่มแต่ละครั้งมีผลการสุ่มเหมือนเดิม ซึ่งมีประโยชน์ในการทำงาน โดยเฉพาะอย่างยิ่งเมื่อมีการเปลี่ยนเงื่อนไขในการเรียนรู้และต้องการเปรียบเทียบผลการทำงานกับเงื่อนไขอื่นๆ ภายใต้สภาวะแวดล้อมเดียวกัน (ข้อมูลชุดเดียวกัน) ในกรณีที่ไม่มีการกำหนดค่า random_state (ค่า default) จะมีผลทำให้การสุ่มข้อมูลแต่ละครั้งมีข้อมูลที่แตกต่างกัน
-
shuffle : กำหนดให้มีการสลับข้อมูลก่อนการแบ่งหรือไม่ โดยกำหนดเป็น True/False โดยหากกำหนดให้ไม่มีการสลับข้อมูล shuffle = False จะไม่ต้องกำหนดลำดับชั้นของการแบ่ง แต่หากกำหนด shuffle = True อาจกำหนด stratify หรือไม่ก็ได้
- stratify : กำหนดลำดับชั้นในการสุ่มข้อมูล การสุ่มตัวอย่างแบบชั้นภูมิ (Stratified sampling) โดยแยกข้อมูลออกเป็นกลุ่มๆ หรือแบ่งเป็นชั้นภูมิก่อน แล้วจึงสุ่มอย่างง่ายเพื่อให้ได้ข้อมูลตามสัดส่วนที่กำหนด ใน test_size หรือ train_size หากไม่กำหนด stratify (default=None) จะทำการแบ่งข้อมูลแบบสุ่มตามชั้นภูมิ หากมีการกำหนด (ในรูปแบบแอร์เรย์ของชั้นภูมิ) จะมีการแบ่งตามรูปแบบที่กำหนด โดยทั่วไปแล้ว ในการแบ่งข้อมูลมักจะไม่กำหนด stratify (ใช้ค่า default)
ตัวอย่างการใช้งาน
ขอใช้ตัวอย่างข้อมูลจาก Machine Learning เริ่มต้นศึกษา Machine Learning ด้วย Python และ Scikit-Learn. เพื่อแสดงการใช้งาน ดังนี้
ตัวอย่างที่ 1. ไม่มีการกำหนดเงื่อนไขใดๆ ในการแบ่งข้อมูล (ใช้ค่า default ทั้งหมด)
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
iris=load_iris()
x=iris.data
y=iris.target
x_train, x_test, y_train, y_test = train_test_split(x,y)
จากตัวอย่างโปรแกรมข้างต้น มีข้อมูลนำเข้า คือ x และ y และไม่มีการกำหนดเงื่อนไขอื่นๆ ในการแบ่งข้อมูล (test_size, train_size, random_state, shuffle และ stratify เป็นค่า default ทั้งหมด) โดยจะมีการแบ่ง x ออกเป็น x_train และ x_test และแบ่ง y ออกเป็น y_train และ y_test ในสัดส่วน 75:25 และเนื่องจากไม่มีการกำหนด random_state ดังนั้นผลของการแบ่งข้อมูลในการทำงานแต่ละครั้งจะแตกต่างกัน
เพื่อให้เห็นภาพของการทำงานที่ชัดเจน จะใช้ y_test ซึ่งมีจำนวนข้อมูลไม่มากในการแสดง และอธิบายการทำงาน
ผลการแบ่งข้อมูล (y_test)
- ผลการทำงานในรอบที่ 1
>>>y_test
array([1, 1, 0, 0, 0, 2, 0, 0, 1, 1, 1, 0, 0, 2, 1, 1, 0, 1, 0, 2, 2, 0,
2, 1, 0, 0, 2, 0, 2, 1, 0, 1, 1, 2, 2, 1, 2, 2])
- ผลการทำงานในรอบที่ 2
>>>y_test
array([2, 0, 1, 0, 1, 2, 1, 0, 1, 0, 1, 0, 0, 0, 2, 0, 1, 1, 2, 2, 2, 0,
0, 2, 2, 0, 2, 0, 2, 0, 1, 2, 0, 1, 0, 0, 2, 1])
- ผลการทำงานในรอบที่ 3
>>>y_test
array([0, 2, 1, 1, 0, 0, 2, 2, 1, 1, 2, 0, 0, 0, 2, 1, 2, 1, 2, 2, 1, 2,
2, 0, 2, 1, 1, 1, 0, 2, 0, 0, 0, 1, 1, 0, 1, 2])
จะเห็นว่าในแต่ละรอบของการทำงานได้ผลของการสุ่ม และแบ่งข้อมูลที่แตกต่างกัน
หากต้องการให้ผลการสุ่มและแบ่งข้อมูลได้ข้อมูลชุดเดิมทุกครั้ง สามารถทำได้โดยการกำหนดค่า random_state (ค่าจำนวนเต็มใดๆ)
x_train, x_test, y_train, y_test = train_test_split(x,y, random_state=9)
- ผลการทำงานในรอบที่ 1
>>>y_test
array([2, 1, 2, 2, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 2, 0, 0, 0,
2, 0, 2, 1, 0, 2, 0, 2, 2, 2, 0, 1, 1, 1, 1, 0])
- ผลการทำงานในรอบที่ 2
>>>y_test
array([2, 1, 2, 2, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 2, 0, 0, 0,
2, 0, 2, 1, 0, 2, 0, 2, 2, 2, 0, 1, 1, 1, 1, 0])
- ผลการทำงานในรอบที่ 3
>>>y_test
array([2, 1, 2, 2, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 2, 0, 0, 0,
2, 0, 2, 1, 0, 2, 0, 2, 2, 2, 0, 1, 1, 1, 1, 0])
ซึ่งจะเห็นว่าทุกๆ รอบของการทำงาน จะได้ข้อมูลชุดเดียวกัน
หมายเหตุ
ผลลัพธ์ของการทำงานในแต่ละเครื่องอาจไม่ตรงกันกับตัวอย่าง และในเครื่องนั้นๆ จะได้ผลลัพธ์ชุดเดียวกันเสมอ
กำหนดจำนวนข้อมูล
x_train, x_test, y_train, y_test = train_test_split(x,y, random_state=9, test_zise = 0.1)
>>> y_test
array([2, 1, 2, 2, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0])
>>> y_test.size
15
มี y_test 15 รายการ นั่นคือ 10 % ของจำนวนข้อมูลทั้งหมด 150 รายการ และหากตรวจสอบ y_train จะพบว่ามี 135 รายการ (90%)
>>> y_train
array([1, 0, 1, 2, 0, 0, 0, 2, 0, 2, 1, 0, 2, 0, 2, 2, 2, 0, 1, 1, 1, 1,
0, 2, 0, 0, 2, 1, 0, 2, 1, 0, 1, 0, 2, 1, 1, 0, 1, 2, 2, 2, 2, 1,
0, 2, 0, 0, 1, 2, 0, 1, 1, 2, 1, 1, 0, 0, 2, 1, 0, 2, 1, 2, 1, 0,
1, 1, 0, 0, 2, 1, 2, 0, 1, 0, 0, 1, 2, 2, 0, 0, 1, 1, 2, 2, 0, 2,
0, 0, 2, 0, 2, 1, 0, 2, 1, 1, 0, 2, 1, 2, 2, 1, 2, 1, 1, 0, 1, 2,
0, 2, 1, 0, 2, 2, 0, 2, 0, 0, 2, 2, 1, 2, 1, 2, 0, 1, 0, 1, 2, 1,
2, 1, 2])
>>> y_train.size
135
สำหรับเงื่อนไขการกำหนดแบบอื่นๆ ขอทดสอบโดยการปรับแต่งโปรแกรม ทดสอบ และตรวจสอบผลการทำงานด้วยตนเอง
ถาม-ตอบ
prayong Oct. 7, 2019, 1:43 p.m.
aYlNlfdX Oct. 14, 2023, 1:59 a.m.
aYlNlfdX Oct. 14, 2023, 1:59 a.m.
aYlNlfdX Oct. 14, 2023, 2:06 a.m.
aYlNlfdX Oct. 14, 2023, 2:06 a.m.
aYlNlfdX Oct. 14, 2023, 2:06 a.m.
aYlNlfdX Oct. 14, 2023, 2:06 a.m.
aYlNlfdX Oct. 14, 2023, 2:06 a.m.
aYlNlfdX Oct. 14, 2023, 2:06 a.m.
aYlNlfdX Oct. 14, 2023, 2:06 a.m.
aYlNlfdX Oct. 14, 2023, 2:06 a.m.
aYlNlfdX Oct. 14, 2023, 2:06 a.m.
aYlNlfdX Oct. 14, 2023, 2:06 a.m.
aYlNlfdX Oct. 14, 2023, 2:07 a.m.
aYlNlfdX Oct. 14, 2023, 2:07 a.m.
aYlNlfdX Oct. 14, 2023, 2:07 a.m.
aYlNlfdX Oct. 14, 2023, 2:07 a.m.
aYlNlfdX Oct. 14, 2023, 2:07 a.m.
aYlNlfdX Oct. 14, 2023, 2:15 a.m.
aYlNlfdX Oct. 14, 2023, 2:16 a.m.
aYlNlfdX Oct. 14, 2023, 2:16 a.m.
aYlNlfdX Oct. 14, 2023, 2:18 a.m.
aYlNlfdX Oct. 14, 2023, 2:18 a.m.
aYlNlfdX Oct. 14, 2023, 2:18 a.m.
aYlNlfdX Oct. 14, 2023, 2:18 a.m.
aYlNlfdX Oct. 14, 2023, 2:18 a.m.
aYlNlfdX Oct. 14, 2023, 2:18 a.m.
aYlNlfdX Oct. 14, 2023, 2:18 a.m.
aYlNlfdX Oct. 14, 2023, 2:18 a.m.
aYlNlfdX Oct. 14, 2023, 2:19 a.m.
aYlNlfdX Oct. 14, 2023, 2:19 a.m.
aYlNlfdX Oct. 14, 2023, 2:19 a.m.
aYlNlfdX Oct. 14, 2023, 2:19 a.m.
aYlNlfdX Oct. 14, 2023, 2:19 a.m.
aYlNlfdX Oct. 14, 2023, 2:19 a.m.
aYlNlfdX Oct. 14, 2023, 2:19 a.m.
aYlNlfdX Oct. 14, 2023, 2:19 a.m.
aYlNlfdX Oct. 14, 2023, 2:19 a.m.
aYlNlfdX Oct. 14, 2023, 2:19 a.m.
aYlNlfdX Oct. 14, 2023, 2:19 a.m.
aYlNlfdX Oct. 14, 2023, 2:19 a.m.
aYlNlfdX Oct. 14, 2023, 2:19 a.m.
aYlNlfdX Oct. 14, 2023, 2:20 a.m.
aYlNlfdX Oct. 14, 2023, 2:20 a.m.
aYlNlfdX Oct. 14, 2023, 2:20 a.m.
aYlNlfdX Oct. 14, 2023, 2:20 a.m.
aYlNlfdX Oct. 14, 2023, 2:20 a.m.
aYlNlfdX Oct. 14, 2023, 2:20 a.m.
aYlNlfdX Oct. 14, 2023, 2:20 a.m.
aYlNlfdX Oct. 14, 2023, 2:20 a.m.
aYlNlfdX Oct. 14, 2023, 2:21 a.m.
aYlNlfdX Oct. 14, 2023, 2:21 a.m.
aYlNlfdX Oct. 14, 2023, 2:21 a.m.
aYlNlfdX Oct. 14, 2023, 2:21 a.m.
aYlNlfdX Oct. 14, 2023, 2:21 a.m.
aYlNlfdX Oct. 14, 2023, 2:21 a.m.
aYlNlfdX Oct. 14, 2023, 2:21 a.m.
aYlNlfdX Oct. 14, 2023, 2:21 a.m.
aYlNlfdX Oct. 14, 2023, 2:22 a.m.
aYlNlfdX Oct. 14, 2023, 2:22 a.m.
aYlNlfdX Oct. 14, 2023, 2:22 a.m.
aYlNlfdX Oct. 14, 2023, 2:22 a.m.
aYlNlfdX Oct. 14, 2023, 2:22 a.m.
aYlNlfdX Oct. 14, 2023, 2:22 a.m.
aYlNlfdX Oct. 14, 2023, 2:22 a.m.
aYlNlfdX Oct. 14, 2023, 2:22 a.m.
aYlNlfdX Oct. 14, 2023, 2:22 a.m.
aYlNlfdX Oct. 14, 2023, 2:23 a.m.
aYlNlfdX Oct. 14, 2023, 2:23 a.m.
aYlNlfdX Oct. 14, 2023, 2:23 a.m.
aYlNlfdX Oct. 14, 2023, 2:23 a.m.
aYlNlfdX Oct. 14, 2023, 2:32 a.m.
aYlNlfdX Oct. 14, 2023, 2:32 a.m.
aYlNlfdX Oct. 14, 2023, 2:32 a.m.
aYlNlfdX Oct. 14, 2023, 2:32 a.m.
aYlNlfdX Oct. 14, 2023, 2:32 a.m.
aYlNlfdX Oct. 14, 2023, 2:32 a.m.
aYlNlfdX Oct. 14, 2023, 2:32 a.m.
aYlNlfdX Oct. 14, 2023, 2:32 a.m.
aYlNlfdX Oct. 14, 2023, 2:32 a.m.
aYlNlfdX Oct. 14, 2023, 2:33 a.m.
aYlNlfdX Oct. 14, 2023, 2:33 a.m.
aYlNlfdX Oct. 14, 2023, 2:33 a.m.
aYlNlfdX Oct. 14, 2023, 2:33 a.m.
aYlNlfdX Oct. 14, 2023, 2:33 a.m.
aYlNlfdX Oct. 14, 2023, 2:34 a.m.
aYlNlfdX Oct. 14, 2023, 2:34 a.m.
aYlNlfdX Oct. 14, 2023, 2:34 a.m.
aYlNlfdX Oct. 14, 2023, 2:34 a.m.
aYlNlfdX Oct. 14, 2023, 2:34 a.m.
aYlNlfdX Oct. 14, 2023, 2:34 a.m.
aYlNlfdX Oct. 14, 2023, 2:34 a.m.
aYlNlfdX Oct. 14, 2023, 2:34 a.m.
aYlNlfdX Oct. 14, 2023, 2:34 a.m.
aYlNlfdX Oct. 14, 2023, 2:34 a.m.
aYlNlfdX Oct. 14, 2023, 2:34 a.m.
nZkkAbWB Jan. 22, 2024, 2:46 p.m.
nZkkAbWB Jan. 22, 2024, 2:46 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:49 p.m.
nZkkAbWB Jan. 22, 2024, 2:50 p.m.
nZkkAbWB Jan. 22, 2024, 2:50 p.m.
nZkkAbWB Jan. 22, 2024, 2:50 p.m.
nZkkAbWB Jan. 22, 2024, 2:50 p.m.
nZkkAbWB Jan. 22, 2024, 2:50 p.m.
nZkkAbWB Jan. 22, 2024, 2:50 p.m.
nZkkAbWB Jan. 22, 2024, 2:50 p.m.
nZkkAbWB Jan. 22, 2024, 2:50 p.m.
nZkkAbWB Jan. 22, 2024, 2:50 p.m.
nZkkAbWB Jan. 22, 2024, 2:50 p.m.
nZkkAbWB Jan. 22, 2024, 2:50 p.m.
nZkkAbWB Jan. 22, 2024, 2:50 p.m.
nZkkAbWB Jan. 22, 2024, 2:50 p.m.
nZkkAbWB Jan. 22, 2024, 2:50 p.m.
nZkkAbWB Jan. 22, 2024, 2:50 p.m.
nZkkAbWB Jan. 22, 2024, 2:50 p.m.
nZkkAbWB Jan. 22, 2024, 2:50 p.m.
nZkkAbWB Jan. 22, 2024, 2:50 p.m.
nZkkAbWB Jan. 22, 2024, 2:50 p.m.
nZkkAbWB Jan. 22, 2024, 2:50 p.m.
nZkkAbWB Jan. 22, 2024, 2:50 p.m.
nZkkAbWB Jan. 22, 2024, 2:50 p.m.
nZkkAbWB Jan. 22, 2024, 2:50 p.m.
nZkkAbWB Jan. 22, 2024, 2:50 p.m.
nZkkAbWB Jan. 22, 2024, 2:50 p.m.
nZkkAbWB Jan. 22, 2024, 2:51 p.m.
nZkkAbWB Jan. 22, 2024, 2:51 p.m.
nZkkAbWB Jan. 22, 2024, 2:51 p.m.
nZkkAbWB Jan. 22, 2024, 2:51 p.m.
nZkkAbWB Jan. 22, 2024, 2:51 p.m.
nZkkAbWB Jan. 22, 2024, 2:51 p.m.
nZkkAbWB Jan. 22, 2024, 2:51 p.m.
nZkkAbWB Jan. 22, 2024, 2:51 p.m.
nZkkAbWB Jan. 22, 2024, 2:51 p.m.
nZkkAbWB Jan. 22, 2024, 2:51 p.m.
nZkkAbWB Jan. 22, 2024, 2:51 p.m.
nZkkAbWB Jan. 22, 2024, 2:52 p.m.
nZkkAbWB Jan. 22, 2024, 2:52 p.m.
nZkkAbWB Jan. 22, 2024, 2:52 p.m.
nZkkAbWB Jan. 22, 2024, 2:52 p.m.
nZkkAbWB Jan. 22, 2024, 2:52 p.m.
nZkkAbWB Jan. 22, 2024, 2:52 p.m.
nZkkAbWB Jan. 22, 2024, 2:52 p.m.
nZkkAbWB Jan. 22, 2024, 2:52 p.m.
nZkkAbWB Jan. 22, 2024, 2:52 p.m.
nZkkAbWB Jan. 22, 2024, 2:52 p.m.
nZkkAbWB Jan. 22, 2024, 2:52 p.m.
nZkkAbWB Jan. 22, 2024, 2:52 p.m.
nZkkAbWB Jan. 22, 2024, 2:52 p.m.
nZkkAbWB Jan. 22, 2024, 2:52 p.m.
nZkkAbWB Jan. 22, 2024, 2:52 p.m.
nZkkAbWB Jan. 22, 2024, 2:52 p.m.
nZkkAbWB Jan. 22, 2024, 2:52 p.m.
nZkkAbWB Jan. 22, 2024, 2:52 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:53 p.m.
nZkkAbWB Jan. 22, 2024, 2:54 p.m.
nZkkAbWB Jan. 22, 2024, 2:54 p.m.
nZkkAbWB Jan. 22, 2024, 2:54 p.m.
nZkkAbWB Jan. 22, 2024, 2:54 p.m.
nZkkAbWB Jan. 22, 2024, 2:54 p.m.
nZkkAbWB Jan. 22, 2024, 2:54 p.m.
nZkkAbWB Jan. 22, 2024, 2:55 p.m.
nZkkAbWB Jan. 22, 2024, 2:55 p.m.
nZkkAbWB Jan. 22, 2024, 2:55 p.m.
nZkkAbWB Jan. 22, 2024, 2:55 p.m.
nZkkAbWB Jan. 22, 2024, 2:59 p.m.
nZkkAbWB Jan. 22, 2024, 2:59 p.m.
nZkkAbWB Jan. 22, 2024, 2:59 p.m.
nZkkAbWB Jan. 22, 2024, 2:59 p.m.
nZkkAbWB Jan. 22, 2024, 3 p.m.
nZkkAbWB Jan. 22, 2024, 3 p.m.
nZkkAbWB Jan. 22, 2024, 3 p.m.
nZkkAbWB Jan. 22, 2024, 3 p.m.
nEcdyGgx Nov. 3, 2024, 10:59 a.m.
nEcdyGgx Nov. 3, 2024, 10:59 a.m.
nEcdyGgx Nov. 3, 2024, 11:56 a.m.
nEcdyGgx Nov. 3, 2024, 11:56 a.m.
nEcdyGgx Nov. 3, 2024, 7:54 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:25 p.m.
nEcdyGgx Nov. 3, 2024, 8:26 p.m.
nEcdyGgx Nov. 3, 2024, 8:26 p.m.
nEcdyGgx Nov. 3, 2024, 8:26 p.m.
nEcdyGgx Nov. 3, 2024, 8:26 p.m.
nEcdyGgx Nov. 3, 2024, 8:26 p.m.
nEcdyGgx Nov. 3, 2024, 8:26 p.m.
nEcdyGgx Nov. 3, 2024, 8:26 p.m.
nEcdyGgx Nov. 3, 2024, 8:26 p.m.
nEcdyGgx Nov. 3, 2024, 8:26 p.m.
nEcdyGgx Nov. 3, 2024, 8:26 p.m.
nEcdyGgx Nov. 3, 2024, 8:26 p.m.
nEcdyGgx Nov. 3, 2024, 8:26 p.m.
nEcdyGgx Nov. 3, 2024, 8:26 p.m.
nEcdyGgx Nov. 3, 2024, 8:26 p.m.
nEcdyGgx Nov. 3, 2024, 8:26 p.m.
nEcdyGgx Nov. 3, 2024, 8:26 p.m.
nEcdyGgx Nov. 3, 2024, 8:26 p.m.
nEcdyGgx Nov. 3, 2024, 8:26 p.m.
nEcdyGgx Nov. 3, 2024, 8:26 p.m.
nEcdyGgx Nov. 3, 2024, 8:26 p.m.
nEcdyGgx Nov. 3, 2024, 8:26 p.m.
nEcdyGgx Nov. 3, 2024, 8:26 p.m.
nEcdyGgx Nov. 3, 2024, 8:26 p.m.
nEcdyGgx Nov. 3, 2024, 8:27 p.m.
nEcdyGgx Nov. 3, 2024, 8:27 p.m.
nEcdyGgx Nov. 3, 2024, 8:27 p.m.
nEcdyGgx Nov. 3, 2024, 8:27 p.m.
nEcdyGgx Nov. 3, 2024, 8:27 p.m.
nEcdyGgx Nov. 3, 2024, 8:27 p.m.
nEcdyGgx Nov. 3, 2024, 8:27 p.m.
nEcdyGgx Nov. 3, 2024, 8:27 p.m.
nEcdyGgx Nov. 3, 2024, 8:27 p.m.
nEcdyGgx Nov. 3, 2024, 8:27 p.m.
nEcdyGgx Nov. 3, 2024, 8:27 p.m.
nEcdyGgx Nov. 3, 2024, 8:27 p.m.
nEcdyGgx Nov. 3, 2024, 8:27 p.m.
nEcdyGgx Nov. 3, 2024, 8:27 p.m.
nEcdyGgx Nov. 3, 2024, 8:27 p.m.
nEcdyGgx Nov. 3, 2024, 8:27 p.m.
nEcdyGgx Nov. 3, 2024, 8:58 p.m.
nEcdyGgx Nov. 3, 2024, 8:58 p.m.
Login Required! AnonymousUser