Translate

#66 Section 21 クラスタリング(2)前処理

このSectionでは、『クラスタリング』のデータのsetup関数を使った前処理について、関数型APIオブジェクト指向APIを体験していきます。



では、『Setup』と書かれたパートの最初のコードを見てみましょう。




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行のコードで書くことができました。








































 

コメント