sklearnのkmeansでMNIST文字の分類がしたいです。基本的なことなんですが、正解率の確認はどのようにすればよいでしょうか?(以下の方法では何がだめでしょうか?)
python
1from sklearn.datasets import load_digits 2from sklearn.cluster import KMeans 3digits = load_digits() 4print(digits.data.shape) 5model = KMeans(n_clusters=10) 6model.fit(digits.data) 7labels = model.labels_ 8centers = model.cluster_centers_ 9 10centers = centers.reshape(10,8,8) 11 12fig, ax = plt.subplots(2,5,figsize=(8,3)) 13for axi, center in zip(ax.flat, centers): 14 axi.imshow(center, cmap='gray')
グラフで見ると、このようにkmeansのcluster_centerは比較的文字の特徴をつかんでいることがわかります。
しかし、
python
1from scipy.stats import mode 2labels2 = np.zeros_like(labels.ravel()) 3for i in range(10): 4 mask = (labels.ravel()==i) 5 labels2[mask] ==mode(digits.target[mask])[0] 6from sklearn.metrics import accuracy_score 7accuracy_score(digits.target, labels2)
これで結果をみると正解率が0.09905397885364496とかなり低かったです。なにがおかしいのでしょうか。
回答1件
あなたの回答
tips
プレビュー