繁体   English   中英

将高斯混合模型拟合到单个特征数据的正确方法是什么?

[英]What is the correct way to fit a gaussian mixture model to single feature data?

datadata的一维数组。

data = [0.0, 7000.0, 0.0, 7000.0, -400.0, 0.0, 7000.0, -400.0, -7400.0, 7000.0, -400.0, -7000.0, -7000.0, 0.0, 0.0, 0.0, -7000.0, 7000.0, 7000.0, 7000.0, 0.0, -7000.0, 6600.0, -7400.0, -400.0, 6600.0, -400.0, -400.0, 6600.0, 6600.0, 6600.0, 7000.0, 6600.0, -7000.0, 0.0, 0.0, -7000.0, -7400.0, 6600.0, -400.0, 7000.0, -7000.0, -7000.0, 0.0, 0.0, -400.0, -7000.0, -7000.0, 7000.0, 7000.0, 0.0, -7000.0, 0.0, 0.0, 6600.0, 6600.0, 6600.0, -7400.0, -400.0, -2000.0, -7000.0, -400.0, -7400.0, 7000.0, 0.0, -7000.0, -7000.0, 0.0, -400.0, -7400.0, -7400.0, 0.0, 0.0, 0.0, -400.0, -400.0, -400.0, -400.0, 6600.0, 0.0, -400.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -400.0, -400.0, 0.0, 0.0, -400.0, -400.0, 0.0, -400.0, 0.0, -400.0]

我想让一些高斯人适合这个数据并绘制它们。

如果我跑步

import numpy as np
from sklearn import mixture

x = np.array(data)
clf = mixture.GaussianMixture(n_components=2, covariance_type='full')
clf.fit(x)

我得到错误

ValueError: Expected n_samples >= n_components but got n_components = 2, n_samples = 1

DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and will raise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.

好吧...我可以忍受。 警告告诉我该怎么办。 但是,如果我跑步

x = np.array(data).reshape(-1,1)
clf = mixture.GaussianMixture(n_components=2, covariance_type='full')
clf.fit(x)

我得到错误

ValueError: Expected the input data X have 1 features, but got 32000 features

我究竟做错了什么? 正确的方法是什么?

编辑:

我只是意识到我误读了错误消息。 不是fit()会出错,而是score_samples()

之后,我试图绘制高斯图。

x = np.linspace(-8000,8000,32000)
y = clf.score_samples(x)

plt.plot(x, y)
plt.show()

所以x似乎是问题所在。 但是, x.reshape(-1,1)都没有帮助, x.reshape(1,-1)也没有帮助。

我自己发现了错误。 如我在编辑中所述,不是fit()引发错误,而是score_samples()

这两个函数都可以使用多维数组。

工作代码:

data = np.array(data).reshape(-1,1)
clf = mixture.GaussianMixture(n_components=1, covariance_type='full')
clf.fit(data)

x = np.array(np.linspace(-8000,8000,32000)).reshape(-1,1)
y = clf.score_samples(x)

plt.plot(x, y)
plt.show()

如果您只有一项功能的样本很多,请尝试

your_samples_list = map(lambda x:[x], your_samples_list)

这会将其转换为列表列表

[a,b,c] -> [[a],[b],[c]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM