質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

Q&A

解決済

2回答

1380閲覧

混合ガウスモデルを使って図をプロットしたい

退会済みユーザー

退会済みユーザー

総合スコア0

MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

0グッド

0クリップ

投稿2020/06/20 02:19

前提・実現したいこと

混合ガウスモデルを使ってアヤメのデータに等高線を引きたいです。
アヤメのデータの図に等高線をプロットしたいのですがエラーが出てきてしまい、どのようにして特徴量を変更したらいいのかわかりません。

発生している問題・エラーメッセージ

ValueError Traceback (most recent call last) <ipython-input-13-eb81e5c63a46> in <module> 49 X1, Y = np.meshgrid(x, y) 50 XX = np.array([X1.ravel(), Y.ravel()]).T ---> 51 Z = -gmc.score_samples(XX) 52 Z = Z.reshape(X1.shape) 53 ~\anaconda3\lib\site-packages\sklearn\mixture\_base.py in score_samples(self, X) 334 """ 335 check_is_fitted(self) --> 336 X = _check_X(X, None, self.means_.shape[1]) 337 338 return logsumexp(self._estimate_weighted_log_prob(X), axis=1) ~\anaconda3\lib\site-packages\sklearn\mixture\_base.py in _check_X(X, n_components, n_features, ensure_min_samples) 59 raise ValueError("Expected the input data X have %d features, " 60 "but got %d features" ---> 61 % (n_features, X.shape[1])) 62 return X 63 ValueError: Expected the input data X have 4 features, but got 2 features

該当のソースコード

python

1from sklearn import cluster 2from sklearn.cluster import AgglomerativeClustering 3import numpy as np 4import seaborn as sns 5import pandas as pd 6import matplotlib 7import matplotlib.pyplot as plt 8from matplotlib.colors import LogNorm 9from sklearn import mixture 10 11 12with open("iris.csv", 'r') as file: 13 14 header = file.readline() 15 16 data = np.loadtxt(file, delimiter=',', usecols=(0,1,2,3,4)) 17 18 19 20X = data[:,0:4] 21 22y = data[:,4] 23 24 25 26gmc = mixture.GaussianMixture(n_components=3, covariance_type='full') 27 28gmc.fit(X) 29 30yy=gmc.fit_predict(X) 31 32plt.scatter(X[yy == 0][:,2], 33 X[yy == 0][:,3], 34 c='green', 35 label='versicolor') 36plt.scatter(X[yy == 1][:,2], 37 X[yy == 1][:,3], 38 c='yellow', 39 label='setosa') 40plt.scatter(X[yy == 2][:,2], 41 X[yy == 2][:,3], 42 c='red', 43 label='versinica') 44 45 46 47x = np.linspace(0., 7.) 48y = np.linspace(0.,3.) 49X1, Y = np.meshgrid(x, y) 50XX = np.array([X1.ravel(), Y.ravel()]).T 51Z = -gmc.score_samples(XX) 52Z = Z.reshape(X1.shape) 53 54CS = plt.contour(X1, Y, Z, norm=LogNorm(vmin=1.0, vmax=1000.0), 55 levels=np.logspace(0, 3, 10)) 56CB = plt.colorbar(CS, shrink=0.8, extend='both') 57plt.scatter(X1_train[:, 0], X1_train[:, 1], .8) 58 59plt.title('GMM') 60plt.axis('tight') 61 62 63 64 65 66 67 68 69 70plt.grid() 71 72plt.legend(loc="upper left") 73plt.xlabel("petal length") 74plt.ylabel("petal width") 75plt.show() 76 77 78 79print("Original : {0}".format(y.astype(np.int64))) 80 81print("Clustering: {0}".format(yy))

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

特徴量の数と等高線のメッシュ作成で使用している次元が一致していないことが原因です。したがって

  • 特徴量の数を4つから2つに減らす
  • メッシュの次元を2次元から4次元に増やす

のどちらかの対処が必要です。

簡単に修正するには、前者の方式で、特徴量の数を下記のように4つから2つに減らして下さい。

python

1gmc.fit(X[:,0:2]) 2yy = gmc.fit_predict(X[:, 0:2])

一応、後者の4次元メッシュを作る方も示します。

python

1x = np.linspace(0.0, 8.0) 2y = np.linspace(0.0, 5.0) 3z = np.linspace(0.0, 8.0) 4w = np.linspace(0.0, 5.0) 5mx, my, mz, mw = np.meshgrid(x, y, z, w, indexing="ij") 6XX = np.array([mx.ravel(), my.ravel(), mz.ravel(), mw.ravel()]).T 7Z = -gmc.score_samples(XX)

この場合、等高線を作図する際には

python

1CS = plt.contour( 2 mx[:, :, 0, 0], 3 my[:, :, 0, 0], 4 Z[:, :, 0, 0], 5 norm=LogNorm(vmin=1.0, vmax=1000.0), 6 levels=np.logspace(0, 3, 10), 7)

のように2次元平面となるよう指定する必要があります。

参考URL

投稿2020/06/20 06:05

yymmt

総合スコア1615

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/06/20 11:40

丁寧に説明ありがとうございます。前者の方法も校舎の方法もできました。ありがとうございます。
guest

0

ValueError: Expected the input data X have 4 features, but got 2 features
このエラー文から察するに、XXは4次元配列でないといけないのに、2次元配列のためエラーが出ているようです。
XXのデータがこの形式で正しいか、もう一度確認する必要があると思われます。

投稿2020/06/20 05:48

Penpen7

総合スコア698

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/06/20 11:41

わかりました。ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問