mlbench

作者

データサイエンス関連基礎調査WG

公開

2025年8月1日

パッケージの概要

mlbenchには、機械学習モデルの性能を比較・評価するベンチマーク課題用のデータセット、およびデータを生成するための関数が用意されています。

データセットは、例えばBostonHousing等の有名なデータセットや、UCIリポジトリ[1] (カリフォルニア大学アーバイン校が公開している機械学習データセットリポジトリ)の一部のデータセット等が含まれています。
また、ベンチマーク課題用のテストデータを生成する関数には、例えば複数クラスの2次元正規分布を生成するmlbench.2dnormals関数や、螺旋データを生成するmlbench.spiral関数等、様々な種類の関数が用意されています。

なお、mlbenchに用意されているこれらのデータ生成用の関数は、mlbench.[データを示す名称]という形式の関数名になっています。一方、mlbenchに格納されているデータセットそのものは、BostonHousingやZooのように、mlbench.がついておらず大文字から始まる名称なので、データセットとデータ生成関数は名前で区別することができます。

パッケージの使用例

データセット

mlbenchには、様々なベンチマーク課題用のデータセットが用意されています。 データセットは以下のように、データセット名を指定してdata.frameとしてロードすることができます。

library(mlbench)
data("BostonHousing", package = "mlbench")
str(BostonHousing)
'data.frame':   506 obs. of  14 variables:
 $ crim   : num  0.00632 0.02731 0.02729 0.03237 0.06905 ...
 $ zn     : num  18 0 0 0 0 0 12.5 12.5 12.5 12.5 ...
 $ indus  : num  2.31 7.07 7.07 2.18 2.18 2.18 7.87 7.87 7.87 7.87 ...
 $ chas   : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
 $ nox    : num  0.538 0.469 0.469 0.458 0.458 0.458 0.524 0.524 0.524 0.524 ...
 $ rm     : num  6.58 6.42 7.18 7 7.15 ...
 $ age    : num  65.2 78.9 61.1 45.8 54.2 58.7 66.6 96.1 100 85.9 ...
 $ dis    : num  4.09 4.97 4.97 6.06 6.06 ...
 $ rad    : num  1 2 2 3 3 3 5 5 5 5 ...
 $ tax    : num  296 242 242 222 222 222 311 311 311 311 ...
 $ ptratio: num  15.3 17.8 17.8 18.7 18.7 18.7 15.2 15.2 15.2 15.2 ...
 $ b      : num  397 397 393 395 397 ...
 $ lstat  : num  4.98 9.14 4.03 2.94 5.33 ...
 $ medv   : num  24 21.6 34.7 33.4 36.2 28.7 22.9 27.1 16.5 18.9 ...

以下は格納されているデータセットの一覧です。(バージョン2.1.5時点です。)
クラス分類用のデータや回帰用のデータ、特徴量が連続変数のデータやカテゴリ変数のデータ、クラスに偏りがあるデータなど、様々な種類の機械学習のベンチマーク課題に使用できるようなデータが格納されています。 各データのカラムやデータソース等の詳細は、mlbenchのリファレンスをご参照ください。

表 25.1
データセット名 概要 課題の種別 レコード数 カラム数
BostonHousing 1970年調査によるボストン506区画の住宅価格データ 回帰 506 14
BreastCancer 乳がんの事例に関するデータから良性/悪性に分類 2クラス分類 699 11
DNA DNAのスプライス・ジャンクションの塩基配列データを、エクソン-イントロン/イントロン―エクソン/それ以外に分類 多クラス分類 3,186 181
Glass 7種類のガラスに対する化学分析のデータ 多クラス分類 214 10
HouseVotes84 1984年のアメリカ合衆国議会の16の投票記録から民主党/共和党を分類 2クラス分類 435 17
Ionosphere 電離層のレーダー・リターンデータをgood/badに分類 2クラス分類 351 35
LetterRecognition アルファベットの画像から計算された特徴量をもとにA-Zを分類 多クラス分類 20,000 17
Ozone 1976年のロサンゼルスのオゾン汚染データ 回帰 366 13
PimaIndiansDiabetes ピマ・インディアン女性のデータから糖尿病発症あり/なしを分類 2クラス分類 768 9
Satellite ランドサット衛星の衛星画像データを土壌、植生等のクラスに分類 多クラス分類 6,435 37
Servo サーボシステムの応答時間の予測課題(ただし、mlbenchでは応答時間が順序尺度に変換されている) 多クラス分類 167 5
Shuttle スペースシャトルの飛行中の状態を7種類に分類 多クラス分類 58,000 10
Sonar ソナー信号が岩石からの反射か、金属円筒からの反射かを識別 2クラス分類 208 61
Soybean 19クラスのダイズの病害を分類 多クラス分類 683 36
Vehicle 車のシルエットに関する特徴量から4車種に分類 多クラス分類 846 19
Vowel イギリス英語の11種類の母音を分類 多クラス分類 990 11
Zoo 毛の有無、羽の有無等、主に論理値の特徴量から動物の種類を分類 多クラス分類 101 17

