Tìm kiếm lưới với MLflow

Tim Kiem Luoi Voi Mlflow



Siêu tham số trong mô hình học máy được tối ưu hóa bằng cách sử dụng phương pháp tìm kiếm lưới. Người dùng có thể nhanh chóng so sánh nhiều cài đặt siêu tham số và tìm ra cài đặt nào hoạt động tốt nhất vì MLflow theo dõi kết quả của các thử nghiệm tìm kiếm lưới. Trong MLflow, thử nghiệm tìm kiếm dạng lưới có thể được chia sẻ nhanh chóng với các thành viên khác trong nhóm. Bằng cách sử dụng MLflow, mô hình hiệu quả nhất từ ​​thử nghiệm tìm kiếm dạng lưới có thể được triển khai.

Lợi ích của tìm kiếm lưới

  • Điều chỉnh siêu tham số tự động: Tìm kiếm lưới tự động điều chỉnh siêu tham số cho phép khám phá có hệ thống mà không cần thử và sai thủ công.
  • Khả năng tái tạo: Tìm kiếm dạng lưới đảm bảo tính hợp lệ của bài kiểm tra bằng cách thu được các kết quả có thể tái tạo nhằm nâng cao khả năng giao tiếp và độ tin cậy.
  • Tìm kiếm đầy đủ: GS tìm thấy các siêu tham số tối ưu cho một mô hình một cách hiệu quả bằng cách kết hợp tìm kiếm một cách thấu đáo.
  • Độ bền: Tìm kiếm lưới là một kỹ thuật mạnh mẽ có khả năng chống nhiễu dữ liệu giúp giảm tình trạng trang bị quá mức.
  • Đơn giản để sử dụng: Tìm kiếm lưới rất dễ sử dụng và dễ hiểu, điều này làm cho nó trở thành một phương pháp khả thi để điều chỉnh siêu tham số.
  • So sánh mô hình: Tìm kiếm dạng lưới đơn giản hóa việc lựa chọn số liệu đánh giá và so sánh mô hình.

Hạn chế của tìm kiếm lưới

  • Chi phí tính toán: Tìm kiếm lưới tốn kém về mặt tính toán để điều chỉnh một số lượng lớn siêu tham số.
  • Mất thời gian: Việc điều chỉnh siêu tham số phức tạp tốn nhiều thời gian.
  • Không phải lúc nào cũng cần thiết: Bây giờ nó luôn luôn được yêu cầu; tìm kiếm ngẫu nhiên là sự thay thế tốt nhất cho nó.

Ví dụ: Tìm cài đặt mô hình tốt nhất cho hệ thống tuyển sinh đại học

Hãy xem ví dụ về tìm kiếm dạng lưới để điều chỉnh siêu tham số trong khuôn khổ hệ thống tuyển sinh đại học trực tuyến. Trong ví dụ này, chúng tôi sử dụng công cụ phân loại scikit-learn và bộ phân loại gradient Boosting Classifier (GBC) đơn giản để dự đoán khả năng được nhận vào một trường đại học của học sinh dựa trên các yếu tố như điểm GPA, điểm SAT, điểm ACT và các hoạt động ngoại khóa. Có nhiều tùy chọn có sẵn để tìm kiếm dạng lưới thay vì GBC bao gồm Hồi quy logistic (LR), SVM (Máy vectơ hỗ trợ), v.v.

Tạo dữ liệu ngẫu nhiên cho hệ thống tuyển sinh trực tuyến bằng MLflow cho tìm kiếm lưới

Pandas của Python và các gói ngẫu nhiên có thể được sử dụng để tạo tập dữ liệu hư cấu cho hệ thống tuyển sinh. Với các giá trị ngẫu nhiên cho các cột APP_NO, GPA, Điểm SAT, Điểm ACT, Hoạt động ngoại khóa và Trạng thái tuyển sinh, mã này tạo ra một tập dữ liệu tuyển sinh tổng hợp. Biến num_students kiểm soát số lượng hàng trong tập dữ liệu.







Trạng thái nhập học được đặt ngẫu nhiên dựa trên tỷ lệ chấp nhận 70% và mô-đun ngẫu nhiên được sử dụng để tạo ra các giá trị ngẫu nhiên cho một số cột. Với mục đích trình diễn, đoạn mã sau tạo tập dữ liệu nhập học giả với các giá trị ngẫu nhiên và được lưu vào tệp std_admission_dataset.csv:



Đoạn mã:



# Nhập thư viện Panda và Random
nhập gấu trúc dưới dạng panda_obj
nhập ngẫu nhiên dưới dạng Random_obj

# Đặt số lượng bản ghi để tạo tập dữ liệu sinh viên
sinh viên_records = 1000

# Tạo danh sách để lưu trữ dữ liệu
std_application_numbers = [ 'ỨNG DỤNG-' + str(random_obj.randint( 1000 , 9999 )) cho _ trong phạm vi(students_records)]
std_gpa = [round(random_obj.uniform( 2,5 , 4.0 ), 2 ) cho _ trong phạm vi(students_records)]
std_sat_scores = [ngẫu nhiên_obj.randint( 900 , 1600 ) cho _ trong phạm vi(students_records)]
std_act_scores = [ngẫu nhiên_obj.randint( hai mươi , 36 ) cho _ trong phạm vi(students_records)]
std_extra_courses = [random_obj.choice([ 'Đúng' , 'KHÔNG' ]) cho _ trong phạm vi(students_records)]

# Tính trạng thái nhập học dựa trên tỷ lệ chấp nhận ngẫu nhiên
std_admission_status = [ 1 nếu ngẫu nhiên_obj.random() < 0,7 khác 0 cho _ trong phạm vi(students_records)]

# Tạo một từ điển để lưu trữ dữ liệu sinh viên
dữ liệu std_ = {

'APPLICATION_NO' : std_application_numbers,

'Điểm trung bình' : std_gpa,

'Điểm SAT' : std_sat_scores,

'Điểm ACT_' : std_act_scores,

'Các hoạt động ngoại khóa' : std_extra_courses,

'Trạng thái nhập học' : std_admission_status

}

# Tạo một DataFrame DataFrame_Student từ từ điển
DataFrame_Student = panda_obj.DataFrame(std_data)

# Lưu DataFrame DataFrame_Student vào tệp CSV có tên std_admission_dataset.csv
DataFrame_Student.to_csv( 'std_admission_dataset.csv' , chỉ mục=Sai)
in( 'Dữ liệu học sinh xuất thành công sang tệp CSV!' )

Thực thi mã:

Sử dụng lệnh Python để biên dịch mã, sau đó sử dụng lệnh pip để cài đặt một mô-đun cụ thể nếu bạn gặp lỗi mô-đun. Sử dụng lệnh cài đặt pip3 để cài đặt thư viện đã cho nếu Python là phiên bản 3.X trở lên.





Thực hiện thành công:



Ảnh chụp màn hình dữ liệu mẫu:

Bước 1: Nhập thư viện

  • Thư viện MLflow để theo dõi thử nghiệm máy học
  • Thư viện Pandas để xử lý việc xử lý và phân tích dữ liệu, cũng như gói mlflow.sklearn để tích hợp các mô hình Scikit-Learn
  • Dòng thứ tư nhập thư viện “cảnh báo” để loại bỏ lỗi
  • Lớp ParameterGrid để tìm kiếm lưới trong mô-đun sklearn.model_selection
  • GridSearchCV và gradientBoostingClassifier từ sklearn.model_selection và quần thể tương ứng cho các mô hình phân loại tìm kiếm dạng lưới và tăng cường độ dốc
  • Các hàm độ chính xác_score vàclass_report từ mô-đun sklearn.metrics để tính toán độ chính xác của mô hình và tạo báo cáo phân loại
  • Mã nhập mô-đun hệ điều hành và đặt biến môi trường GIT_PYTHON_REFRESH thành im lặng.

Đoạn mã:

