メインコンテンツへスキップ
  1. 第14講 機械学習(3/3)/

第14講 週次課題

週次課題 クラスタリング
目次

課題14-1 ワインの等級の分類
#

⭐⭐

以下の手順でワインの等級を分類して散布図を描画するプログラム wine_clustering.py を作成してください. そして,クラスタリング結果(散布図)に対する考察を,プログラム中の考察に記してください.

  • データは,wine = sklearn.datasets.load_wine() を使って読み込んでください.
  • 各ワインごとに次の13の変数(wine.data)があります.これを元にクラスタリングしてください.なお,それぞれの変数の意味は次の通りです.wine.feature_namesからも確認できます.
    • alcohol(アルコール度数)
    • malic_acid(リンゴ酸)
    • ash(灰分(かいぶん))
    • alcalinity_of_ash(灰分のアルカリ度)
    • magnesium(マグネシウム)
    • total_phenols(全フェノール含量)
    • flavanoids(フラボノイド)
    • nonflavanoid_phenols(非フラボノイドフェノール)
    • proanthocyanins(プロアントシアニン)
    • color_intensity(色の濃さ)
    • hue(色相)
    • od280/od315_of_diluted_wines(希釈ワイン溶液のOD280/OD315(=280nmと315nmの吸光度の比))
      • ChatGPTの解説
        • ワイン分析における OD280/OD315 は、ワインを特定の波長(280nmと315nm)で測定した際の吸光度(Optical Density)の比率を指します。一般的には、主にポリフェノール類(特にフラボノイドなど)の含有量や性質を把握する指標として用いられます。
          • 280nm付近の吸収: ベンゼン環など芳香族化合物を含む物質(ポリフェノール、タンパク質など)がよく吸収する波長帯
          • 315nm付近の吸収: 一部のフェノール類や関連化合物がよく吸収する波長帯
        • この2つの吸光度を比率で捉えることで、ワイン中に含まれるフェノール類の量や種類に関する情報(渋味・苦味の強さ、熟成によるフェノール変化の度合いなど)をおおまかに推し量ることができます。ワイン研究では、総ポリフェノール濃度などを推定したり、熟成の評価指標として使われたりすることが多いです。
    • proline(プロリン)
  • 上記のデータ(wine.data)を用いて,\(k\)平均法を用いて,クラスタリングを行ってください.
    • クラスタ数は3としてください.
  • alcohol(アルコール度数)とod280/od315_of_diluted_wines(希釈ワイン溶液のOD280/OD315(=280nmと315nmの吸光度の比))の散布図を描いてください.
    • クラスタリングの結果を色分けしてください.
from sklearn import datasets
from sklearn import cluster

wine = datasets.load_wine() # ワインのデータセットをロードする.

model = # kMeans を行うオブジェクトを生成する(クラスタ数は3).
# wine.data を対象にクラスタリングを行う.

import matplotlib.pyplot as plt
plt.scatter(...) # wine.data の0列目,11列目で散布図を描画する.
plt.scatter(model.cluster_centers_[:, 0], model.cluster_centers_[:, 11], marker="x", c="red")
plt.show() # 表示する.

実行結果の例
#

ワインの等級の分類

上記の例は,アルコール度数と希釈ワイン溶液のOD280/OD315の比を用いて,ワインの等級を分類した結果です. 散布図を見ると,うまくクラスタリングできていないように見えます. なぜこのような結果になるのかをコメントに記してください.

なお,このデータ(wine)には,等級(wine.target)が含まれています.教師あり学習では,wine.dataを説明変数,wine.targetを目的変数として,ワインの等級予測も行えます.今回はクラスタリング(教師なし学習)ですので,wine.targetは利用しません. ただ,クラスタリングの予想結果の代わりにwine.targetによって散布図を色分けして表示し,クラスタリング結果と比べてみましょう. なぜ上手くクラスタリングできなかったかを考える手助けになるかもしれません.