課題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つの吸光度を比率で捉えることで、ワイン中に含まれるフェノール類の量や種類に関する情報(渋味・苦味の強さ、熟成によるフェノール変化の度合いなど)をおおまかに推し量ることができます。ワイン研究では、総ポリフェノール濃度などを推定したり、熟成の評価指標として使われたりすることが多いです。
- ワイン分析における OD280/OD315 は、ワインを特定の波長(280nmと315nm)で測定した際の吸光度(Optical Density)の比率を指します。一般的には、主にポリフェノール類(特にフラボノイドなど)の含有量や性質を把握する指標として用いられます。
- ChatGPTの解説
- 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によって散布図を色分けして表示し,クラスタリング結果と比べてみましょう.
なぜ上手くクラスタリングできなかったかを考える手助けになるかもしれません.