ค้นหาตารางด้วย MLflow

Khnha Tarang Dwy Mlflow



ไฮเปอร์พารามิเตอร์ในโมเดลการเรียนรู้ของเครื่องได้รับการปรับให้เหมาะสมโดยใช้แนวทางการค้นหาตาราง ผู้ใช้สามารถเปรียบเทียบการตั้งค่าไฮเปอร์พารามิเตอร์หลายรายการได้อย่างรวดเร็ว และค้นหาว่าการตั้งค่าใดทำงานได้ดีที่สุด เนื่องจาก MLflow ติดตามผลลัพธ์ของการทดสอบการค้นหาตาราง ใน MLflow คุณสามารถแชร์การทดลองค้นหากริดกับสมาชิกในทีมคนอื่นๆ ได้อย่างรวดเร็ว การใช้ MLflow ทำให้โมเดลที่มีประสิทธิภาพสูงสุดจากการทดลองค้นหากริดสามารถนำไปใช้งานได้

ประโยชน์ของการค้นหากริด

  • การปรับไฮเปอร์พารามิเตอร์อัตโนมัติ: การค้นหาตารางจะปรับแต่งไฮเปอร์พารามิเตอร์โดยอัตโนมัติ ซึ่งช่วยให้สามารถสำรวจอย่างเป็นระบบโดยไม่ต้องลองผิดลองถูกด้วยตนเอง
  • ความสามารถในการทำซ้ำ: การค้นหาตารางช่วยให้มั่นใจถึงความถูกต้องของการทดสอบโดยได้รับผลลัพธ์ที่สามารถทำซ้ำได้ซึ่งช่วยเพิ่มการสื่อสารและความน่าเชื่อถือ
  • การค้นหาที่ละเอียดถี่ถ้วน: GS ค้นหาไฮเปอร์พารามิเตอร์ที่เหมาะสมที่สุดสำหรับโมเดลได้อย่างมีประสิทธิภาพโดยการค้นหาชุดค่าผสมอย่างละเอียด
  • ความทนทาน: การค้นหาตารางเป็นเทคนิคที่มีประสิทธิภาพซึ่งทนทานต่อสัญญาณรบกวนของข้อมูล ซึ่งช่วยลดการติดตั้งมากเกินไป
  • ใช้งานง่าย: การค้นหาตารางนั้นใช้ง่ายและเข้าใจง่าย ซึ่งทำให้เป็นวิธีการที่มีประสิทธิภาพในการปรับไฮเปอร์พารามิเตอร์
  • การเปรียบเทียบโมเดล: การค้นหาตารางทำให้การเปรียบเทียบโมเดลและการเลือกเมทริกการประเมินง่ายขึ้น

ข้อเสียของการค้นหากริด

  • ต้นทุนการคำนวณ: การค้นหาตารางมีราคาแพงในการคำนวณสำหรับการปรับแต่งไฮเปอร์พารามิเตอร์จำนวนมาก
  • ใช้เวลานาน: การปรับไฮเปอร์พารามิเตอร์ที่ซับซ้อนใช้เวลานาน
  • ไม่จำเป็นเสมอไป: ตอนนี้มันเป็นสิ่งจำเป็นเสมอ การค้นหาแบบสุ่มเป็นทางเลือกที่ดีที่สุด

ตัวอย่าง: การค้นหาการตั้งค่าโมเดลที่ดีที่สุดสำหรับระบบการรับเข้ามหาวิทยาลัย

มาดูตัวอย่างการค้นหาตารางสำหรับการปรับแต่งไฮเปอร์พารามิเตอร์ภายในกรอบของระบบการรับเข้าศึกษาในมหาวิทยาลัยแบบออนไลน์ ในตัวอย่างนี้ เราใช้ scikit-learn และตัวแยกประเภท Gradient Boosting Classifier (GBC) ที่ตรงไปตรงมาเพื่อคาดการณ์แนวโน้มที่นักเรียนจะได้รับการตอบรับเข้ามหาวิทยาลัยโดยพิจารณาจากปัจจัยต่างๆ เช่น คะแนน GPA, คะแนน SAT, คะแนน ACT และกิจกรรมนอกหลักสูตร มีตัวเลือกมากมายสำหรับการค้นหากริดแทน GBC รวมถึง Logistic Regression (LR), SVM (Support Vector Machine) เป็นต้น

