「糖尿病のデータセット」について学ぶ(scikit-learn /トイデータセット)

2023年5月13日

この記事では、統計学を初めて学ぶ筆者が、「scikit-learn」の「トイデータセット」における「糖尿病のデータセット」について学んだ内容について記載しています。

学習には、scikit-learnのガイド「7.1. Toy datasets」を参考にし、Pythonのプログラミングにも触れ、理解を深めました。

プログラミングには、機械学習ライブラリのscikit-learnを使用しました。

この記事は、他の人が参考にできるよう、わかりやすく書くことを心がけました。

scikit-learn トイデータセット

機械学習ライブラリscikit-learnに用意されている「トイデータセット」は、機械学習の問題を解くためのサンプルデータセットのことで、いくつかの種類が用意されています。例えば、Iris(アヤメ)の花の特徴から、その種類を分類する問題を解くための「irisデータセット」や、ボストン市の住宅価格に関するデータを用いて、住宅価格を予測する問題を解くための「bostonデータセット」などがあります。

scikit-learnにはいくつかの小さな標準データセットが付属しており、外部のウェブサイトからファイルをダウンロードする必要はありません。

これらは以下の関数を使って読み込むことができます。

load_boston() : load_boston は 1.0 で非推奨となり、1.2 で削除される予定である。

load_iris() : アヤメのデータセット(分類)をロードして返す。

load_diabetes() : 糖尿病のデータセット(回帰)をロードして返す。

load_linnerud() : 身体運動のデータセットをロードして返す。

load_digits() : 数字のデータセット(分類)をロードして返す。

load_wine() : ワインのデータセット(分類)をロードして返す。

load_breast_cancer() : ウィスコンシン州の乳がんのデータセット(分類)をロードして返す。7.1. Toy datasetsts

糖尿病のデータセット

scikit-learnの「糖尿病のデータセット」は、2つのクラス(糖尿病の発症が確定したグループと確定していないグループ)のデータを含む、糖尿病患者の診断に関するデータセットです。このデータセットには、8つの医療的特徴量(年齢、BMI、血圧、皮下脂肪厚、血清インスリン、GLU、HOMA、ディアベティック)と、各患者が糖尿病の発症が確定したかどうかを表す目的変数が含まれています。

このデータセットは、糖尿病の発症リスクを予測するための機械学習モデルを開発するために使用されます。データセットには、約760件のサンプルが含まれており、これらのデータを用いて機械学習モデルをトレーニングすることができます。

Pythonプログラミング

「糖尿病のデータセット」をイメージしやすいようPythonでのプログラミングについても学びます。

プログラム

糖尿病のデータセットを読み込み、データセットの詳細を出力します。

from sklearn.datasets import load_diabetes

# 糖尿病のデータセットを読み込む
diabetes = load_diabetes()

# データセットの詳細を出力する
print("糖尿病のデータセットの定義:")
print("----------------------------")
print("データセット名:", diabetes['DESCR'])
print("----------------------------")
print("特徴量名:", diabetes['feature_names'])
print("----------------------------")
print("特徴量の数:", len(diabetes['feature_names']))
print("----------------------------")
print("データ数:", len(diabetes['data']))
print("----------------------------")
print("データの先頭5行:")
print(diabetes['data'][:5])
print("----------------------------")
print("ターゲットの先頭5行:")
print(diabetes['target'][:5])

実行結果

糖尿病のデータセットの定義:
----------------------------
データセット名: .. _diabetes_dataset:

Diabetes dataset
----------------

Ten baseline variables, age, sex, body mass index, average blood
pressure, and six blood serum measurements were obtained for each of n =
442 diabetes patients, as well as the response of interest, a
quantitative measure of disease progression one year after baseline.

**Data Set Characteristics:**

  :Number of Instances: 442

  :Number of Attributes: First 10 columns are numeric predictive values

  :Target: Column 11 is a quantitative measure of disease progression one year after baseline

  :Attribute Information:
      - age     age in years
      - sex
      - bmi     body mass index
      - bp      average blood pressure
      - s1      tc, total serum cholesterol
      - s2      ldl, low-density lipoproteins
      - s3      hdl, high-density lipoproteins
      - s4      tch, total cholesterol / HDL
      - s5      ltg, possibly log of serum triglycerides level
      - s6      glu, blood sugar level

Note: Each of these 10 feature variables have been mean centered and scaled by the standard deviation times `n_samples` (i.e. the sum of squares of each column totals 1).

Source URL:
https://www4.stat.ncsu.edu/~boos/var.select/diabetes.html

For more information see:
Bradley Efron, Trevor Hastie, Iain Johnstone and Robert Tibshirani (2004) "Least Angle Regression," Annals of Statistics (with discussion), 407-499.
(https://web.stanford.edu/~hastie/Papers/LARS/LeastAngle_2002.pdf)
----------------------------
特徴量名: ['age', 'sex', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6']
----------------------------
特徴量の数: 10
----------------------------
データ数: 442
----------------------------
データの先頭5行:
[[ 0.03807591  0.05068012  0.06169621  0.02187235 -0.0442235  -0.03482076
  -0.04340085 -0.00259226  0.01990842 -0.01764613]
 [-0.00188202 -0.04464164 -0.05147406 -0.02632783 -0.00844872 -0.01916334
   0.07441156 -0.03949338 -0.06832974 -0.09220405]
 [ 0.08529891  0.05068012  0.04445121 -0.00567061 -0.04559945 -0.03419447
  -0.03235593 -0.00259226  0.00286377 -0.02593034]
 [-0.08906294 -0.04464164 -0.01159501 -0.03665645  0.01219057  0.02499059
  -0.03603757  0.03430886  0.02269202 -0.00936191]
 [ 0.00538306 -0.04464164 -0.03638469  0.02187235  0.00393485  0.01559614
   0.00814208 -0.00259226 -0.03199144 -0.04664087]]
----------------------------
ターゲットの先頭5行:
[151.  75. 141. 206. 135.]

和訳します。(For more information see:を除きます。)

糖尿病のデータセットの定義:
----------------------------
データセット名: .. _diabetes_dataset:

糖尿病のデータセット

年齢、性別、BMI、平均血圧、および6つの血清測定値を含む、n = 442の糖尿病患者それぞれについて、基線後1年間の疾患進行の定量的評価(興味のある応答)が得られました。

データセットの特性:

:インスタンス数: 442

:属性数: 最初の10列は数値予測値

:ターゲット: 列11は基線後1年間の疾患進行の定量的評価です。

:属性情報:
- 年齢(age): 歳
- 性別(sex):
- BMI(bmi): 身体質量指数
- 平均血圧(bp):
- s1: 総血清コレステロール(tc)
- s2: 低比重リポタンパク質(ldl)
- s3: 高比重リポタンパク質(hdl)
- s4: 総コレステロール/HDL(tch)
- s5: 血清トリグリセリドレベルの対数である可能性がある(ltg)
- s6: 血糖値(glu)

注:これらの10の特徴変数のそれぞれは、平均値を中心に標準偏差でスケーリングされており、列ごとの平方和の合計が1になるようにn_samples回乗算されました。

出典URL:
https://www4.stat.ncsu.edu/~boos/var.select/diabetes.html

----------------------------
特徴量名: ['age', 'sex', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6']
----------------------------
特徴量の数: 10
----------------------------
データ数: 442
----------------------------
データの先頭5行:
[[ 0.03807591  0.05068012  0.06169621  0.02187235 -0.0442235  -0.03482076
  -0.04340085 -0.00259226  0.01990842 -0.01764613]
 [-0.00188202 -0.04464164 -0.05147406 -0.02632783 -0.00844872 -0.01916334
   0.07441156 -0.03949338 -0.06832974 -0.09220405]
 [ 0.08529891  0.05068012  0.04445121 -0.00567061 -0.04559945 -0.03419447
  -0.03235593 -0.00259226  0.00286377 -0.02593034]
 [-0.08906294 -0.04464164 -0.01159501 -0.03665645  0.01219057  0.02499059
  -0.03603757  0.03430886  0.02269202 -0.00936191]
 [ 0.00538306 -0.04464164 -0.03638469  0.02187235  0.00393485  0.01559614
   0.00814208 -0.00259226 -0.03199144 -0.04664087]]
----------------------------
ターゲットの先頭5行:
[151.  75. 141. 206. 135.]

プログラムの説明

from sklearn.datasets import load_diabetes

scikit-learnのdatasetsモジュールから、load_diabetes関数をインポートします。これにより、diabetesデータセットを読み込むことができます。

# 糖尿病のデータセットを読み込む
diabetes = load_diabetes()

load_diabetes()関数を使って、diabetesデータセットを読み込み、diabetesという名前で保存します。

# データセットの詳細を出力する
print("糖尿病のデータセットの定義:")
print("----------------------------")
print("データセット名:", diabetes['DESCR'])
print("----------------------------")
print("特徴量名:", diabetes['feature_names'])
print("----------------------------")
print("特徴量の数:", len(diabetes['feature_names']))
print("----------------------------")
print("データ数:", len(diabetes['data']))
print("----------------------------")

print(“データセット名:", diabetes['DESCR’])は、糖尿病のデータセットの詳細情報を出力します。
print(“特徴量名:", diabetes['feature_names’])は、糖尿病のデータセットの特徴量名を出力します。
print(“特徴量の数:", len(diabetes['feature_names’]))は、糖尿病のデータセットの特徴量の数を出力します。
print(“データ数:", len(diabetes['data’]))は、糖尿病のデータセットのデータの数を出力します。

print("データの先頭5行:")
print(diabetes['data'][:5])
print("----------------------------")
print("ターゲットの先頭5行:")
print(diabetes['target'][:5])

print(diabetes['data’][:5])は、糖尿病のデータセットの最初の5行を出力します。

diabetes['data’]は、糖尿病のデータセットから取得したデータの行列を表します。各行が1つのデータポイントであり、各列が10個の特徴量の値を表します。diabetes['data’][:5]は、最初の5つの行を取得するためのPythonのスライスです。したがって、print(diabetes['data’][:5])は、最初の5つのデータポイントの特徴量の値を表示します。

print(diabetes['target’][:5])は、糖尿病のデータセットのクラスの最初の5行を出力します。

diabetes['target’]は、糖尿病のデータセットから取得したクラスラベルを表します。各クラスラベルは、各データポイントに対応しています。diabetes['target’][:5]は、最初の5つのクラスラベルを取得するためのPythonのスライスです。したがって、print(diabetes['target’][:5])は、最初の5つのデータポイントのクラスラベルを表示します。