前提・実現したいこと
下記の散布図においてK-meansを用いてクラスタリングを行いたいです。
しかし自分では2次元配列で入力しているつもりなのですが、
1次元配列になっているというエラーが出ていて困っています。
発生している問題・エラーメッセージ
ValueError Traceback (most recent call last) <ipython-input-17-2d81c6cf963b> in <module> 23 24 ---> 25 t(1) <ipython-input-17-2d81c6cf963b> in t(n) 14 def t(n): 15 km = KMeans(n_clusters=3,init='random',n_init=10,max_iter=n,tol=1e-04,random_state=1) ---> 16 cluster = km.fit_predict(X) 17 plt.scatter(data[cluster==0,0],data[cluster==0,1],c='red',marker='.',label='1') 18 plt.scatter(data[cluster==1,0],data[cluster==1,1],c='black',marker='.',label='2') ~\anaconda3\lib\site-packages\sklearn\cluster\_kmeans.py in fit_predict(self, X, y, sample_weight) 1103 Index of the cluster each sample belongs to. 1104 """ -> 1105 return self.fit(X, sample_weight=sample_weight).labels_ 1106 1107 def fit_transform(self, X, y=None, sample_weight=None): ~\anaconda3\lib\site-packages\sklearn\cluster\_kmeans.py in fit(self, X, y, sample_weight) 989 ) 990 --> 991 X = self._validate_data(X, accept_sparse='csr', 992 dtype=[np.float64, np.float32], 993 order='C', copy=self.copy_x, ~\anaconda3\lib\site-packages\sklearn\base.py in _validate_data(self, X, y, reset, validate_separately, **check_params) 418 f"requires y to be passed, but the target y is None." 419 ) --> 420 X = check_array(X, **check_params) 421 out = X 422 else: ~\anaconda3\lib\site-packages\sklearn\utils\validation.py in inner_f(*args, **kwargs) 71 FutureWarning) 72 kwargs.update({k: arg for k, arg in zip(sig.parameters, args)}) ---> 73 return f(**kwargs) 74 return inner_f 75 ~\anaconda3\lib\site-packages\sklearn\utils\validation.py in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, estimator) 618 # If input is 1D raise error 619 if array.ndim == 1: --> 620 raise ValueError( 621 "Expected 2D array, got 1D array instead:\narray={}.\n" 622 "Reshape your data either using array.reshape(-1, 1) if " ValueError: Expected 2D array, got 1D array instead: array=[930.49374428 930.49374864 930.49376025 930.49377914 930.50016198 930.50047003 930.51001972 930.51050733]. Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
該当のソースコード
Python
1import numpy as np 2import matplotlib.pyplot as plt 3from sklearn.cluster import KMeans 4 5 6X,Y =[ [930.49374428, 930.49374864, 930.49376025, 930.49377914, 930.50016198, 930.50047003, 930.51001972, 930.51050733],[0.00435079, 0.00435072, 0.00435065, 0.00435058, 0.00434775, 0.00434768, 0.00434594, 0.00434587]] 7 8 9plt.scatter(X,Y) 10plt.grid() 11plt.show() 12 13 14def t(n): 15 km = KMeans(n_clusters=3,init='random',n_init=10,max_iter=n,tol=1e-04,random_state=1) 16 cluster = km.fit_predict(X) 17 plt.scatter(data[cluster==0,0],data[cluster==0,1],c='red',marker='.',label='1') 18 plt.scatter(data[cluster==1,0],data[cluster==1,1],c='black',marker='.',label='2') 19 plt.scatter(km.cluster_centers_[:,0],km.cluster_centers_[:,1],marker='X',c='blue',label='centroids') 20 plt.legend() 21 plt.grid() 22 plt.show() 23 24 25t(1)
補足情報(FW/ツールのバージョンなど)
windows 64bit
Anaconda
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/25 16:05