# Bước I Nhập các thư viện cần thiết
nhập mlflow
nhập mlflow.sklearn
nhập cảnh báo như cảnh báo
nhập gấu trúc dưới dạng panda_obj
từ sklearn.model_selection nhập train_test_split dưới dạng tts, ParameterGrid dưới dạng pg, GridSearchCV dưới dạng gscv
nhập khẩu chúng tôi
từ sklearn.ensemble nhập gradientBoostingClassifier dưới dạng GBC
từ sklearn.metrics nhập độ chính xác_score dưới dạng acs, phân loại_report dưới dạng cr
os.environ[ 'GIT_PYTHON_REFRESH' ] = 'im lặng'

Bước 2: Đặt URI theo dõi

URI theo dõi của máy chủ MLflow được đặt bằng hàm mlflow.set_tracking_uri(), đảm bảo máy cục bộ trên cổng 5000 cho các thử nghiệm và mô hình.

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

Bước 3: Tải và chuẩn bị bộ dữ liệu tuyển sinh

Nhập thư viện Pandas dưới dạng panda_obj để thao tác và phân tích dữ liệu. Hàm read_csv() được áp dụng để tải tập dữ liệu nhập học. Đường dẫn đến tập dữ liệu là đối số duy nhất được yêu cầu bởi hàm read_csv(). Đường dẫn đến tập dữ liệu trong trường hợp này là std_admission_dataset.csv. Bằng cách sử dụng hàm read_csv(), tập dữ liệu được tải vào Khung dữ liệu Pandas.

Cột Tuyển sinh_Trạng thái từ Khung dữ liệu std_admissions_data lần đầu tiên được xóa bằng mã. Vì cột này chứa biến mục tiêu nên không cần xử lý trước.

Sau đó, mã tạo ra hai biến mới: “F” và “t”. Các đặc điểm được chứa trong biến “F”, trong khi biến mục tiêu được chứa trong biến “t”.

Dữ liệu sau đó được phân phối vào các tập thử nghiệm và huấn luyện. Điều này được thực hiện bằng cách sử dụng hàm tts() từ gói sklearn.model_selection. Các tính năng, biến mục tiêu, kích thước thử nghiệm và trạng thái ngẫu nhiên là bốn đối số được yêu cầu bởi hàm tts(). Tham số test_size quy định phần dữ liệu được sử dụng cho mục đích thử nghiệm. Vì kích thước thử nghiệm trong trường hợp này được đặt thành 0,2 nên 20% dữ liệu sẽ được sử dụng cho thử nghiệm.

Tùy chọn Random_state chỉ định hạt giống của trình tạo số ngẫu nhiên. Điều này được thực hiện để đảm bảo rằng dữ liệu được phân tách ngẫu nhiên. Các tập huấn luyện và kiểm tra hiện được lưu trữ trong các biến F_training, F_testing, t_training và t_testing. Những bộ này có thể được sử dụng để đánh giá và huấn luyện các mô hình học máy.

Đoạn mã:

# Bước 3: Load tập dữ liệu tuyển sinh
std_admissions_data = panda_obj.read_csv( 'std_admission_dataset.csv' )

# Xử lý trước dữ liệu và chia thành các tính năng (F) và mục tiêu (t)
F = std_admissions_data.drop([ 'Trạng thái nhập học' ], trục= 1 )
t = std_admissions_data[ 'Trạng thái nhập học' ]

# Chuyển đổi các biến phân loại thành số bằng cách sử dụng mã hóa one-hot
F = panda_obj.get_dummies(F)
F_training, F_testing, t_training, t_testing = tts(F, t, test_size= 0,2 , ngẫu nhiên_state= 42 )

Bước 4: Đặt tên thử nghiệm MLflow

adm_experiment_name = 'Đại học_Tuyển sinh_Thử nghiệm'
mlflow.set_experiment(adm_experiment_name)

Bước 5: Xác định Trình phân loại tăng cường độ dốc

