Tôi muốn tạo một đối tượng sklearn GMM với một tập hợp các phương tiện, trọng số và hiệp phương sai được xác định trước (trên một lưới).
Tôi đã làm được điều này:
từ sklearn.mixture nhập GaussianMixture
nhập numpy dưới dạng np
def get_grid_gmm(subdivisions=[10,10,10], phương sai=0,05):
n_gaussians = less(lambda x, y: x*y,các phân khu)
bước = [ 1.0/(2*subdivisions[0]), 1.0/(2*subdivisions[1]), 1.0/(2*subdivisions[2])]
có nghĩa là = np.mgrid[ step[0] : 1.0-step[0]: complex(0,subdivisions[0]),
bước [1] : 1.0-bước [1]: phức tạp (0, phân khu [1]),
bước [2] : 1.0-bước [2]: phức tạp (0, phân khu [2])]
có nghĩa là = np.reshape(có nghĩa là, [-1,3])
hiệp phương sai = phương sai*np.ones_like(có nghĩa)
trọng số = (1.0/n_gaussians)*np.ones(n_gaussians)
gmm = GaussianMixture(n_comComponents=n_gaussians, covariance_type='spherical' )
gmm.weights_ = trọng lượng
gmm.covariances_ = hiệp phương sai
gmm.means_ = nghĩa là
trả lại gmm
chắc chắn chính():
xx = np.random.rand(100,3)
gmm = get_grid_gmm()
y= gmm.predict_proba(xx)
if __name__ == "__main__":
chủ yếu()
Vấn đề là nó thiếu thứ tôi cần dùng sau này gmm.predict_proba()
phương pháp. Làm thế nào tôi có thể khắc phục vấn đề này?
gia hạn: Tôi đã cập nhật mã để hiển thị ví dụ đầy đủ về lỗi
更新 2
Tôi đã cập nhật mã dựa trên nhận xét và câu trả lời
từ sklearn.mixture nhập GaussianMixture
nhập numpy dưới dạng np
def get_grid_gmm(subdivisions=[10,10,10], phương sai=0,05):
n_gaussians = less(lambda x, y: x*y,các phân khu)
bước = [ 1.0/(2*subdivisions[0]), 1.0/(2*subdivisions[1]), 1.0/(2*subdivisions[2])]
có nghĩa là = np.mgrid[ step[0] : 1.0-step[0]: complex(0,subdivisions[0]),
bước [1] : 1.0-bước [1]: phức tạp (0, phân khu [1]),
bước [2] : 1.0-bước [2]: phức tạp (0, phân khu [2])]
có nghĩa là = np.reshape(có nghĩa,[3,-1])
hiệp phương sai = phương sai*np.ones(n_gaussians)
cov_type = 'hình cầu'
trọng số = (1.0/n_gaussians)*np.ones(n_gaussians)
gmm = GaussianMixture(n_comComponents=n_gaussians, covariance_type=cov_type )
gmm.weights_ = trọng lượng
gmm.covariances_ = hiệp phương sai
gmm.means_ = nghĩa là
từ sklearn.mixture.gaussian_mixture nhập _compute_precision_cholesky
gmm.precisions_cholesky_ = _compute_precision_cholesky(hiệp phương sai, cov_type)
gmm.precisions_ = gmm.precisions_cholesky_ ** 2
trả lại gmm
chắc chắn chính():
xx = np.random.rand(100,3)
gmm = get_grid_gmm()
_, y = gmm._estimate_log_prob(xx)
y = np.exp(y)
if __name__ == "__main__":
chủ yếu()
Không còn lỗi nữa, nhưng _estimate_log_prob và Predict_proba không tạo ra cùng một kết quả để khớp GMM. Tại sao điều này lại xảy ra?
Tôi là một lập trình viên xuất sắc, rất giỏi!