投稿

Translate

#72 Section 27 クラスタリング(8)まとめ

イメージ
さて、Pycaretでのクラスタリングはいかがでしたか? #65 Section 20~#71 Section 26を振り返ってみましょう! 最低限、下記のコードを覚えれば、機械学習の『クラスタリング』で分析することができます。ただし、結果の評価や比較などは、統計的な理解が必要になります。 教師あり学習と較べると、交差検証関連やcompare_models関数が使えないなどの違いがあります。 ↓スライドをクリックすると大きくなります!

#71 Section 26 クラスタリング(7)モデルの保存・再利用

イメージ
クラスタリングの最後は、モデルの保存と再利用の方法を体験していきます。 1.モデルの保存 クラスタリングの最後は、 save_model 関数を使用します。今まで前処理を行って評価してきたモデルをディスクに保存することができます。  save_model(選択したモデルの名前, '保存するモデルの名前') 今回は、モデル『kmeans』を『kmeans_pipeline』という名前で保存します。 『kmeans_pipeline』は、現在の作業ディレクトリに、モデルのIDに *.pkl の拡張子が付いたファイル(* pickle形式 )として保存されます。これは、後でいつでも利用することができます。 *pickle形式:Pythonのメモリ上にあるデータ構造(例えば、リスト、辞書、クラスのインスタンス、そしてPyCaretの学習済みモデルなど)を、ファイルに書き込んで保存できる形式のことです。そして、保存したファイルから元のPythonオブジェクトを復元できます。 pickle形式のファイルは、path引数で指定した場所、または今回のようにpath引数を省略した場合は現在の作業ディレクトリに保存されます。関数の出力や、ファイルシステムを直接確認することで、保存場所を特定できます。ただし、 pickleファイルはテキスト形式ではなく、コンピュータが効率的にデータを読み書きするためのバイナリ形式で保存されています。そのため、 Googleドライブの検索エンジンでは 、ファイルの内容をテキストとして解析することが難しく、 キーワードで検索することができません 。 2.モデルの保存 出力 save_model 関数を実行すると、その出力には、個々の処理ステップの詳細と、最終的な学習済みモデルの種類とハイパーパラメータ、そして保存されたファイルの名前が出てきます。 その記載の内容は、下記のスライドを参照願います。 3.モデルの利用 下記の load_model 関数を使うと、保存されたモデルを読み込む(ロードする)ことができます。 load_model(‘保存したモデル名‘) 4.モデルの利用 出力 load_model 関数を使うと保存されたモデルを読み込むことができますが、その出力には、個々の処理ステップの詳細と、最終的な学習済みモデルの種類とハイパーパラ...

#70 Section 25 クラスタリング(6)予測

イメージ
1.predict_model関数 『Prediction』の最初のコードは、 predict_model関数 を使った予測になります。 predict_model(モデル名, data=データ名) predict_model関数は、本来は未知のデータを予測するためのものですが、ここでは未知のデータの用意が無いので、モデル作成時に使ったデータを引数で指定しています。 本来は、新たなデータに作成したモデルを適用させたい場合に、 predict_model関数を使います。 結果は、assign_model関数で付与されたクラスターラベルと同じものが付与されています。 【参考】 データの確認 今回予想した『kmeans_pred』と、 assign_model関数でクラスターラベルを付与した『kmeans_cluster』は、同じデータであるはずです。これを確認してみましょう。 2つのDataFrameが同じものであるかどうかを判定するには、『応用編 Webスクレイピング/#44 Supplement 2 DataFrameの比較』で体験した「equals」を使います。 https://tutorial4datascience.blogspot.com/2025/03/supplement-dataframe.html 96   データ1.equals(データ2) を使って確かめてみましょう。 結果は、『False』でした。どこかが、不一致のようです・・・。 値の違うindexと列を特定するには、「 compare 」を使います。 https://tutorial4datascience.blogspot.com/2025/03/supplement-dataframe.html 97  データ1.compare(データ2) を使って確かめてみましょう。 列『SpendingScore』と列『Savings』の数値が表示されています。 『self』はデータ1にあたる『kmeans_pred』、『other』はデータ2にあたる『kmeans_cluster』の値です。 よく見ると、列『Savings』の数値が微妙に違っています。 『kmeans_cluster』は、setup関数でデータの前処理を行ってからクラスターラベルを付与したデータにモデルを適用したものですが、『km...

#69 Section 24 クラスタリング(5)モデルの分析

