前提・実現したいこと
cancerデータセットを用いて、データセットを訓練データとテストデータに分割し、訓練セットに対する性能とテストセットに対する性能を近傍点の数に対して評価したいです。
オライリー社の「Pythonで始める機械学習」の2章の2.3.2.2の箇所です。
発生している問題・エラーメッセージ
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-35-2bc7850ca05e> in <module> 12 #モデルを構築 13 clf=KNeighborsClassifier(n_neighbors=n_neighbors) ---> 14 clf.fit(X_train,y_train) 15 #訓練セット精度を記録 16 training_accuracy.append(clf.score(X_train,y_train)) ~\Anaconda3new\lib\site-packages\sklearn\neighbors\base.py in fit(self, X, y) 890 """ 891 if not isinstance(X, (KDTree, BallTree)): --> 892 X, y = check_X_y(X, y, "csr", multi_output=True) 893 894 if y.ndim == 1 or y.ndim == 2 and y.shape[1] == 1: ~\Anaconda3new\lib\site-packages\sklearn\utils\validation.py in check_X_y(X, y, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, multi_output, ensure_min_samples, ensure_min_features, y_numeric, warn_on_dtype, estimator) 727 y = y.astype(np.float64) 728 --> 729 check_consistent_length(X, y) 730 731 return X, y ~\Anaconda3new\lib\site-packages\sklearn\utils\validation.py in check_consistent_length(*arrays) 203 if len(uniques) > 1: 204 raise ValueError("Found input variables with inconsistent numbers of" --> 205 " samples: %r" % [int(l) for l in lengths]) 206 207 ValueError: Found input variables with inconsistent numbers of samples: [426, 19]
該当のソースコード
from sklearn.datasets import load_breast_cancer cancer=load_breast_cancer() X_train,X_test,y_trian,y_test=train_test_split(cancer.data,cancer.target,stratify=cancer.target,random_state=66) training_accuracy=[] test_accuracy=[] #n_neighborsを1から10まで試す neighbors_settings=range(1,11) for n_neighbors in neighbors_settings: #モデルを構築 clf=KNeighborsClassifier(n_neighbors=n_neighbors) clf.fit(X_train,y_train) #訓練セット精度を記録 training_accuracy.append(clf.score(X_train,y_train)) #汎化精度を記録 test_accuracy.append(clf.score(X_test,y_test)) plt.plot(neighbors_settings,training_accuracy,label="training accuracy") plt.plot(neighbors_settings,test_accuracy,label="test accuracy") plt.ylabel("Accuracy") plt.xlabel("n_neighbors") plt.legend()
試したこと
補足情報(FW/ツールのバージョンなど)
Anaconda3 Python
あなたの回答
tips
プレビュー