LoginSignup
29
41

More than 3 years have passed since last update.

PyCaretでワインの品質を分類してみた

Last updated at Posted at 2020-04-24

はじめに

先日、リリースされた機械学習ライブラリーPyCaretを使ってみました。
データの特徴量分析や複数のモデルとの性能比較作業が自動化され、これまでのデータサイエンティストの作業時間がだいぶ減ると思います。

1. PyCaretのインストール

下記のコードを実行しインストールします。
Anacondaを使っていますが、PyCaret専用の仮想環境を立ち上げてインストールしました。
既存のCondaで管理されてる仮想環境では、エラーが発生する場合があります。(恐らくpipとcondaとの衝突が原因)

pip install pycaret

2.データの取得

今回はWine Qualityデータセットを使います。
image.png

データセットには、説明変数として11項目、ワインの品質を表す目的変数(Quality)1項目で整理されています。

説明変数
1 - fixed acidity (固定酸度)
2 - volatile acidity (揮発性酸性)
3 - citric acid (クエン酸)
4 - residual sugar (残糖)
5 - chlorides (塩化物)
6 - free sulfur dioxide (遊離二酸化硫黄)
7 - total sulfur dioxide (総二酸化硫黄)
8 - density (密度)
9 - pH
10 - sulphates (硫酸塩)
11 - alcohol (アルコール)

目的変数
12 - quality (品質)(score between 0 and 10)

データセットは、下記のサイトでダウンロード可能です。
http://archive.ics.uci.edu/ml/datasets/Wine+Quality
http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-white.csv

from pycaret.datasets
import pandas as pd
dataset = pd.read_csv('winequality-white.csv',sep=";",encoding="utf-8")
dataset.head()

image.png

そして、95%を訓練データ、5%をテストデータ(Unseen Dataと呼ぶ)に分けます。

data = dataset.sample(frac =0.95, random_state = 786).reset_index(drop=True)
data_unseen = dataset.drop(data.index).reset_index(drop=True)
print('Data for Modeling: ' + str(data.shape))
print('Unseen Data For Predictions: ' + str(data_unseen.shape))

結果

Data for Modeling: (4653, 12)
Unseen Data For Predictions: (245, 12)

3.データの前処理

setup()を利用して、データの前処理を行います。その時、目的変数を引数でqualityと指定します。

from pycaret.classification import *
exp_clf101 = setup(data = data, target = 'quality', session_id=123) 

結果 (10項目まで表記)

image.png

4.モデルの比較

compare_models()で、データセットを複数の分類モデルを用いて分析を行い、その結果を表にまとめます。どの分類モデルを使うか検討の時、かなり役に立つ機能です。

Pycaretが提供する分類モデルは10種類以上で、下記のリンクで確認が可能です。

compare_models()

Extra Trees Classifierを使うと、Accuracy 65.95%でした。例えば、こういう機能を使わず、最初からSVMだけで分析をした場合、Accuracyは32.03%です。 ワインの品質データ、SVM分析事例

結果

image.png

5.分析モデルの生成

分類モデルを選択して、モデリングを行います。create_model()を使います。
今回は、Light Gradient Boosting Machineモデルを利用します。

lightgbm = create_model('lightgbm')

結果

image.png

6.分析モデルのチューニング

tune_modelを用いて、モデルのチューニングも行います。

tuned_lightgbm = tune_model('lightgbm')

結果

チューニング前のAccuracyの平均が0.6393、チューニング後のAccuracyの平均が0.6414と改善されました。

image.png

7.分析モデルの可視化

plot_modelを用いて、分析結果を可視化します。

まず、AUC曲線をプロットします。

plot_model(tuned_lightgbm, plot = 'auc')

結果

image.png

次に、混同行列をプロットします。

plot_model(tuned_lightgbm, plot = 'confusion_matrix')

結果

image.png

8.分析モデルの評価

evaluate_model()を使い、複数の評価を同時に行うことが可能です。

evaluate_model(tuned_lightgbm)

黄色い枠の中のボタンを押すと、各々の評価結果が表示されます。

結果

image.png

9.予測

finalize_model()でモデルをFinalizeした後、predict_model()で予測を行います。
予測の時には、テストデータ(ここでは、data_unseen)を使います。

final_lightgbm = finalize_model(tuned_lightgbm)
unseen_predictions = predict_model(final_lightgbm, data=data_unseen)
unseen_predictions.head()

最後のLabel列は、予測の結果を意味します。

結果

image.png

10.まとめ

  1. ワイン品質のデータセットを利用し、PyCaretで分析を行いました。
  2. 大変使いやすいです。商用分析ツールのAlteryx, DataRobotにも負けないほどの高い分析機能だと思います。
  3. 次回は、PyCaretの回帰問題に取り組んでみたいと思います。

後続記事を書きました。宜しければ、こちらの記事も読んで頂ければと思います。
PyCaretでタイタニック生存予想をしてみた

10.1 分析に使用したPycaret関数一覧

  1. データの前処理: setup()
  2. モデルの比較: compare_models()
  3. 分析モデルの生成: create_model()
  4. チューニング: tune_model()
  5. 可視化: plot_model()
  6. 評価: evaluate_model()
  7. 予測: finalize_model(), predict_model()

11.参考資料

1.PyCaret Home Page , http://www.pycaret.org/
2.Wine Quality Dataset, http://archive.ics.uci.edu/ml/datasets/Wine+Quality
3.PyCaret Classification, https://pycaret.org/classification/
4. 最速でPyCaretを使ってみた, https://qiita.com/s_fukuzawa/items/5dd40a008dac76595eea
5.【Python】機械学習でワインの品質を判定する, https://ymgsapo.com/2019/01/06/ai-wine-quality/

29
41
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
41