Trình tối ưu hóa SciPy
Trình tối ưu hóa trong SciPy
Trình tối ưu hóa là một tập hợp các quy trình được xác định trong SciPy để tìm giá trị tối thiểu của hàm hoặc nghiệm của phương trình.
Tối ưu hóa chức năng
Về cơ bản, tất cả các thuật toán trong Machine Learning không gì khác hơn là một phương trình phức tạp cần được giảm thiểu với sự trợ giúp của dữ liệu nhất định.
Căn nguyên của một phương trình
NumPy có khả năng tìm nghiệm của các đa thức và phương trình tuyến tính, nhưng nó không thể tìm ra nghiệm của các phương trình phi tuyến tính, như phương trình này:
x + cos(x)
Để làm được điều đó, bạn có thể sử dụng hàm optimize.root
của SciPy.
Hàm này có hai đối số bắt buộc:
fun - một hàm đại diện cho một phương trình.
x0 - dự đoán ban đầu cho gốc.
Hàm trả về một đối tượng có thông tin liên quan đến giải pháp.
Giải pháp thực tế được đưa ra dưới thuộc tính x
của đối tượng được trả về:
Ví dụ
Tìm nghiệm của phương trình x + cos(x)
:
from scipy.optimize import root
from math import cos
def eqn(x):
return x + cos(x)
myroot = root(eqn, 0)
print(myroot.x)
Hãy tự mình thử »Lưu ý: Đối tượng được trả về có nhiều thông tin hơn về giải pháp.
Giảm thiểu một chức năng
Trong ngữ cảnh này, một hàm biểu thị một đường cong, các đường cong có điểm cao và điểm thấp .
Điểm cao được gọi là cực đại .
Điểm thấp được gọi là cực tiểu .
Điểm cao nhất trong toàn bộ đường cong được gọi là cực đại toàn cục , trong khi phần còn lại được gọi là cực đại cục bộ .
Điểm thấp nhất trên toàn bộ đường cong được gọi là cực tiểu toàn cục , trong khi điểm còn lại được gọi là cực tiểu cục bộ .
Tìm cực tiểu
Chúng ta có thể sử dụng hàm scipy.optimize.minimize()
để thu nhỏ hàm.
Hàm minimize()
có các đối số sau:
fun - một hàm đại diện cho một phương trình.
x0 - dự đoán ban đầu cho gốc.
phương thức - tên của phương thức sẽ sử dụng. Giá trị pháp lý:
'CG'
'BFGS'
'Newton-CG'
'L-BFGS-B'
'TNC'
'COBYLA'
'SLSQP'
gọi lại - hàm được gọi sau mỗi lần lặp tối ưu hóa.
tùy chọn - một từ điển xác định các thông số bổ sung:
{
"disp": boolean - print detailed description
"gtol": number - the tolerance of the error
}
Ví dụ
Giảm thiểu hàm x^2 + x + 2
bằng BFGS
:
from scipy.optimize import minimize
def eqn(x):
return x**2 + x + 2
mymin = minimize(eqn, 0, method='BFGS')
print(mymin)
Hãy tự mình thử »