ぺーぺーSEのブログ

備忘録・メモ用サイト。

機械学習で使うデータセット

機械学習のトレーニング、CVセット、テストセットで利用できそうなデータセットをまとめる。
※随時更新すると思う。

Bostonデータセット/Housingデータセット

機械学習ライブラリ『scikit-learn』は、線形回帰などで使用するデータセット『Bostonデータセット』を持っている。
ボストンの物件の価格にその物件の人口統計に関する情報(以下)が付随したもの。

  • CRIM・・・犯罪発生率(人口単位)
  • ZN・・・25,000平方フィート以上の住宅区画の割合
  • INDUS・・・非小売業の土地面積の割合(人口単位)
  • CHAS・・・チャールズ川沿いかどうか(1:Yes、0:No)
  • NOX・・・窒素酸化物の濃度(pphm単位)
  • RM・・・1戸あたりの平均部屋数
  • AGE・・・1940年よりも前に建てられた家屋の割合
  • DIS・・・ボストンの主な5つの雇用圏までの重み付きの郷里
  • RAD・・・幹線道路へのアクセス指数
  • TAX・・・10,000ドルあたりの所得税率
  • PTRATIO・・・教師あたりの生徒の数(人口単位)
  • B・・・アフリカ系アメリカ人居住者の割合(人口単位)
  • LSTAT・・・低所得者の割合

データ間で相関があることが期待できるので、線形回帰などで使用できそう。
ロードと簡単なデータの表示方法は以下。

import numpy as np
import pandas as pd
from sklearn import datasets
from matplotlib import pyplot as plt
import seaborn as sns

boston = datasets.load_boston()

type(boston)
# sklearn.datasets.base.Bunch
type(boston.DESCR) # データセットの説明
# str
type(boston.data) # 物件に関する様々なデータ
# numpy.ndarray
type(boston.feature_names) # 物件データのカラム名
# numpy.ndarray
type(boston.target) # 物件の値段
# numpy.ndarray

data = np.c_[boston.data, boston.target]
col = np.append(boston.feature_names, 'MEDV')
df = pd.DataFrame(data, columns = col)
df.head()

NumPyのN次元配列(N-d array)型でデータを持っている。
上記では、boston.targetをMEDV(住宅価格の中央地(単位 1,000ドル))としてDataFrameに追加して表示している。
seabornでの表示は以下。
(seabornはmatplotlibを拡張した統計グラフ描画ライブラリ)

sns.set(style='whitegrid', context='notebook')
cols = ['LSTAT', 'INDUS', 'NOX', 'RM', 'MEDV']
sns.pairplot(df[cols], size=2.5)
plt.show()
# 対角成分には各変数のヒストグラムが
# 非対角成分には縦軸と横軸にそれぞれの変数を取った散布図がプロットされる

部屋数と値段の散布図表示は以下。

rooms = df['RM']
house_prices = df['MEDV']
plt.scatter(rooms, house_prices, color='b')
plt.xlabel('RM')
plt.ylabel('MEDV')
plt.autoscale()
plt.grid()
plt.show()

Bostonデータセット参考

Irisデータセット

機械学習ライブラリ『scikit-learn』は、分類などで使用するデータセット『Irisデータセット』を持っている。
Iris(植物のアヤメ)に関するデータセットで、「萼片(がくへん)の長さ」「萼片の幅」「花びらの長さ」「花びらの幅」に関する特長量と、アヤメの種類(0:setosa、1:versicolor、2:virginica)の値を持つ。
データが持つ特長量から花の種類が決定しそうなので、分類などで使用できそう。
ロードの方法等は以下。

import numpy as np
from sklearn import datasets
from matplotlib import pyplot as plt
%pylab inline --no-import-all

iris = datasets.load_iris()
type(iris)
# sklearn.datasets.base.Bunch
type(iris.DESCR) # データセットの説明
# str
type(iris.data) # アヤメに関する特長量
# numpy.ndarray
type(iris.feature_names) # 特長良のカラム名
# list
type(iris.target) # アヤメの種類(値)
# numpy.ndarray
type(iris.target_names) # アヤメの種類(名)
# numpy.ndarray

下記のコードで散布図に描画できる。

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データセット参考

MNIST(エムニスト)

MNISTは、手書きの数字画像セットで、計70,000枚の画像が含まれており、そのうち60,000枚はトレーニングセットで10,000枚はテストセット。サイズはそれぞれ 28 x 28 ピクセル。各ピクセル値は 0 (白) ~ 255 (黒) の値。

参考

AWS のパブリックデータセット

AWSでは無料でパブリックデータセットを提供している。
CSVやExcelフォーマットでの提供が多い。