ぺーぺーSEのテックブログ

備忘録用メモサイト

RSSを購読する

Pythonで機械学習 データセット編

ここでは、機械学習で利用するデータセットを紹介する。

パッケージの導入

このブログにある Python コードを実行するためのパッケージをインストールする。

1
pip install jupyter scikit-learn matplotlib scipy

実行環境は Jupyter Notebook を想定。実行方法は jupyter notebook
matplotlib の使い方は以下を参照。

digits データセット

digits データセットは手書き数字のデータセットで、8x8 ピクセルのモノクロ画像 1,797 枚。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import matplotlib.pyplot as plt
from sklearn import datasets
# digits データセットをロード
digits = datasets.load_digits()
type(digits) # sklearn.datasets.base.Bunch
dir(digits) # ['DESCR', 'data', 'images', 'target', 'target_names']
type(digits.DESCR) # データセットの説明 # str
type(digits.data) # numpy.ndarray
type(digits.data) # numpy.ndarray
print(digits.data.shape) # (1797, 64) # 8x8ではなく8x8=64の形式の1次元ベクトルデータ
type(digits.images) # numpy.ndarray
print(digits.images.shape) # (1797, 8, 8) # 8x8の行列データ
print(digits.data == digits.images.reshape(digits.images.shape[0], -1)) # True ..., True
type(digits.target) # 番号の種類のID # numpy.ndarray
print(digits.target.shape) # 1,797
type(digits.target_names) # 番号の種類のIDに対応する番号 # numpy.ndarray
print(digits.target_names) # [0 1 2 3 4 5 6 7 8 9]
# 画像データを matplotlib で表示
# 1 番目のキャンバスを作成
plt.figure(1)
# digits データセットから先頭 10 枚を取得
# label にはその画像の数字、imgには画像が入る
for label, img in zip(digits.target[:10], digits.images[:10]):
# キャンバスを 2 行 5 列に分割した label+1 番目のグラフ
plt.subplot(2, 5, label + 1)
# 軸の設定を off
plt.axis('off')
# 画像をグレースケールで subplot した箇所に貼り付け
plt.imshow(img, cmap=plt.cm.gray_r, interpolation='nearest')
# 画像のタイトルを label (その数字)で設定
plt.title('Digit: {0}'.format(label))
# キャンバスの描画
plt.show()

digits データセット

iris データセット

iris データセットは植物の「あやめ」に関するデータセット。
「萼片(がくへん)の長さ」「萼片の幅」「花びらの長さ」「花びらの幅」に関する特長量と、アヤメの種類(0:setosa、1:versicolor、2:virginica)の値を持つ 50 個のデータセットである。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
# iris データセットをロード
iris = datasets.load_iris()
type(iris) # sklearn.datasets.base.Bunch
dir(iris) # ['DESCR', 'data', 'feature_names', 'target', 'target_names']
type(iris.DESCR) # データセットの説明 # str
type(iris.data) # アヤメに関する特長量 # numpy.ndarray
type(iris.feature_names) # 特長良のカラム名 # list
print(iris.feature_names) # ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
type(iris.target) # アヤメの種類のID # numpy.ndarray
type(iris.target_names) # アヤメの種類のIDに対応する名前 # numpy.ndarray
print(iris.target_names) # ['setosa', 'versicolor', 'virginica']
# 画像を matplotlib で表示
# 1 番目のキャンバスを作成
plt.figure(1)
features = iris.data
target = iris.target
target_names = iris.target_names
labels = target_names[target]
#
setosa_petal_length = features[labels == 'setosa', 2]
setosa_petal_width = features[labels == 'setosa', 3]
setosa = np.c_[setosa_petal_length, setosa_petal_width]
versicolor_petal_length = features[labels == 'versicolor', 2]
versicolor_petal_width = features[labels == 'versicolor', 3]
versicolor = np.c_[versicolor_petal_length, versicolor_petal_width]
virginica_petal_length = features[labels == 'virginica', 2]
virginica_petal_width = features[labels == 'virginica', 3]
virginica = np.c_[virginica_petal_length, virginica_petal_width]
#
plt.scatter(setosa[:, 0], setosa[:, 1], color='red')
plt.scatter(versicolor[:, 0], versicolor[:, 1], color='blue')
plt.scatter(virginica[:, 0], virginica[:, 1], color='green')
#
plt.show()

iris データセット

オリジナルデータを CSV で扱う

CSV形式のデータを取り扱う場合、基本的に以下の4通りある。

  1. テキストファイル読み込む
  2. Python csv モジュールを使う
  3. NumPy モジュールを使う
  4. pandas モジュールを使う