前提・実現したいこと
scikit-fuzzyをインストールして、Fuzzy c-meansを動かしたいと考えています。
しかし、結果は出せるものの、下記にあるサイトのような、plotができません。
以下のようなエラーが出てきました。
'c' argument has 200 elements, which is not acceptable for use with 'x' with size 200, 'y' with size 200.
発生している問題・エラーメッセージ
'c' argument has 200 elements, which is not acceptable for use with 'x' with size 200, 'y' with size 200.
該当のソースコード
python
1import numpy as np 2import matplotlib.pyplot as plt 3from skfuzzy.cluster import cmeans 4 5def target_to_color(target): 6 if type(target) == np.ndarray: 7 return (target[0], target[1]) 8 else: 9 return "rgb"[target] 10 11def plot_data(data, target): 12 plt.figure() 13 plt.scatter(data[:,0], data[:,1], c=[target_to_color(t) for t in target]) 14 15def main(data): 16 cm_result=cmeans(data.T, 2, 5, 0.003, 1000) 17 plot_data(data, cm_result[1].T)
試したこと
以下のサイトを見ながら、書いたのですができませんでした。
https://www.haya-programming.com/entry/2018/03/03/202558
他にも、下記のようなコードも書いてみたのですが、サイトのような、帰属度によってplotの色(グラデーションぽい感じ)を変えることができません。
def cluster_fcm(data,m):
cm_result=cmeans(data.T,2,m,0.003,1000) cluster_numeber = np.argmax(cm_result[1], axis=0) unique_labels =set(np.unique(cluster_numeber)) colors = plt.cm.Spectral(np.linspace(0, 1, len(unique_labels))) for k, color in zip(unique_labels, colors): if k == -1: color = 'k' class_member_mask = (cluster_numeber == k) xy = data[class_member_mask] plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=color, markeredgecolor='k', markersize=7) plt.rcParams['figure.figsize'] = (10,10) plt.show()
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー