連載
» 2022年07月11日 05時00分 公開

Diabetes Dataset:糖尿病(年齢/血圧/血糖値などの10項目)の表形式データセットAI・機械学習のデータセット辞典

データセット「Diabetes」について説明。442件の糖尿病の「表形式データ(年齢/血圧/血糖値などの10項目)」+「ラベル(1年後の糖尿病進行度)」が無料でダウンロードでき、回帰問題などのディープラーニングや統計学/データサイエンスに利用できる。scikit-learnにおける利用コードも紹介。

[一色政彦,デジタルアドバンテージ]
「AI・機械学習のデータセット辞典」のインデックス

連載目次

データセット解説

 Diabetesデータセット糖尿病データセット)は、「年齢/血圧/血糖値」などの10個の特徴量と、1年後の糖尿病の進行度を示すラベルで構成される表形式データセット(=構造化データセット)である(図1)。

図1 Diabetesデータセットの内容例 図1 Diabetesデータセットの内容例
データセットの配布元: 「https://www4.stat.ncsu.edu/~boos/var.select/diabetes.html」。

 Diabetesデータセットは、主に回帰(具体的には「1年後の糖尿病の進行度の予測」)を目的とした統計学/機械学習/ディープラーニングなどの練習で活用できる。

 説明変数となる10個の特徴量は以下の通り。下記の箇条書きで示す各項目の意味説明は、筆者が参考にしたscikit-learnのサイトによると不明確な可能性があるとのこと(特にLTG)。よって本データセットは、現実のデータとしてではなく、あくまで練習用のデータとして厳密な意味を求めずに使う方が無難である。

  • age: 年齢
  • sex: 性別
  • bmi: BMI(肥満度)
  • bp: 平均血圧
  • s1: TC(血液中の総コレステロール値)
  • s2: LDL(低比重リポタンパク質、悪玉コレステロール)
  • s3: HDL(高比重リポタンパク質、善玉コレステロール)
  • s4: TCH(=TC÷HDL=総コレステロール値/善玉コレステロール)
  • s5: LTG(血液中の中性脂肪値の対数)
  • s6: GLU(血糖値)

 なお、図1に表示されている上記10個の各値は、「平均0ユークリッドノルム(L2ノルム)1(=各値の二乗を全て合計した値が1、つまりsum(x2)=1)」に正規化された値となっているので注意してほしい(この正規化は一種の標準化である。厳密な意味での標準化では、ユークリッドノルムではなく、標準偏差もしくは分散が1となる。より具体的には、標準偏差ではデータ件数で割るが、このユークリッドノルムでは割っていないという違いがある。別の見方をすると、ここで計算されている値は、「標準化された値×データ件数」の値が計算されているということになる)。

 また、目的変数(target variable)となるラベル(=正解を示す教師データ)は、

  • ベースラインとなる測定時から1年後の糖尿病の進行度を示す値

となっている。

 データ数は、合計で442件である。

引用のための情報

 このデータセットは、基本的に自由に使用できる(ライセンスは指定されていない)。

 データセットを引用する際に使える情報を以下にまとめておく。

利用方法

 実際にDiabetesデータセットを使うには、ライブラリscikit-learnが提供する機能を利用することをお勧めする。ムダな作業を省いて、効率的に使えるためだ。なお、TensorFlow/Keras/PyTorchにはDiabetesデータセットは用意されていなかった。

 以下に、scikit-learnで「どのようなコードを書くとDiabetesデータセットが使えるか」の典型的なコードを簡単に示しておく。

scikit-learn

# !pip install scikit-learn  # ライブラリ「scikit-learn」をインストール

from sklearn.datasets import load_diabetes

diabetes = load_diabetes()

リスト1 scikit-learnでDiabetesデータセットを利用する基本的なコード

 sklearn.datasets.load_diabetes()関数を呼び出せばよい。戻り値として(sklearn.utils.Bunch型の)辞書オブジェクトを返す。その配下の、

  • dataにデータが
  • targetにラベル(目的変数の値)が
  • feature_namesに特徴量名が
  • 関数の引数にas_frame=Trueを含めた場合は、frameに全11列のpandasデータフレーム(target列は最後の列)が

格納されている。各項目の値は前述の方法(平均0、ユークリッドノルム1)で正規化された値となっている。scikit-learnのバージョン1.1以降では、関数の引数にscaled=Falseを指定することで、正規化されていない元の値を取得することもできる。

「AI・機械学習のデータセット辞典」のインデックス

AI・機械学習のデータセット辞典

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。