สร้างข้อมูลสุ่มสำหรับระบบรับสมัครออนไลน์โดยใช้ MLflow สำหรับการค้นหากริด

Pandas ของ Python และแพ็คเกจสุ่มสามารถใช้เพื่อสร้างชุดข้อมูลสมมติสำหรับระบบการรับเข้าเรียน ด้วยค่าสุ่มสำหรับคอลัมน์ APP_NO, GPA, คะแนน SAT, คะแนน ACT, กิจกรรมนอกหลักสูตร และสถานะการรับเข้าเรียน รหัสนี้จะสร้างชุดข้อมูลการรับเข้าเรียนแบบสังเคราะห์ ตัวแปร num_students ควบคุมจำนวนแถวในชุดข้อมูล







สถานะการรับเข้าจะถูกตั้งค่าแบบสุ่มตามอัตราการยอมรับ 70% และใช้โมดูลสุ่มเพื่อสร้างค่าสุ่มสำหรับหลายคอลัมน์ เพื่อวัตถุประสงค์ในการสาธิต ชิ้นส่วนโค้ดต่อไปนี้จะสร้างชุดข้อมูลการรับเข้าปลอมด้วยค่าสุ่มและบันทึกลงในไฟล์ std_admission_dataset.csv:



ข้อมูลโค้ด:



# นำเข้าไลบรารี Panda และ Random
นำเข้าแพนด้าเป็น panda_obj
นำเข้าแบบสุ่มเป็น Random_obj

# กำหนดจำนวนบันทึกสำหรับชุดข้อมูลของนักเรียนที่จะสร้าง
นักเรียน_บันทึก = 1,000

# สร้างรายการเพื่อจัดเก็บข้อมูล
std_application_numbers = [ 'แอป-' + str(random_obj.randint( 1,000 , 9999 )) สำหรับ _ อยู่ในช่วง (students_records)]
std_gpa = [รอบ (random_obj.uniform( 2.5 , 4.0 ) 2 ) สำหรับ _ อยู่ในช่วง (students_records)]
std_sat_scores = [random_obj.randint( 900 , 1600 ) สำหรับ _ อยู่ในช่วง (students_records)]
std_act_scores = [random_obj.randint( ยี่สิบ , 36 ) สำหรับ _ อยู่ในช่วง (students_records)]
std_extra_curriculars = [random_obj.choice([ 'ใช่' , 'เลขที่' ]) สำหรับ _ อยู่ในช่วง (students_records)]

# คำนวณสถานะการรับเข้าตามอัตราการรับแบบสุ่ม
std_admission_status = [ 1 ถ้า Random_obj.random() < 0.7 อื่น 0 สำหรับ _ อยู่ในช่วง (นักเรียน _ บันทึก)]

# สร้างพจนานุกรมเพื่อเก็บข้อมูลนักเรียน
std_data = {

'APPLICATION_NO' : std_application_numbers,

'เกรดเฉลี่ย' : std_gpa,

'SAT_คะแนน' : std_sat_scores,

'ACT_คะแนน' : std_act_scores,

'กิจกรรมนอกหลักสูตร' : std_extra_curriculars,

'การรับเข้า_สถานะ' : std_admission_status

}

# สร้าง DataFrame DataFrame_Student จากพจนานุกรม
DataFrame_Student = panda_obj.DataFrame(std_data)

# บันทึก DataFrame DataFrame_Student ลงในไฟล์ CSV ชื่อ std_admission_dataset.csv
DataFrame_Student.to_csv( 'std_admission_dataset.csv' , ดัชนี=เท็จ)
พิมพ์( 'ข้อมูลนักเรียนส่งออกเป็นไฟล์ CSV ได้สำเร็จ!' )

การดำเนินการโค้ด:

ใช้คำสั่ง Python เพื่อคอมไพล์โค้ด จากนั้นใช้คำสั่ง pip เพื่อติดตั้งโมดูลเฉพาะ หากคุณพบข้อผิดพลาดของโมดูล ใช้คำสั่ง pip3 install เพื่อติดตั้งไลบรารีที่กำหนดหาก Python เป็นเวอร์ชัน 3.X หรือสูงกว่า





