$cache[$key] = empty($arr) ? NULL : $arr; return $cache[$key]; } // 门户 获取需要在频道显示的栏目主题数据 function portal_channel_thread($fid) { global $forumlist; if (empty($fid)) return NULL; $orderby = array('tid' => 1); $page = 1; // 遍历所有在频道显示内容的栏目 $category_forumlist = channel_category($fid); $arrlist = array(); $forum_tids = array(); $tidlist = array(); if ($category_forumlist) { foreach ($category_forumlist as &$_forum) { // 频道显示数据 $arrlist['list'][$_forum['fid']] = array( 'fid' => $_forum['fid'], 'name' => $_forum['name'], 'rank' => $_forum['rank'], 'type' => $_forum['type'], 'url' => $_forum['url'], 'channel_new' => $_forum['channel_new'], ); $forum_thread = thread_tid__find(array('fid' => $_forum['fid']), $orderby, $page, $_forum['channel_new'], 'tid', array('tid')); // 最新信息按栏目分组 foreach ($forum_thread as $key => $_thread) { $forum_tids[$key] = $_thread; } unset($forum_thread); } $tidlist += $forum_tids; } unset($category_forumlist); // 获取属性对应的tid集合 list($flaglist, $flagtids) = flag_thread_by_fid($fid); empty($flagtids) || $tidlist += $flagtids; unset($flagtids); // 频道置顶 $stickylist = sticky_list_thread($fid); empty($stickylist) || $tidlist += $stickylist; // 在这之前合并所有二维数组 tid值为键/array('tid值' => tid值) $tidarr = arrlist_values($tidlist, 'tid'); // 在这之前使用$tidarr = array_merge($tidarr, $arr)前合并所有一维数组 tid/array(1,2,3) if (empty($tidarr)) { $arrlist['list'] = isset($arrlist['list']) ? array_multisort_key($arrlist['list'], 'rank', FALSE, 'fid') : array(); return $arrlist; } $tidarr = array_unique($tidarr); $pagesize = count($tidarr); // 遍历获取的所有tid主题 $threadlist = well_thread_find_asc($tidarr, $pagesize); // 遍历时为升序,翻转为降序 $threadlist = array_reverse($threadlist); foreach ($threadlist as &$_thread) { // 各栏目最新内容 isset($forum_tids[$_thread['tid']]) AND $arrlist['list'][$_thread['fid']]['news'][$_thread['tid']] = $_thread; // 全站置顶内容 isset($stickylist[$_thread['tid']]) AND $arrlist['sticky'][$_thread['tid']] = $_thread; // 首页属性主题 if (!empty($flaglist)) { foreach ($flaglist as $key => $val) { if (isset($val['tids']) && in_array($_thread['tid'], $val['tids'])) { $arrlist['flaglist'][$key][array_search($_thread['tid'], $val['tids'])] = $_thread; ksort($arrlist['flaglist'][$key]); $arrlist['flag'][$_thread['tid']] = $_thread; } } } } unset($threadlist); if (isset($arrlist['sticky'])) { $i = 0; foreach ($arrlist['sticky'] as &$val) { ++$i; $val['i'] = $i; } } if (isset($arrlist['flag'])) { $i = 0; foreach ($arrlist['flag'] as &$val) { ++$i; $val['i'] = $i; } } if (isset($arrlist['flaglist'])) { foreach ($arrlist['flaglist'] as &$val) { $i = 0; foreach ($val as &$v) { ++$i; $v['i'] = $i; } } } isset($arrlist['list']) AND $arrlist['list'] = array_multisort_key($arrlist['list'], 'rank', FALSE, 'fid'); return $arrlist; } ?>python - How to force all terms in 1-D Gaussian mixture model to have the same mean? - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

python - How to force all terms in 1-D Gaussian mixture model to have the same mean? - Stack Overflow

programmeradmin0浏览0评论

I have a one-dimensional set of data points, of which I want to parameterise the probability density. I have reasons to believe that a Gaussian mixture model would be a good way to accomplish this, so I'm trying to use scikit-learn's GaussianMixture class to fit the parameters and weights of two Gaussian distributions.

Toy example:

import numpy as np
from sklearn.mixture import GaussianMixture

stdev_1 = 5
stdev_2 = 30
gaussian_data_1 = stdev_1 * np.random.randn(1000)
gaussian_data_2 = stdev_2 * np.random.randn(1000)

data = np.concatenate([gaussian_data_1, gaussian_data_2])
model = GaussianMixture(2)
data_2d = data.reshape((len(data), 1))
model.fit(data_2d)

print("Estimated means:", model.means_[:, 0])
print("Estimated stdevs:", model.covariances_[:, 0, 0] ** 0.5)
print("Estimated weights:", model.weights_)

The resulting model has reasonable estimates of two Gaussians. I put in means of zero, and standard deviations of 5 and 30, both with weights of 0.5 (both have 1000 data points), and it finds means of [-0.0715483 and -0.06263915], standard deviations of [ 5.46757321 and 30.77977466], and weights of [0.53427173 and 0.46572827].

So far so good.

However, in my application, I know that the underlying distribution is unimodal, and I really only want to find out which combination of (standard deviations and weights) fits best. Hence, I'd like to force this model to use the same means, for instance by simply passing it the mean myself, and having it only optimise the weights and standard deviations (variances).

Is this possible with scikit-learn? The GaussianMixture class seems to be designed for classification, while I'm actually using it for the sake of parameterising a distribution, so it might be that there's a better solution that I'm not aware of.

If this is not feasible with scikit-learn, any suggestions on how to do this (Preferably with >2 Gaussians)?

发布评论

评论列表(0)

  1. 暂无评论