期望最大化如果采用一种概率方法对数据进行分类.如果我错了,请纠正我,如果它不是分类器.
这种EM技术的直观解释是什么?这里的期望是什么,最大化的是什么?
cluster-analysis machine-learning mathematical-optimization data-mining expectation-maximization
有许多聚类算法可供使用.一种流行的算法是K-means,其中,基于给定数量的聚类,算法迭代以找到对象的最佳聚类.
您使用什么方法来确定k-means聚类中数据中的聚类数?
R中可用的任何包是否包含V-fold cross-validation确定正确簇数的方法?
另一种使用良好的方法是期望最大化(EM)算法,该算法为每个实例分配概率分布,该概率分布指示其属于每个聚类的概率.
这个算法是用R实现的吗?
如果是,是否可以通过交叉验证自动选择最佳簇数?
您更喜欢其他一些聚类方法吗?
我试图使用维特比算法在HMM上找到最可能的路径(即一系列状态).但是,我不知道过渡和发射矩阵,我需要从观测结果(数据)中估算出来.
要估计这些矩阵,我应该使用哪种算法:Baum-Welch还是Viterbi训练算法?为什么?
如果我应该使用维特比训练算法,任何人都可以给我一个很好的伪代码(它不容易找到)?
algorithm viterbi hidden-markov-models expectation-maximization
我最近一直在自我研究期望最大化,并在这个过程中抓住了一些简单的例子:
http://cs.dartmouth.edu/~cs104/CS104_11.04.22.pdf 投掷时有3个硬币0,1和2,P0,P1和P2概率落在头上.投掷硬币0,如果结果是头,投掷硬币1三次,否则投掷硬币2三次.由硬币1和2产生的观察数据如下:HHH,TTT,HHH,TTT,HHH.隐藏数据是硬币0的结果.估计P0,P1和P2.
http://ai.stanford.edu/~chuongdo/papers/em_tutorial.pdf 有两个硬币A和B,PA和PB是投掷时落在头上的概率.每轮,随机选择一枚硬币,然后扔10次,然后记录结果.观察到的数据是由这两个硬币提供的折腾结果.但是,我们不知道为特定回合选择了哪一枚硬币.估计PA和PB.
虽然我可以得到计算,但我无法将它们的解决方式与原始的EM理论联系起来.具体来说,在两个例子的M-Step期间,我看不出它们是如何最大化任何东西的.它们似乎正在重新计算参数,不知何故,新参数比旧参数更好.而且,两个E-Steps甚至看起来都不相似,更不用说原始理论的E-Step了.
那么这些例子究竟是如何运作的呢?
algorithm computer-science machine-learning data-mining expectation-maximization
任何人都可以提供EM算法的简单数字示例,因为我不确定给出的公式?一个非常简单的具有4或5个笛卡尔坐标的人将完美地做到这一点.
algorithm machine-learning data-mining expectation-maximization
背景: 我有一组来自图像的2组彩色像素,一组对应于背景,另一组对应于前景.接下来,我使用来自OpenCV的EM为每组训练2个高斯混合模型.我的目标是找到随机像素属于前景和背景的概率.因此,我对像素上的每个EM使用"预测"功能.
题:
该方法返回一个双元素双向量.零元素是样本的似然对数值.第一个元素是给定样品的最可能混合物组分的指数.
我不明白什么意思是"象征性对数".在我的结果中,我有时负值和值> 1.使用相同函数的人是否有这种结果或0到1之间的结果?我可以从结果中得出什么结论?
这是我的代码:
Mat mask = imread("mask.tif", 0);
Mat formerImage = imread("ImageFormer.tif");
Mat currentImage = imread("ImageCurrent.tif");
// number of cluster in the GMM
int nClusters = 5;
int countB=0, countF=0;
Vec3b color;
Vec2d probFg, probBg; // probabilities to belong to the foreground or background from GMMs
//count the number of pixels for each training data
for(int c=0; c<=40;c++) {
for(int l=0; l<=40;l++) {
if(mask.at<BYTE>(l, c)==255) {
countF++;
} else if(mask.at<BYTE>(l, c)==0) {
countB++; …Run Code Online (Sandbox Code Playgroud) c++ opencv gaussian image-segmentation expectation-maximization
我想使用 python 将高斯混合模型拟合到一组加权数据点。
我尝试了 sklearn.mixture.GMM() ,它工作得很好,除了它对所有数据点的权重相等。有谁知道如何在此方法中为数据点分配权重?我多次尝试使用数据点来“增加其权重”,但这对于大型数据集似乎无效。
我也考虑过自己实现 EM 算法,但这似乎比上面的 GMM 方法慢得多,并且会极大地增加大型数据集的计算时间。
我刚刚发现了 EM 算法 cv2.EM() 的 opencv 方法。这再次工作正常,但与 sklearn.mixture.GMM 存在相同的问题,此外,似乎没有办法更改协方差允许的最小值。或者有没有办法将协方差最小值更改为 0.001?我希望可以使用探针参数来为数据分配权重,但这似乎只是一个输出参数,对拟合过程没有影响,不是吗?使用 probs0 并使用 trainM 以 M 步骤启动算法也没有帮助。对于 probs0,我使用了(数据点数量)x(GMM 分量数量)矩阵,其列相同,而数据点的加权参数写入与数据点对应的行。这也没有解决问题。它只是产生了一个混合模型,其中所有的值都为 0。
有谁知道如何操作上述方法,或者有没有人知道另一种方法,以便 GMM 可以拟合加权数据?
python opencv cluster-analysis scikit-learn expectation-maximization
我需要初始化一些三维点,我希望它们在整个立方体中间距相等.有没有创造性的方法来做到这一点?
我使用迭代期望最大化算法,我希望我的初始向量均匀地"跨越"空间.
例如,假设我有八个点,我想在一个大小为1x1x1的立方体中平均分配.我希望边长为0.333的立方体角上的点,在较大的立方体中心.
下面是一个2D示例.请注意,红点与彼此和边缘等距.我希望3D相同.

如果点数没有整数立方根,我可以在排列中留下一些"间隙".
目前我正在使用点数的立方根并使用它来计算点数和它们之间的期望距离.然后我迭代这些点并增加X,Y和Z坐标(交错使得Y不会增加,直到X循环回到0,对于Z而言,Y相同).
如果在MATLAB中有一种简单的方法可以做到这一点,我很乐意使用它.

在应用期望最大化算法之前,是否存在如何确定应在一组数据中识别的高斯数的算法或技巧?
例如,在上面所示的二维数据图中,当我应用期望最大化算法时,我尝试将4个高斯拟合到数据中,我将得到以下结果.

但是,如果我不知道数据中的高斯数量呢?有没有我可以应用的算法或技巧,以便我可以找到这个细节?
我正在尝试使用YellowBrick的KElbowVisualizer和SKLearn的Expectation Maximization算法类:GaussianMixture可视化我的数据的弯头图。
运行此命令时,标题出现错误。(我也尝试过ClassificationReport,但这也失败了)
model = GaussianMixture()
data = get_data(data_name, preprocessor_name, train_split=0.75)
X, y, x_test, y_test = data
visualizer = KElbowVisualizer(model, k=(4,12))
visualizer.fit(X) # Fit the data to the visualizer
visualizer.show() # Finalize and render the figure
Run Code Online (Sandbox Code Playgroud)
我在YellowBrick中找不到任何可以帮助我估计期望最大化的组件数量的东西。
machine-learning scikit-learn expectation-maximization yellowbrick
data-mining ×5
algorithm ×4
matlab ×2
opencv ×2
scikit-learn ×2
3d ×1
c++ ×1
gaussian ×1
math ×1
python ×1
r ×1
viterbi ×1
yellowbrick ×1