การดำเนินการที่ประสบความสำเร็จ:



ภาพหน้าจอข้อมูลตัวอย่าง:

ขั้นตอนที่ 1: นำเข้าไลบรารี

  • ไลบรารี MLflow สำหรับการติดตามการทดลองการเรียนรู้ของเครื่อง
  • ไลบรารี Pandas สำหรับจัดการการประมวลผลและการวิเคราะห์ข้อมูล รวมถึงแพ็คเกจ mlflow.sklearn สำหรับการบูรณาการโมเดล Scikit-Learn
  • บรรทัดที่สี่นำเข้าไลบรารี 'คำเตือน' เพื่อระงับข้อผิดพลาด
  • คลาส parameterGrid สำหรับการค้นหากริดในโมดูล sklearn.model_selection
  • GridSearchCV และ GradientBoostingClassifier จาก sklearn.model_selection และ ensemble ตามลำดับ สำหรับโมเดลการค้นหาตารางและโมเดลตัวแยกประเภทการเร่งการไล่ระดับสี
  • ฟังก์ชันความแม่นยำ_คะแนนและการจัดหมวดหมู่_รายงานจากโมดูล sklearn.metrics เพื่อคำนวณความแม่นยำของแบบจำลองและสร้างรายงานการจัดหมวดหมู่
  • รหัสนำเข้าโมดูล OS และตั้งค่าตัวแปรสภาพแวดล้อม GIT_PYTHON_REFRESH เป็นเงียบ

ข้อมูลโค้ด:

# Step-I นำเข้าไลบรารีที่จำเป็น
นำเข้า mlflow
นำเข้า mlflow.sklearn
นำเข้าคำเตือนตามคำเตือน
นำเข้าแพนด้าเป็น panda_obj
จาก sklearn.model_selection นำเข้า train_test_split เป็น tts, parameterGrid เป็น pg, GridSearchCV เป็น gscv
นำเข้าเรา
จาก sklearn.ensemble นำเข้า GradientBoostingClassifier เป็น GBC
จาก sklearn.metrics นำเข้าความแม่นยำ_คะแนนเป็น acs, การจำแนกประเภท_รายงานเป็น cr
ระบบปฏิบัติการ.สภาพแวดล้อม[ 'GIT_PYTHON_REFRESH' ] = 'เงียบ'

ขั้นตอนที่ 2: ตั้งค่า URI การติดตาม

URI การติดตามของเซิร์ฟเวอร์ MLflow ได้รับการตั้งค่าโดยใช้ฟังก์ชัน mlflow.set_tracking_uri() เพื่อให้มั่นใจว่าเครื่องภายในเครื่องบนพอร์ต 5000 สำหรับการทดลองและแบบจำลอง

mlflow.set_tracking_uri( 'http://localhost:5000' )

ขั้นตอนที่ 3: โหลดและเตรียมชุดข้อมูลการรับเข้า

นำเข้าไลบรารี Pandas เป็น panda_obj เพื่อจัดการและวิเคราะห์ข้อมูล ใช้ฟังก์ชัน read_csv() เพื่อโหลดชุดข้อมูลการรับเข้า เส้นทางไปยังชุดข้อมูลเป็นอาร์กิวเมนต์เดียวที่จำเป็นโดยฟังก์ชัน read_csv() เส้นทางไปยังชุดข้อมูลในกรณีนี้คือ std_admission_dataset.csv ด้วยการใช้ฟังก์ชัน read_csv() ชุดข้อมูลจะถูกโหลดลงใน Pandas DataFrame

คอลัมน์ Admission_Status จาก std_admissions_data DataFrame จะถูกลบออกก่อนโดยโค้ด เนื่องจากคอลัมน์นี้มีตัวแปรเป้าหมาย จึงไม่จำเป็นต้องประมวลผลล่วงหน้า

จากนั้นโค้ดจะสร้างตัวแปรใหม่สองตัว: “F” และ “t” คุณลักษณะต่างๆ มีอยู่ในตัวแปร “F” ในขณะที่ตัวแปรเป้าหมายมีอยู่ในตัวแปร “t”

