#66 Section 21 クラスタリング(2)前処理
このSectionでは、『クラスタリング』のデータのsetup関数を使った前処理について、関数型APIとオブジェクト指向APIを体験していきます。
1.モジュールのインポートとsetup関数の実行
下記のスライドを見てください。
→ スライドは、クリックすると拡大できます!
1行目は解説で、2行目は、PyCaretのうち回帰に用いるモジュール『clustering』をインポートしています。このモジュールは、似た性質を持つデータを自動的にグループ分けするクラスタリングに使用しますワイルドカード『*』を使うとモジュールで公開されているすべての関数や変数などがインポートされて使えるようになります。
3行目は、PyCaretのモジュール『clustering』に含まれるsetup関数を記載しています。
setup関数は、欠損値処理、データ分割などの前処理を行うことができます。ここでは、実験の再現性を確保するための乱数シード(擬似乱数を生成する際の『開始点』)のみが引数として設定されています。
setup関数の結果を変数『s』に格納することで、設定内容をオブジェクトとして保持しています。
2.setup 関数
分類や回帰の時と同様ですが、クラスタリングは教師なし学習ですので、 『正解ラベル(Target)』を指定する必要がありません。ということで、必要最小限の引数は『data』、『session_id』の2つということになります。
参考までに、スライドには、データの前処理に関する他の引数を挙げています。クラスタリングは「距離」に基づいてグループ分けするため、これらの設定が結果に直結します。
3.setup関数の出力
『setup(data, session_id = 123)』の出力について、簡単に解説しています。下記のスライドをお読みください!
4.setup関数 オブジェクト指向API
前出のモジュールのインポートとsetup関数の実行のコードは、『関数型API』で書きましたが、ここからは、モジュールのインポートと関数を使った前処理をオブジェクト指向APIでプログラムを書いていきます。
学習時の短いコードの場合は『関数型API』で書いても構いませんが、多くのコードを書く場合は、判読性の良さや複数の実験管理などがしやすい等の点から、オブジェクト指向APIを推奨します。
さて、オブジェクト指向APIを見てみましょう。
下記のスライドのコードを見てください。
2行目で、pycaret.regressionモジュールからRegressionExperimentクラスをインポートしています。
3行目では、オブジェクト指向プログラミングを可能にしています。具体的には、 RegressionExperiment*クラス の
**オブジェクト(インスタンス)を作成し、expという変数に割り当てています。
*クラス:データとそれに関連する処理の設計図
**オブジェクト(インスタンス):クラスという設計図に基づいて生成された、 『実験用の箱(インスタンス)』のこと。
参考までに、オブジェクト指向APIで書くことの利点を、例を挙げて説明します。
例えば、下記のように『標準化あり』の実験と『標準化なし』の実験を同じノートブック内で同時に比較したい場合、箱を2つ作ることでデータが混ざるのを防げます。
# 実験Aの箱 exp1 = ClusteringExperiment()
exp1.setup(data, normalize = True)
# 実験Bの箱 exp2 = ClusteringExperiment()
exp2.setup(data, normalize = False)
次のコードは、type()です。
下記のスライドを見てください。
『その変数の中身が一体何者(どのクラスのオブジェクト)なのか』を確認するための命令です。 下記は、expという変数について、 type()を適用しています。
出力を見ると、変数expが、『pycaret.clustering.oop.ClusteringExperiment』であることが表示されます。
これは、expが『PyCaretのクラスタリング・モジュールに含まれる、オブジェクト指向(OOP)用の実験管理クラス』であることを示しています。
次のコードは、作成した実験用オブジェクト exp に対して、具体的なデータの読み込みと前処理の初期設定を行うために、setup関数を使っています。
出力は、 『関数型API』の場合と同じです。
5.setup関数のまとめ
関数型APIで書いたコード、オブジェクト指向APIで書いたコードを並べてみました。
どちらの流儀で関数を書いても、結果は同じになりますが、多くの前処理を2~4行のコードで書くことができました。

コメント
コメントを投稿