Machine Learning
Scikit-Learn : เริ่มต้นศึกษา Machine Learning ด้วย Python และ Scikit-Learn.
machine learning เกี่ยวข้องกับศาสตร์หลายศาสตร์ เช่น คณิตศาสตร์ สถิติ และวิทยาการคอมพิวเตอร์ เป็นต้น ดังนั้น ในการเริ่มต้นศึกษาให้เข้าใจนั้นจะเริ่มจากการศึกษาโปรแกรมสั้นๆ ก่อน จากนั้นจึงทำความเข้าใจในรายละเอียด ของศาสตร์ที่เกี่ยวข้องเฉพาะที่ใช้งาน และท้ายที่สุด คือการทำความเข้าใจในภาพรวม ในบทความนี้จะเริ่มจากการแนะนำโปรแกรมสั่นๆ สำหรับการเรียนรู้ของเครื่อง โดยใช้ชุดข้อมูล iris dataset ซึ่งเป็นข้อมูลที่นิยมใช้ในการแนะนำหลักการทำงานของ machine learning
ขั้นตอนการทำงาน
- ทำความเข้าใจปัญหา หรือโจทย์
- เตรียมข้อมูล และจัดการกับข้อมูล
- เลือก และกำหนด โมเดลของการเรียนรู้ (algorithms ของการเรียนรู้)
- ให้เครื่องเรียนรู้จากข้อมูลที่เตรียมไว้ โดยใช้ โมเดลในการเรียนรู้ที่เลือก และกำหนดไว้
- ใช้งานโมเดลที่ผ่านการเรียนรู้แล้ว กับข้อมูลชุดใหม่
จากลำดับของขั้นตอนข้างต้น เราสามารถดำเนินการเพื่อการระบุเป้าหมายของข้อมูลได้ โดยในตัวอย่างนี้จะใช้ IRIS dataset ในการอธิบาย ดังที่กล่าวข้างต้น ตามขั้นตอนดังนี้
1. ทำความเข้าใจปัญหา หรือโจทย์
ปัญหาของโจทย์นี้คือ ต้องการระบุชื่อพันธ์ของดอก iris โดยป้อนข้อมูล 4 รายการคือ ความกว้าง - ยาว ของกลีบเลี้ยง ความกว้าง - ยาว ของกลีบดอก และให้โมเดลสามารถระบุได้ว่า ข้อมูลดังกล่าวเป็นดอก iris พันธ์ใด เพื่อให้สามารถทำงานตามปัญหาที่กำหนด จะต้องมีโมเดลที่ผ่านการเรียนรู้ข้อมูลของดอก iris พันธ์ต่างๆ
2. เตรียมข้อมูล และจัดการกับข้อมูล
ข้อมูล iris ที่ scikit-learn เตรียมไว้ให้สำหรับศึกษามี 150 รายการ (เก็บข้อมูล ดอก iris จำนวน 150 ดอก) โดยแยกเป็น 3 พันธ์ๆ ละ 50 ดอก โดยข้อมูลที่เก็บมี 5 ส่วน ประกอบด้วย (1) ความยาวของกลีบเลี้ยง (Sepal Length) (2) ความกว้างของกลีบเลี้ยง (Sepal Width) (3) ความยาวของกลีบดอก (Petal Length) (4) ความกว้างของกลีบเลี้ยง (Petal Width) และ (5) รหัสของชื่อพันธ์ของข้อมูลชุดนั้นๆ ซึ่งประกอบด้วย 3 พันธ์ คือ 0='setosa' 1='versicolor' และ 2= 'virginica' โดยสามารถเตรียมข้อมูลได้โดย
โหลดข้อมูล IRIS
from sklearn.datasets import load_iris
iris_data = load_iris()
ตัวแปร iris_data มีข้อมูลหลักๆ ที่ใช้ในการทำงานในเบื้องต้นตามตัวอย่างนี้ อยู่ 2 คือ
- iris_data.data (ยาว-กว้าง ของกลีบเลี้ยง และ ยาว-กว้าง ของกลีบดอก )
- iris_data.target (รหัสชื่อพันธ์)
รายละเอียดเพิ่มเติมเกี่ยวกับ iris datasets ศึกษาได้จาก สำรวจข้อมูล IRIS datasets
จัดการข้อมูล IRIS
ทำการแยกข้อมูล iris_data ออกเป็น data เพื่อเก็บข้อมูล และ target เพื่อเก็บรหัสของพันธ์ โดยให้ x แทน data และ y แทน target
x = iris_data.data
y = iris_data.target
ซึ่งจะได้ตัวแปร x ทำหน้าที่เก็บข้อมูล 150 รายการ ตัวแปร y เก็บรหัสชื่อพันธ์ 150 รายการเช่นกัน
ถึงขั้นตอนนี้จะมีข้อมูลและรหัสชื่อพันธ์พร้อมที่จะใช้ในการเรียนรู้ของเครืื่องแล้ว โดยหากไม่ต้องการที่จะตรวจสอบประสิทธิภาพของโมเดลก็สามารถใช้ข้อมูลทั้งหมด (150 รายการ) ในการเรียนรู้ได้เลย แต่หากต้องการตรวจสอบประสิทธิภาพการทำงาน อาจทำการแบ่งข้อมูลออกเป็นส่วนที่ใช้ในการเรียนรู้ และส่วนที่ใช้ในการวัดประสิทธิภาพ โดยสามารถแบ่งได้โดยคำสั่ง
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x,y, random_state = 0)
random_state = 0 เป็นการกำหนดค่าในการสุ่มข้อมูล โดยมีการแบ่งในสัดส่วนร้อยละ 75:25 (ค่า default) สำหรับรายละเอียดของการแบ่งข้อมูลรูปแบบต่างๆ ศึกษาเพิ่มเติมได้จาก การแบ่งข้อมูล ด้วย train_test_split (ในเบื้องต้นเพื่อป้องกันความสับสนจะขอให้ใช้งานไปก่อน)
ข้อมูลที่ได้ในขั้นตอนนี้ประกอบด้วย
- x_train (ข้อมูลเพื่อการเรียนรู้) 112 รายการ (75%)
- x_test (ข้อมูลเพื่อการทดสอบ) 38 รายการ (25%)
- y_train (รหัสพันธ์เพื่อการเรียนรู้) 112 รายการ (75%)
- y_test (รหัสพันธ์เพื่อการทดสอบ) 38 รายการ (25%)
3. เลือก และกำหนด โมเดลของการเรียนรู้ (algorithms ของการเรียนรู้)
การเลือกใช้ โมเดลของการเรียนรู้นั้นเกี่ยวข้องกับปัจจัยหลายประการ เ่ช่น ลักษณะ และความต้องการของปัญหา หรือ รูปแบบของข้อมูล เป็นต้น โดยในเบื้องต้นนี้จะยังไม่กล่าวถึงปัจจัยที่เกี่ยวข้อง แต่จะนำเสนอโดยเลือกใช้ algorithms แบบ DecisionTreeClassifier เพื่อให้สามารถทำความเข้าใจในกระบวนการได้ก่อน โดยในการกำหนดโมเดลสามารถทำได้โดย
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier()
ซึ่งจะได้โมเดลแบบ DecisionTreeClassifier ซึ่งยังคงเป็นโมเดลเปล่าๆ ที่ยังไม่มีการเรียนรู้กับข้อมูลใดๆ
หากต้องการเลือกใช้โมเดลแบบอื่นๆ ก็สามารถทำได้ในขั้นตอนนี้ เช่น
from sklearn.neighbors import KNeighborsClassifier
model = KNeighborsClassifier()
4. ให้เครื่องเรียนรู้จากข้อมูลที่เตรียมไว้ โดยใช้ โมเดลในการเรียนรู้ที่เลือก และกำหนดไว้
model.fit(x_train,y_train)
โมเดลที่กำหนดจะทำการเรียนรู้จากข้อมูลที่เตรียมไว้เพื่อการเรียนรู้จำนวน 112 รายการ หรือกล่าวอีกนัยหนึ่งคือเรียนรู้ข้อมูล (x_train) ที่สัมพันธ์กับรหัสชื่อพันธ์ (y_train)
เมื่อโมเดลผ่านการเรียนรู้กับข้อมูลแล้ว ก็จะได้โมเดลที่พร้อมจะใช้งานได้ และเพื่อให้เกิดความมั่นใจว่าโมเดลมีประสิทธิภาพการทำงานมากน้อยเพียงใด ก็สามารถตรวจสอบได้โดยการหาประสิทธิภาพการทำงานของโมเดล โดยทำการทดสอบโมเดลกับข้อมูลเพื่อการทดสอบ (x_test ที่ได้เตรียมไว้จำนวน 38 รายการ) และนำผลการทดสอบในแต่ละรายการนั้นมาตรวจสอบกับรหัสชื่อพันธ์เพื่อการทดสอบ (y_test) ว่ามีความถูกต้องมากน้อยเพียงใด
from sklearn.metrics import accuracy_score
pred = model.predict(x_test)
acc = accuracy_score(y_test, pred)
ค่าความแม่นยำในการทำงานจะจัดเก็บในตัวแปร acc
5. ใช้งานโมเดลที่ผ่านการเรียนรู้แล้ว กับข้อมูลชุดใหม่
เมื่อได้โมเดลที่ผ่านการรเรียนรู้ และทราบค่าความแม่นยำในการทำงานแล้ว หากพอใจในระดับความแม่นยำ (accuracy score: 0.9736842105263158) ก็สามารถนำโมเดลไปใช้งานได้ แต่หากยังไม่พอใจ และต้องการให้โมเดลมีความแม่นยำสูงขึ้น อาจต้องมีการปรับแต่งโมเดล ในรายละเอียดของการทำงานเพิ่มเติม หรืออาจจะต้องเปลี่ยน algorithms ของการเรียนรู้ (ซึ่งรายละเอียดต่างๆ นั้นจะกล่าวถึงต่อไป) ในเบื้องต้นจะถือว่าประสิทธิภาพของการทำงานของโมเดลอยู่ในระดับที่สามารถใช้งานได้ ข้อมูลใหม่ที่จะนำมาใช้งานกับโมเดลนั้นจะต้องอยู่ในรูปแบบเดียวกันกับ x_train ซึ่งเป็นแอร์เรย์ 2 มิติ ที่มีข้อมูล 4 รายการ ที่กล่าวข้างต้น โดยในที่นี้สมมุติว่ามีข้อมูลใหม่ดังนี้
- ความยาวกลีบเลี้ยง = 5.3 cm
- ความกว้างกลีบเลี้ยง = 2.4 cm
- ความยาวกลีบเลี้ยง = 3.5 cm
- ความกว้างกลีบเลี้ยง = 1.8 cm
โดยอยู่ในรูปแบบของแอร์เรย์ 2 มิติ ดังนี้
[[5.3, 2.4, 3.5, 1.8]]
ให้โมเดลระบุรหัสพันธ์ของข้อมูล
new_predict = model.predict([[5.3, 2.4, 3.5, 1.8]])
ผลลัพธ์ (รหัสชื่อพันธ์ของข้อมูลจัดเก็บในตัวแปร new_predict) โดยสามารถแสดงได้โดยใช้คำสั่ง print(new_predict) ซึ่งจะได้ผลลัพธ์เป็น [2] ซึ่งเป็นรหัสชื่อพันธ์ของ 'virginica' นั่นคือโมเดลระบุชื่อพันธ์ตามข้อมูลข้างต้นว่าเป็นพันธ์ 'virginica' ในระดับความแม่นยำ 0.9736842105263158 หรือ มีความแม่นยำ 97.36 %
โปรแกรมในภาพรวมของทุกขั้นตอน
from sklearn.datasets import load_iris
iris_data = load_iris()
x = iris_data.data
y = iris_data.target
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x,y, random_state = 0)
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier()
model.fit(x_train,y_train)
from sklearn.metrics import accuracy_score
pred = model.predict(x_test)
acc = accuracy_score(y_test, pred)
print('accuracy score: ',acc)
new_predict = model.predict([[5.3, 2.4, 3.5, 1.8]])
print(new_predict)
ปรับโปรแกรมให้ถูกต้องตามรูปแบบมาตรฐานของการเขียนโปรแกรมภาษาไพธอน
โปรแกรมข้างต้นสามารถทำงานได้ถูกต้อง แต่อย่างไรก็ตาม ในการเขียนโปรแกรมนั้นควรจะจัดรูปแบบการใช้ความสั่งต่างๆ ให้ถูกต้องตามมาตรฐาน เช่น การ import ไลบรารี่ และ package ต่างๆ การเว้นวรรค หรือเว้นบรรทัด เป็นต้น
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
iris_data = load_iris()
x = iris_data.data
y = iris_data.target
x_train, x_test, y_train, y_test = train_test_split(x,y, random_state = 0)
model = DecisionTreeClassifier()
model.fit(x_train,y_train)
pred = model.predict(x_test)
acc = accuracy_score(y_test, pred)
print('accuracy score: ',acc)
new_predict = model.predict([[5.3, 2.4, 3.5, 1.8]])
print(new_predict)
สรุป
เนื้อหาที่กล่าวมาข้างต้น เป็นเพียงการแนะนำขั้นตอนการทำงานของ machine learning เบื้องต้น โดยใช้ algorithms แบบ decision tree เพื่อให้มองเห็นภาพ แนวคิด และหลักการทำงานของ machine learning ขั้นพิ้นฐาน แต่ยังมีรายละเอียดต่างๆ ที่เกี่ยวข้องอีกหลายประการ ที่จะต้องศึกษาและทำความเข้าใจเพิ่มเติม รวมถึงถึง algorithms อื่นๆ โดยศึกษาได้จาก DecisionTreeClassifier V0.1
สำหรับ algorithms แบบ อื่นๆ สามารถศึกษาเพิ่มเติมจาก Scikit-Learn : เปรียบเทียบประสิทธิภาพการทำงานกับข้อมูล IRIS ของ Classification Algorithms แบบต่างๆ
ถาม-ตอบ
aYlNlfdX Oct. 14, 2023, 2:07 a.m.
aYlNlfdX Oct. 14, 2023, 2:07 a.m.
aYlNlfdX Oct. 14, 2023, 2:17 a.m.
aYlNlfdX Oct. 14, 2023, 2:17 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: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: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: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: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:24 a.m.
aYlNlfdX Oct. 14, 2023, 2:24 a.m.
aYlNlfdX Oct. 14, 2023, 2:24 a.m.
aYlNlfdX Oct. 14, 2023, 2:24 a.m.
aYlNlfdX Oct. 14, 2023, 2:25 a.m.
aYlNlfdX Oct. 14, 2023, 2:25 a.m.
aYlNlfdX Oct. 14, 2023, 2:25 a.m.
aYlNlfdX Oct. 14, 2023, 2:25 a.m.
aYlNlfdX Oct. 14, 2023, 2:25 a.m.
nZkkAbWB Jan. 22, 2024, 2:50 p.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.
nZkkAbWB Jan. 22, 2024, 2:50 p.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: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: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: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: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:54 p.m.
nZkkAbWB Jan. 22, 2024, 2:54 p.m.
nZkkAbWB Jan. 22, 2024, 2:54 p.m.
nZkkAbWB Jan. 22, 2024, 2:57 p.m.
nZkkAbWB Jan. 22, 2024, 2:57 p.m.
nZkkAbWB Jan. 22, 2024, 2:57 p.m.
nZkkAbWB Jan. 22, 2024, 2:57 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.
nZkkAbWB Jan. 22, 2024, 3:02 p.m.
nZkkAbWB Jan. 22, 2024, 3:02 p.m.
nZkkAbWB Jan. 22, 2024, 3:02 p.m.
nZkkAbWB Jan. 22, 2024, 3:02 p.m.
nZkkAbWB Jan. 22, 2024, 3:02 p.m.
nZkkAbWB Jan. 22, 2024, 3:02 p.m.
nZkkAbWB Jan. 22, 2024, 3:02 p.m.
nZkkAbWB Jan. 22, 2024, 3:02 p.m.
nZkkAbWB Jan. 22, 2024, 3:02 p.m.
nZkkAbWB Jan. 22, 2024, 3:02 p.m.
nZkkAbWB Jan. 22, 2024, 3:02 p.m.
nZkkAbWB Jan. 22, 2024, 3:02 p.m.
nZkkAbWB Jan. 22, 2024, 3:02 p.m.
nZkkAbWB Jan. 22, 2024, 3:02 p.m.
nZkkAbWB Jan. 22, 2024, 3:02 p.m.
nZkkAbWB Jan. 22, 2024, 3:02 p.m.
nZkkAbWB Jan. 22, 2024, 3:02 p.m.
nZkkAbWB Jan. 22, 2024, 3:02 p.m.
nZkkAbWB Jan. 22, 2024, 3:02 p.m.
nZkkAbWB Jan. 22, 2024, 3:02 p.m.
nZkkAbWB Jan. 22, 2024, 3:02 p.m.
nZkkAbWB Jan. 22, 2024, 3:02 p.m.
nZkkAbWB Jan. 22, 2024, 3:02 p.m.
nZkkAbWB Jan. 22, 2024, 3:02 p.m.
nZkkAbWB Jan. 22, 2024, 3:02 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:03 p.m.
nZkkAbWB Jan. 22, 2024, 3:04 p.m.
nZkkAbWB Jan. 22, 2024, 3:04 p.m.
nZkkAbWB Jan. 22, 2024, 3:04 p.m.
nZkkAbWB Jan. 22, 2024, 3:04 p.m.
nZkkAbWB Jan. 22, 2024, 3:04 p.m.
nZkkAbWB Jan. 22, 2024, 3:04 p.m.
nZkkAbWB Jan. 22, 2024, 3:04 p.m.
nZkkAbWB Jan. 22, 2024, 3:04 p.m.
nZkkAbWB Jan. 22, 2024, 3:04 p.m.
nZkkAbWB Jan. 22, 2024, 3:04 p.m.
nZkkAbWB Jan. 22, 2024, 3:04 p.m.
nZkkAbWB Jan. 22, 2024, 3:05 p.m.
nZkkAbWB Jan. 22, 2024, 3:05 p.m.
nZkkAbWB Jan. 22, 2024, 3:05 p.m.
nZkkAbWB Jan. 22, 2024, 3:05 p.m.
nZkkAbWB Jan. 22, 2024, 3:06 p.m.
nZkkAbWB Jan. 22, 2024, 3:06 p.m.
nZkkAbWB Jan. 22, 2024, 3:06 p.m.
nEcdyGgx Nov. 3, 2024, 11:28 a.m.
nEcdyGgx Nov. 3, 2024, 11:28 a.m.
nEcdyGgx Nov. 3, 2024, 11:35 a.m.
nEcdyGgx Nov. 3, 2024, 11:35 a.m.
nEcdyGgx Nov. 3, 2024, 12:08 p.m.
nEcdyGgx Nov. 3, 2024, 12:08 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 8:45 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:21 p.m.
nEcdyGgx Nov. 3, 2024, 10:22 p.m.
nEcdyGgx Nov. 3, 2024, 10:22 p.m.
nEcdyGgx Nov. 3, 2024, 10:22 p.m.
nEcdyGgx Nov. 3, 2024, 10:22 p.m.
nEcdyGgx Nov. 3, 2024, 10:22 p.m.
nEcdyGgx Nov. 3, 2024, 10:22 p.m.
nEcdyGgx Nov. 3, 2024, 10:22 p.m.
nEcdyGgx Nov. 3, 2024, 10:22 p.m.
nEcdyGgx Nov. 3, 2024, 10:22 p.m.
nEcdyGgx Nov. 3, 2024, 10:22 p.m.
nEcdyGgx Nov. 3, 2024, 10:22 p.m.
nEcdyGgx Nov. 3, 2024, 10:22 p.m.
nEcdyGgx Nov. 3, 2024, 10:22 p.m.
nEcdyGgx Nov. 3, 2024, 10:22 p.m.
nEcdyGgx Nov. 3, 2024, 10:22 p.m.
nEcdyGgx Nov. 3, 2024, 10:22 p.m.
nEcdyGgx Nov. 3, 2024, 10:22 p.m.
nEcdyGgx Nov. 3, 2024, 10:22 p.m.
nEcdyGgx Nov. 3, 2024, 10:22 p.m.
nEcdyGgx Nov. 3, 2024, 10:22 p.m.
nEcdyGgx Nov. 3, 2024, 10:22 p.m.
nEcdyGgx Nov. 3, 2024, 10:22 p.m.
nEcdyGgx Nov. 3, 2024, 10:22 p.m.
nEcdyGgx Nov. 3, 2024, 10:22 p.m.
nEcdyGgx Nov. 3, 2024, 10:22 p.m.
nEcdyGgx Nov. 3, 2024, 10:22 p.m.
nEcdyGgx Nov. 3, 2024, 10:22 p.m.
nEcdyGgx Nov. 3, 2024, 10:22 p.m.
Login Required! AnonymousUser