Diabetes Dataset:糖尿病(年齢/血圧/血糖値などの10項目)の表形式データセット:AI・機械学習のデータセット辞典
データセット「Diabetes」について説明。442件の糖尿病の「表形式データ(年齢/血圧/血糖値などの10項目)」+「ラベル(1年後の糖尿病進行度)」が無料でダウンロードでき、回帰問題などのディープラーニングや統計学/データサイエンスに利用できる。scikit-learnにおける利用コードも紹介。
データセット解説
Diabetesデータセット(糖尿病データセット)は、「年齢/血圧/血糖値」などの10個の特徴量と、1年後の糖尿病の進行度を示すラベルで構成される表形式データセット(=構造化データセット)である(図1)。
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件である。
引用のための情報
このデータセットは、基本的に自由に使用できる(※ライセンスは指定されていない)。
データセットを引用する際に使える情報を以下にまとめておく。
- 論文著者: Bradley Efron, Trevor Hastie, Iain Johnstone and Robert Tibshirani
- タイトル: Least Angle Regression, Annals of Statistics (with discussion), 407-499.
- 公開年: 2004
- URL: https://hastie.su.domains/Papers/LARS/
- 元のデータセット(diabetes.data)ファイル
- 前述の方法(平均0、ユークリッドノルム1)で正規化されたデータセット(diabetes.sdata.txt)ファイル
- 論文PDFファイル: https://web.stanford.edu/~hastie/Papers/LARS/LeastAngle_2002.pdf
利用方法
実際に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()
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を指定することで、正規化されていない元の値を取得することもできる。
Copyright© Digital Advantage Corp. All Rights Reserved.