pythonで混合ガウス分布の等高線の描画方法を教えて下さい
アヤメデータから作成した散布図上に
混合ガウス分布を使用した等高線を表示したいのですが、
次元数やデータ数が一致しない旨のエラーが発生しています。
対処法、アドバイスなどご教授頂けないでしょうか?
発生している問題・エラーメッセージ
ValueError Traceback (most recent call last) <ipython-input-160-ebd3abcac2b9> in <module> 14 x, y = np.meshgrid(np.linspace(-10, 10, 100), np.linspace(-10, 10, 100)) 15 X = np.array([x, y]).reshape(2, -1).transpose() ---> 16 probs = model.predict_proba(X) 17 Probs = probs.reshape(100, 100) 18 colors = ["red", "blue", "green"] C:\ProgramData\Anaconda3\lib\site-packages\sklearn\mixture\base.py in predict_proba(self, X) 393 """ 394 self._check_is_fitted() --> 395 X = _check_X(X, None, self.means_.shape[1]) 396 _, log_resp = self._estimate_log_prob_resp(X) 397 return np.exp(log_resp) C:\ProgramData\Anaconda3\lib\site-packages\sklearn\mixture\base.py in _check_X(X, n_components, n_features, ensure_min_samples) 61 raise ValueError("Expected the input data X have %d features, " 62 "but got %d features" ---> 63 % (n_features, X.shape[1])) 64 return X 65 ValueError: Expected the input data X have 4 features, but got 2 features
該当のソースコード
python
1from sklearn.mixture import GaussianMixture 2from sklearn.datasets import load_iris 3import numpy as np 4import matplotlib.pyplot as plt 5%matplotlib inline 6 7data = load_iris() 8 9#ガウス分布の数 10n_components = 3 11 12model = GaussianMixture(n_components=n_components) 13model.fit(data.data) 14 15#グリッド作成 16x, y = np.meshgrid(np.linspace(-10, 10, 100), np.linspace(-10, 10, 100)) 17X = np.array([x, y]).reshape(2, -1).transpose() 18 19probs = model.predict_proba(X) 20Probs = probs.reshape(100, 100) 21colors = ["red", "blue", "green"] 22plt.scatter(X[:, 0], X[:, 1]) 23plt.contour(x, y, Probs) 24plt.xlim(-10, 10) 25plt.ylim(-10, 10) 26plt.show()
試したこと
下記の様にreshape部分を書き換えると上記エラーは脱しますが、
代わりに別のエラー(データ数不一致?)が発生してしまいました。
変更前:X = np.array([x, y]).reshape(2, -1).transpose()
変更後:X = np.array([x, y]).reshape(4, -1).transpose()
変更後のエラーメッセージ:
ValueError Traceback (most recent call last) <ipython-input-165-d6d42af485ca> in <module> 18 19 probs = model.predict_proba(X) ---> 20 Probs = probs.reshape(100, 100) 21 colors = ["red", "blue", "green"] 22 plt.scatter(X[:, 0], X[:, 1]) ValueError: cannot reshape array of size 15000 into shape (100,100)
回答2件
あなたの回答
tips
プレビュー