Tôi đang khám phá cách mô hình hóa một tập dữ liệu bằng cách sử dụng các phân phối bình thường với cả giá trị trung bình và phương sai được định nghĩa là các hàm tuyến tính của các biến độc lập.
Một cái gì đó như N ~ (f (x), g (x)).
Tôi tạo một mẫu ngẫu nhiên như thế này:
def draw(x):
return norm(5 * x + 2, 3 *x + 4).rvs(1)[0]
Vì vậy, tôi muốn lấy 5, 2 và 4 làm tham số cho phân phối của mình.
Tôi tạo mẫu của mình:
smp = np.zeros ((100,2))
for i in range(0, len(smp)):
smp[i][0] = i
smp[i][1] = draw(i)
Hàm khả năng là:
def lh(p):
p_loc_b0 = p[0]
p_loc_b1 = p[1]
p_scl_b0 = p[2]
p_scl_b1 = p[3]
l = 1
for i in range(0, len(smp)):
x = smp[i][0]
y = smp[i][1]
l = l * norm(p_loc_b0 + p_loc_b1 * x, p_scl_b0 + p_scl_b1 * x).pdf(y)
return -l
Vì vậy, các tham số cho các hàm tuyến tính được sử dụng trong mô hình được đưa ra trong vectơ 4 biến p.
Sử dụng scipy.opt tối đa hóa, tôi có thể giải quyết các tham số MLE bằng xtol cực thấp và đã đưa ra giải pháp làm điểm bắt đầu:
fmin(lh, x0=[2,5,3,4], xtol=1e-35)
Mà không hoạt động tốt:
Warning: Maximum number of function evaluations has been exceeded.
array([ 3.27491346, 4.69237042, 5.70317719, 3.30395462])
Tăng xtol lên giá trị cao hơn là không tốt.
Vì vậy, tôi cố gắng sử dụng một giải pháp bắt đầu khác xa với giải pháp thực sự:
>>> fmin(lh, x0=[1,1,1,1], xtol=1e-8)
Optimization terminated successfully.
Current function value: -0.000000
Iterations: 24
Function evaluations: 143
array([ 1., 1., 1., 1.])
Điều đó làm tôi suy nghĩ:
PDF phần lớn được tập hợp xung quanh giá trị trung bình và có độ dốc rất thấp chỉ có một vài độ lệch chuẩn so với giá trị trung bình, điều này phải không quá tốt cho các phương pháp số.
Vì vậy, làm thế nào để thực hiện các loại ước lượng số này trong các hàm trong đó độ dốc rất gần với không so với giải pháp?