らんだむな記憶

blogというものを体験してみようか!的なー

既製の分類器

ud730ネタ。

off-the-shelf classifierとしてsklearn.linear_modelを使う。

from sklearn.linear_model import LogisticRegression

# でっかいデータセットから1000サンプルだけ訓練データを取り出す。
train_dataset = all_data["train_dataset"]
train_labels  = all_data["train_labels"]
mini_len = 1000
mini_train        = train_dataset[0:mini_len]
mini_train_labels = train_labels[0:mini_len]

# ロジスティック回帰で訓練データにフィッティングさせる。
classifier = LogisticRegression()
# 28x28の画像データの長さ1000の配列を、画像データを1次元化した長さ1000の配列にreshape
X = mini_train.reshape(len(mini_train), 28*28)
y = mini_train_labels
classifier.fit(X, y)

# テストデータをとってきてみて、頭の100個で予測結果を出す。
test_dataset = all_data["test_dataset"]
d = test_dataset.reshape(len(test_dataset), 28*28)
test_labels  = all_data["test_labels"]
cnt = 0
ok_cnt = 0
for i in range(100):
    predicted_value = classifier.predict(d[i].reshape(1,-1))
    #print("predicted:", predicted_value, ", and expected:", test_labels[i])
    if predicted_value == test_labels[i]:
        ok_cnt += 1
    cnt += 1
print("accuracy:", ok_cnt/cnt)
accuracy: 0.82

わーぉ、意味も分からずに機械学習できちゃったぞ!

まぁ、なんかお叱りも出てるけどよく分からんよと思ったので「.reshape(1,-1)」を付け加えた。

/xxx/anaconda3/envs/py35/lib/python3.5/site-packages/sklearn/utils/validation.py:386: DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and willraise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.
  DeprecationWarning)