Mô hình phân loại tăng cường độ dốc hiện được lưu trữ trong biến gbc_obj. Tập dữ liệu nhập học có thể được sử dụng để kiểm tra và huấn luyện mô hình này. Giá trị của đối số Random_state là 42. Điều này đảm bảo rằng mô hình được huấn luyện bằng cách sử dụng cùng một hạt giống tạo số ngẫu nhiên giống hệt nhau để làm cho kết quả có thể lặp lại.

gbc_obj = GBC(trạng thái ngẫu nhiên= 42 )

Bước 6: Xác định lưới siêu tham số

Mã ban đầu tạo từ điển param_grid. Các siêu tham số được điều chỉnh thông qua tìm kiếm dạng lưới đều có trong từ điển này. Ba khóa tạo nên từ điển param_grid: n_estimators, learning_rate và max_deep. Đây là các siêu tham số của mô hình phân loại tăng cường độ dốc. Số lượng cây trong mô hình được xác định bởi siêu tham số n_estimators. Tốc độ học của mô hình được chỉ định thông qua siêu tham số learning_rate. Siêu tham số max_deep xác định độ sâu cao nhất có thể có của cây trong mô hình.

Đoạn mã:

thông số_grid = {

'n_công cụ ước tính' :[ 100 , 150 , 200 ],

'tỷ lệ học' :[ 0,01 , 0,1 , 0,2 ],

'max_deep' :[ 4 , 5 , 6 ]

}

Bước 7: Thực hiện tìm kiếm lưới với tính năng theo dõi luồng ML

Sau đó, mã sẽ lặp lại từ điển param_grid. Đối với mỗi bộ siêu tham số trong từ điển, mã thực hiện như sau:

  • Bắt đầu chạy MLflow mới
  • Chuyển đổi siêu tham số thành danh sách nếu chúng chưa phải là danh sách
  • Ghi nhật ký siêu tham số vào MLflow
  • Huấn luyện mô hình tìm kiếm lưới với các siêu tham số được chỉ định
  • Lấy mô hình tốt nhất từ ​​tìm kiếm lưới
  • Đưa ra dự đoán về dữ liệu thử nghiệm hoạt động theo mô hình tốt nhất
  • Tính toán độ chính xác của mô hình
  • In báo cáo siêu tham số, độ chính xác và phân loại
  • Ghi lại độ chính xác và mô hình vào MLflow

Đoạn mã:

với cảnh báo.catch_warnings():
cảnh báo.filterwarnings( 'phớt lờ' , Category=Cảnh báo người dùng, module= '.*distutil.*' )
cho các thông số trong pg(param_grid):
với mlflow.start_run(run_name= 'Tuyển sinh_Trạng thái chạy' ):
# Chuyển đổi các giá trị đơn thành danh sách
params = {key: [value] if not isinstance(value, list) else value for key, value in params.items()}
mlflow.log_params(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_testing)
model_accuracy_score = acs(t_testing, model_predictions)
in( 'Siêu tham số:' , thông số)
in( 'Sự chính xác:' , model_accuracy_score)
# Hoàn toàn bỏ qua Cảnh báo số liệu không xác định
với cảnh báo.catch_warnings():
cảnh báo.filterwarnings( 'phớt lờ' , danh mục=Cảnh báo)
in( 'Báo cáo phân loại:' )
print(cr(t_testing, model_predictions, zero_division= 1 ))
mlflow.log_metric( 'sự chính xác' , model_accuracy_score)
mlflow.sklearn.log_model(std_best_model, 'gb_classifier_model' )

Bước 8: Thực thi chương trình bằng Python

Đây là đầu ra trên máy chủ MLflow:

Phần kết luận

Công cụ tìm kiếm lưới của MLflow tự động điều chỉnh, theo dõi kết quả và sửa đổi siêu tham số trong các mô hình học máy. Nó giúp xác định các siêu tham số lý tưởng và đảm bảo kết quả đáng tin cậy nhưng có thể tốn kém về mặt tính toán đối với các thử nghiệm siêu tham số mở rộng.