イメージ
assign_model関数で、クラスターラベルの付与を行ったところで、チュートリアルの『Analyze Model(モデルの評価)』に進みましょう。 1.plot_model関数 分類や回帰と同様に、plot_model関数を使用すると、学習済みモデルのパフォーマンスを分析できます。 plot_model(モデル名, plot='グラフの種類′) クラスタリングでplot_model関数のグラフの種類についての詳細は、下記の公式ドキュメントの『Examples by module→Clustering』を参照してください。 https://pycaret.gitbook.io/docs/get-started/functions/analyze#clustering 2.plot_model関数 引数 'cluster' まずは、下記のスライドにあるように引数を『 plot = ‘cluster’ 』としたコードが書かれています。これは、「クラスタリングの結果を可視化せよ」という指示ですが、2次元のグラフに表示するために*PCAという次元圧縮技術が自動的に適用されます。 * PCA ( 主成分分析 /Principal Component Analysis):たくさんの変数を持つデータを特徴を保ちながら少数の変数で表現する次元削減の手法の一つ。『第1主成分』、『第2主成分』という新しい2つの指標にまとめ上げることができます。 出力された下記スライドのグラフから、このモデルは「非常に良好にクラスタリングができている」と評価できます。 ● クラスタ間の分離 (Separation) が明確 →4つのグループ(Cluster 0〜3)が、平面上で互いに離れた位置に固まっています。これは、モデルがデータ間の明確な違いを捉えられていることを示します。 ● クラスタ内の凝集度 (Cohesion) が高い →各色がバラバラに散らばることなく、特定のエリアに集中して分布しています。これは、同じクラスタ内のデータが互いに似た性質を持っていることを意味します。 ● ノイズ (混合) が少ない →一部、Cluster 3(赤)とCluster 0(青)の境界付近でデータが混じり合っている箇所がありますが、全体としては境界線がはっきりしています。 ★スライドはク...

#68 Section 23 クラスタリング(4)クラスターラベルの付加

イメージ
チュートリアルの『Assign Model』に進みます。 assign_model関数の実行 assign_model関数 は、どのクラスター(Cluster 0, Cluster 1・・・)に属するかを元の入力データセットに新しい列として追加して返してくれます( クラスターラベル の付与)。 ()内の引数は、create_model関数で宣言したモデルの名称を記入します。 Section22で、kmeans = create_model('kmeans')としていますので、ここでは、『kmeans』を記入しています。 Section22の参考で、下記のようなモデルを定義しましたが、その『kmeans2』を引数として記入すると、下記のスライドのようになります。 kmeans2 = create_model('kmeans', num_clusters = 3) indexが『500』の行のクラスターが、『Cluster 3』から『Cluster 0』 へ変化しました( 『Cluster 1』も『Cluster 2』も別物ですが…)。 通常、『kmeans』、『kmeans2』等のクラスターラベルの付いたデータを使って、それぞれの平均値や最大・最小値などの要約統計量を算出すること等により、データ分析を進めていくことになります。  

#67 Section 22 クラスタリング(3)モデルの作成

イメージ
このSectionでは、『クラスタリング』のcreate_model関数を体験していきます。 1.create model関数の実行 チュートリアルの『Create Model』の項の最初は、 create_model 関数を使っています。 回帰では、前処理を行うsetup関数の次は、『compare_models()』行い、『create model関数』は、モデルの呼び出しと確認に使う程度でした。クラスタリングでのcreate model関数は、次のような機能を持っています。 ① 指定したモデル名に基づいて、モデルを訓練 ② 学習データの各行がどのクラスターに属しているか(Cluster ID)をラベルにして付与 ③ 各評価指標による評価 上記のコードでは、代表的なモデル「 K-means法 」を指定して、①~③を実行しています。 出力は、下記スライドのように、③となります。 2.create model関数の出力 create model関数の出力は、各評価指標による評価となります。 主な各評価指標は、『Silhouette(シルエット係数)』、『Calinski-Harabasz』、『Davies-Bouldin』があります。 Silhouette (シルエット係数):1に近く、大きいほど良い Calinski-Harabasz :大きいほど良い Davies-Bouldin :0に近く、小さいほど良い なお、なお、残りの右3つの評価指標『Homogeneity(均質性)』、 『Rand Index(ランド指数)』 、『Completeness(完全性)』は、 「外部評価指標」と呼ばれ、「正解(真のラベル)」が分かっている時に使うものです。 『正解(真のラベル)』を与えていない、あるいはデータセットに正解となる列が含まれていない状態の場合、すなわち、今回のような場合、これらの指標は計算できず「 0 」と表示されます。 【参考】 評価指標を使ったクラスタリングのブラッシュアップ シルエット係数をグラフ化したところ、クラスター数がデフォルトの4つでいいのかと感じました。 そこで、エルボー法を用いて最適なクラスター数が3であることを確認し、クラスター数を3にしたkmeansの評価指標を算出してみました。 このように、評価指標を確認しながら、ブラッシュア...

#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』で書いても構いませんが、多くのコード...