จากนั้นข้อมูลจะถูกกระจายไปยังชุดทดสอบและชุดฝึกอบรม ซึ่งทำได้สำเร็จโดยใช้ฟังก์ชัน tts() จากแพ็คเกจ sklearn.model_selection คุณลักษณะ ตัวแปรเป้าหมาย ขนาดการทดสอบ และสถานะสุ่มคืออาร์กิวเมนต์สี่ตัวที่ฟังก์ชัน tts() ต้องการ พารามิเตอร์ test_size กำหนดส่วนของข้อมูลที่ใช้เพื่อการทดสอบ เนื่องจากขนาดการทดสอบในอินสแตนซ์นี้ตั้งค่าเป็น 0.2 ข้อมูล 20% จะถูกนำมาใช้สำหรับการทดสอบ

ตัวเลือก Random_state ระบุเมล็ดพันธุ์ตัวสร้างตัวเลขสุ่ม การทำเช่นนี้เพื่อให้แน่ใจว่าข้อมูลจะถูกแยกแบบสุ่ม ขณะนี้ชุดการฝึกและการทดสอบถูกจัดเก็บไว้ในตัวแปร F_training, F_testing, t_training และ t_testing ชุดเหล่านี้สามารถใช้เพื่อประเมินและฝึกอบรมโมเดลการเรียนรู้ของเครื่อง

ข้อมูลโค้ด:

# ขั้นตอนที่ 3: โหลดชุดข้อมูลการรับเข้า
std_admissions_data = panda_obj.read_csv( 'std_admission_dataset.csv' )

# ประมวลผลข้อมูลล่วงหน้าและแบ่งออกเป็นคุณสมบัติ (F) และเป้าหมาย (t)
F = std_admissions_data.drop([ 'การรับเข้า_สถานะ' ], แกน= 1 )
t = std_admissions_data[ 'การรับเข้า_สถานะ' ]

# แปลงตัวแปรเด็ดขาดให้เป็นตัวเลขโดยใช้การเข้ารหัสแบบร้อนแรงเดียว
F = panda_obj.get_dummies(F)
F_training, F_testing, t_training, t_testing = tts(F, t, test_size= 0.2 , สุ่ม_สถานะ= 42 )

ขั้นตอนที่ 4: ตั้งชื่อการทดลอง MLflow

adm_experiment_name= 'มหาวิทยาลัย_การรับเข้า_การทดลอง'
mlflow.set_experiment(adm_experiment_name)

ขั้นตอนที่ 5: กำหนดตัวแยกประเภทการเพิ่มการไล่ระดับสี

ขณะนี้โมเดลตัวแยกประเภทการเร่งการไล่ระดับสีถูกจัดเก็บไว้ในตัวแปร gbc_obj ชุดข้อมูลการรับเข้าสามารถใช้เพื่อทดสอบและฝึกอบรมโมเดลนี้ได้ ค่าของอาร์กิวเมนต์ Random_state คือ 42 สิ่งนี้รับประกันว่าแบบจำลองได้รับการฝึกฝนโดยใช้เครื่องกำเนิดตัวเลขสุ่มที่เหมือนกันทุกประการ ซึ่งทำให้ผลลัพธ์สามารถทำซ้ำได้

gbc_obj = GBC(สุ่ม_สถานะ= 42 )

ขั้นตอนที่ 6: กำหนดตารางไฮเปอร์พารามิเตอร์

โค้ดจะสร้างพจนานุกรม param_grid ในขั้นแรก ไฮเปอร์พารามิเตอร์ที่ปรับผ่านการค้นหาตารางมีอยู่ในพจนานุกรมนี้ คีย์สามคีย์ประกอบขึ้นเป็นพจนานุกรม param_grid ได้แก่ n_estimators, Learning_rate และ max_ allowance สิ่งเหล่านี้คือไฮเปอร์พารามิเตอร์ของโมเดลลักษณนามที่เพิ่มการไล่ระดับสี จำนวนต้นไม้ในโมเดลถูกระบุโดยไฮเปอร์พารามิเตอร์ n_estimators อัตราการเรียนรู้ของโมเดลระบุผ่านไฮเปอร์พารามิเตอร์ Learning_rate ไฮเปอร์พารามิเตอร์ max_deep กำหนดความลึกสูงสุดที่เป็นไปได้ของแผนผังของโมเดล

