機械学習は回帰ばかりではなく、分類器としても広く使われています。
教科書に載っているようなデータばかりじゃ飽きるので、今回は無料で公開されているデータセットの中から、赤ワインの成分と品等との関係をモデル化してみたいと思います。
まずはデータの取得。
ワインの各成分は化学的に求めたもの。
最も右側にあるqualityというのが品等のデータです。これはワインのエキスパートがテイスティングによってワインの品等をランク付けしたもので、10点満点で1が最低を表します。パーカーポイントみたいなものですね。
データに欠損値がないか確認。
欠損値はありません。それからデータのタイプを確認します。
数値データしか扱えないのですが、今回はすべてのデータが浮動小数であることが確認できました。ここにobjectとか混じっているとデータを事前に数値に変換する作業が必要になります。
以前扱ったボストン住宅価格は教師データ(価格)と特徴量データが初めから分かれていたのですが、今回はそれが一つのデータになっているので、これを教師データと特徴量データに分割する必要があります。
教師データはred_wine_targetという名前にしました。1599個のデータがあります。
特徴量データはred_waine_dataで、11の特徴量を持つデータが1599個です。
教師データと特徴量データをそれぞれ訓練用とテスト用に分割していよいよモデルの構築です。
分類器として、カーネル法を用いたサポートベクター分類器を使うことにします。サポートベクターは中規模のデータセットに対して強力ですが、パラメータに敏感です。
結果は訓練セットに対する精度は0.94。テストセットに対しては0.65。明らかに訓練セットに対して過学習に陥っています。そこでグリッドサーチを使ってパラメータを調節してみます。
その結果、正則化パラメータC、ガウシアンカーネルの直径を決めるgammaとも1がベストという結論が出ました。
そこでこのCとgmmaを用いて、再度モデルを構築すると、テストセットのスコアは0.65 となります。
結局パラメータチューンの前後で結果は同じになってしまいました。
念のためランダムフォレストを用いてざっくり分類した結果は
0.64ですので、だいたいこの辺りが限界なのかな。
ワインというのは不思議なもので、科学的に成分を分析することは簡単にできるのですが、その成分を合成しても、その味はワインと似ても似つかぬものになってしまいます。ワインの味(品等)は単に成分だけで決まるものではないということを考慮すると、化学成分だけを特徴量としてその品等を機械学習で求めようとしても、正解率が60%台にしかならないのもなんとなく理解できますね。
Comments