データ生成関数

mlbenchには前項で紹介したデータセットに加え、ベンチマーク課題用のデータを自ら生成するための関数も用意されています。

以下は、指定したクラス数のクラスごとに、2次元空間上で正規分布するデータを生成する、mlbench.2dnormalsの使用例です。 これらの生成関数によるデータは、R標準のS3 classという機能を用いて、as.data.frame関数とplot関数が適切に動作するように実装されています。 すなわち、List形式で返される生成データを引数として、as.data.frame関数によるデータフレームへ変換、およびplot関数による生成データの種類に応じたグラフのプロットができるようになっています。

# 乱数シードの設定
set.seed(123)

# 2次元正規分布データの生成
## cl=2が2クラスを意味する
## デフォルトでは原点を中心に、半径r=(cl)^(1/2)の円上に各クラスの中心を配置する
p <- mlbench.2dnormals(n=1000, cl=2, sd=1)

# 生成したデータはmlbench.2dnormals classのList形式
str(p)
List of 2
 $ x      : num [1:1000, 1:2] 0.3981 0.0063 2.0268 -0.2489 -0.5092 ...
 $ classes: Factor w/ 2 levels "1","2": 1 1 1 2 1 2 2 2 1 1 ...
 - attr(*, "class")= chr [1:2] "mlbench.2dnormals" "mlbench"
# data.frameへの変換
str(as.data.frame(p))
'data.frame':   1000 obs. of  3 variables:
 $ x.1    : num  0.3981 0.0063 2.0268 -0.2489 -0.5092 ...
 $ x.2    : num  0.179 0.6927 0.0979 -0.3729 2.1204 ...
 $ classes: Factor w/ 2 levels "1","2": 1 1 1 2 1 2 2 2 1 1 ...
# mlbench.2dnormals classのplot
plot(p)

さらに、mlbenchの生成データに対して適用可能なベイズ識別器、bayesclass関数が用意されています。内部的には、引数として渡す生成データの種類によって、適切な識別関数の実装が呼び出されています。

以下は、mlbench.2dnormalsで生成した2クラス分類用のデータ対する、bayesclass関数による分類結果をプロットしています。 mlbench.2dnormalsの生成データの場合、いずれのクラスも同分散の2次元正規分布に従うため、個々のデータは、各クラスの正規分布の中心(期待値)のうち、最も距離の近い中心を持つクラスへと分類されることになります。 そのため、上のグラフで示した真のクラスと、下図の分類結果とを比較すると、グラフ中央付近の両クラスのデータが重なる領域では、誤分類が発生していることがわかります。

plot(p$x, col=as.numeric(bayesclass(p)))

上で紹介したmlbench.2dnormals以外にも、mlbenchでは様々なデータ生成用の関数が用意されています。 以下ではいくつかの例をplotしています。 これらの例に挙げたもの以外を含む、関数の一覧や各関数の詳細については、mlbenchのリファレンスをご参照ください。

Spiral
plot(mlbench.spirals(n=200, sd=0.05))

Circle
plot(mlbench.circle(n=1000))

Shapes
plot(mlbench.shapes(n=1000))

Smiley
plot(mlbench.smiley(n=1000))

参考資料

[1] UC Irvine Machine Learning Repository.