ข้อมูลโค้ด:

param_grid = {

'n_ตัวประมาณค่า' :[ 100 , 150 , 200 ],

'อัตราการเรียนรู้' :[ 0.01 , 0.1 , 0.2 ],

'สูงสุด_ความลึก' :[ 4 , 5 , 6 ]

}

ขั้นตอนที่ 7: ทำการค้นหากริดด้วยการติดตาม MLflow

จากนั้นโค้ดจะวนซ้ำในพจนานุกรม param_grid สำหรับไฮเปอร์พารามิเตอร์แต่ละชุดในพจนานุกรม โค้ดจะดำเนินการดังต่อไปนี้:

  • เริ่มการรัน MLflow ใหม่
  • แปลงไฮเปอร์พารามิเตอร์เป็นรายการ หากยังไม่มีเป็นรายการ
  • บันทึกไฮเปอร์พารามิเตอร์ไปที่ MLflow
  • ฝึกโมเดลการค้นหากริดด้วยไฮเปอร์พารามิเตอร์ที่ระบุ
  • รับโมเดลที่ดีที่สุดจากการค้นหากริด
  • คาดการณ์ข้อมูลการทดสอบที่ทำงานในรูปแบบที่ดีที่สุด
  • คำนวณความแม่นยำของแบบจำลอง
  • พิมพ์ไฮเปอร์พารามิเตอร์ ความแม่นยำ และรายงานการจัดหมวดหมู่
  • บันทึกความแม่นยำและโมเดลไปยัง MLflow

ข้อมูลโค้ด:

ด้วย warn.catch_warnings():
warn.filterwarnings( 'ไม่สนใจ' , หมวดหมู่=UserWarning, โมดูล= '.*distutil.*' )
สำหรับพารามิเตอร์ใน pg(param_grid):
ด้วย mlflow.start_run(run_name= 'รับสมัคร_สถานะวิ่ง' ):
# แปลงค่าเดี่ยวเป็นรายการ
params = {key: [value] ถ้าไม่ใช่ isinstance(value, list) else ค่าสำหรับคีย์, ค่าใน params.items()}
mlflow.log_params (พารามิเตอร์)
grid_search = gscv(gbc_obj, param_grid=params, cv= 5 )
grid_search.fit(F_training, t_training)
std_best_model = grid_search.best_estimator_
model_predictions = std_best_model.predict (การทดสอบ F_)
model_accuracy_score = acs (การทดสอบ t_, model_predictions)
พิมพ์( 'ไฮเปอร์พารามิเตอร์:' , พารามิเตอร์)
พิมพ์( 'ความแม่นยำ:' , model_accuracy_score)
# เพิกเฉยต่อ UnknownMetricWarning อย่างชัดเจน
ด้วย warn.catch_warnings():
warn.filterwarnings( 'ไม่สนใจ' , หมวดหมู่=คำเตือน)
พิมพ์( 'รายงานการจำแนกประเภท:' )
พิมพ์ (cr (t_testing, model_predictions, zero_division= 1 ))
mlflow.log_metric( 'ความแม่นยำ' , model_accuracy_score)
mlflow.sklearn.log_model(std_best_model, 'gb_คลาสซิฟายเออร์_โมเดล' )

ขั้นตอนที่ 8: รันโปรแกรมโดยใช้ Python

นี่คือเอาต์พุตบนเซิร์ฟเวอร์ MLflow:

บทสรุป

เครื่องมือค้นหาตารางของ MLflow ปรับแต่ง ติดตามผลลัพธ์ และแก้ไขไฮเปอร์พารามิเตอร์ในโมเดลการเรียนรู้ของเครื่องโดยอัตโนมัติ ช่วยในการกำหนดไฮเปอร์พารามิเตอร์ในอุดมคติและรับประกันผลลัพธ์ที่เชื่อถือได้ แต่อาจมีราคาแพงในการคำนวณสำหรับการทดลองไฮเปอร์พารามิเตอร์ที่ครอบคลุม