投稿

Translate

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

#65 Section 20 クラスタリング(1)教材の用意&PyCaretのインストール/インポート

イメージ
 ここからは、機械学習の第三弾として、教師なし学習の『 クラスタリング 』を体験していきましょう。 クラスタリングの主な目的は、下記のように似た性質を持つデータを自動的に グループ分け することです。 ● 顧客の年齢、収入、購買行動、支出などに基づいて、共通のニーズを持つ顧客グループ(クラスター)を抽出し、グループごとに最適なマーケティング戦略を立てる際に活用 ●他のどのクラスターにも属さない、孤立したデータポイント(外れ値)を特定することで、不正取引や機械の異常などを発見 ●大量のデータの中から、主要なパターンや傾向を理解するための初期分析として利用 今回もPyCaretの公式チュートリアルの一部を教材としていきます。 1.PyCaretのホームページ  まずは、教材の準備をしていきます。 PyCaretのホームページ https://pycaret.gitbook.io/docs の左側メニュー『Tutorials』をクリックします。PyCaretの公式ホームページ、ちょっと変わりました。 → スライドは、クリックすると拡大できます! 『Tutorials』にある『Clustering』の前半の部分『Quick start』を今回の教材にします。 『 Clustering 』は、 ②教師なし学習 の一種で、特徴が近い(似ている/距離が近い)データを集めて集団に分ける分析手法です。日本語で、『 クラスタリング 』と言います。 『Colab』をクリックすると、『Colab』の『Tutorial - Regression.ipynb』という名前のノートブックが現れます。この状態では、まだGoogleドライブに保存されているわけではありませんので、『 ドライブにコピー 』をクリックします。 これで、教材の準備は完了です。 2.PyCaretのインストール/インポート この教材には、既にコードが書いてありますから、それを見ていきながら、何をやっているのか理解していきましょう! Colabには、PyCaretがインストールされていませんので、先ずはPyCaretをインストールしましょう。 ★その前に、『#56 分析環境再構築/コラボのPythonバージョンアップ』を参考にして、Pythonのダウングレードを行います。 また、通常の『!pip instal...

YouTubeコース(無料版)をはじめました!

イメージ
このブログも、コンテンツが多くなり、動画を見つけにくいとの意見がありました。 そこで、YouTubeコースを始めました。 YouTubeは、デフォルトで作成日順に表示されますので、どの順番で動画を見ればいいか迷ってしまいます。 YouTubeコースは、関連の動画が視聴する順番で並んでいます。また、そのコースのどこまで視聴したかも記憶してくれていますので、すぐに次の新しいものから視聴できますのでストレスフリーですね(途中でも大丈夫)。 サイドバーにも「YouTube コース」という場所を作っておきましたので、それぞれをはじめから順番に視聴したい方はご利用ください。 ① 基礎編 1st Step ビッグデータの読み込みとデータの確認 https://www.youtube.com/playlist?list=PLb2oxjBcK2wyv6k0IesxrpIX6TFb9Gyyj ② 基礎編 2nd Step 集計とグラフ描画 https://www.youtube.com/playlist?list=PLb2oxjBcK2wwWGxV4cvYikqCZwZ9P_lma ③ 応用編 Webスクレイピング https://www.youtube.com/playlist?list=PLb2oxjBcK2wwk7_yyuosj4Q5xicd1ypAu また、宣伝になりますが、①~②のコースは、それぞれ下記のオフィシャルテキストに対応しています。Amazonで購入可能ですので、よろしければクリック!  ① 基礎編 1st Step ビッグデータの読み込みとデータの確認 ⇒  オフィシャルテキスト1 ② 基礎編 2nd Step 集計とグラフ描画 ⇒  オフィシャルテキスト2

#64 Section 19 回帰(8)まとめ

イメージ
さて、Pycaretでの回帰はいかがでしたか? #57 Section 12~#63 Section 18を振り返ってみましょう! 出力された評価結果、分析結果を詳しく説明しましたが、最低限、下記のコードを書けば、機械学習の『回帰』で分析することができます。 新たなデータを作成してそれを予測するコードを加えても全部で19行! ↓ 下記のスライドは、クリックすると大きくなります。 コードを書くのが億劫だと思っている方でも、どんどん出力が出ますので、さまざまな種類の機械学習を体験していきましょう。 次回からは、クラスタリング(Clustering)を体験していきます!  

#63 Section 18 回帰(7)モデルの保存

イメージ
さて、回帰も大詰めとなってきました。 1.モデルの保存 さて、予測したモデルを、save_model関数を使用して、今までの分析の流れを後で使用するために保存していきます。  使うコードは、 save_model(選択したモデルの名前, '保存するモデルの名前') 今回は、「my_first_pipeline」という名前で保存します。 「my_first_pipeline」は、現在の作業ディレクトリに、モデルのIDに *.pkl の拡張子が付いたファイル(*pickle形式)として保存されます。これは、後でいつでも利用することができます。 * pickle形式 :Pythonのメモリ上にあるデータ構造(例えば、リスト、辞書、クラスのインスタンス、そしてPyCaretの学習済みモデルなど)を、ファイルに書き込んで保存できる形式のことです。そして、保存したファイルから元のPythonオブジェクトを復元できます。 pickle形式のファイルは、path引数で指定した場所、または今回のようにpath引数を省略した場合は現在の作業ディレクトリに保存されます。ただし、Googleドライブの検索エンジンでは、ファイルの内容をテキストとして解析することが難しく、 キーワードで検索することができません 。 2.モデルの保存 出力 save_model関数の主なアウトプットは、モデルだけでなく、データの前処理方法全体が一つのパイプラインとして保存されたこと、そしてそのパイプラインに含まれる個々の処理ステップの詳細と、最終的な学習済みモデルの種類とハイパーパラメータ、そして保存されたファイルの名前を示しています。 この情報があれば、 保存されたパイプラインがどのような処理を行い、どのようなモデルを含んでいるか を後で正確に把握することができます(確認している人は少ないですが・・・)。 滅多に使わないですが、今までの作業を振り返る意味で、出力内容を確認していきましょう。 下記の2枚のスライドを見てみましょう。 3.モデルの再利用 save_model関数を使ったモデル(前処理方法などを含む)を呼び出す(ロードする)ためには、 load_model(‘保存したモデル名‘) を使います。ここでは、読み込んだモデルを「loaded_best_pipeline」と名付け直しています...

#62 Section 17 回帰(6) 予測

イメージ
今回は、compare_models関数で求めた性能が良かったモデル(catboost/CatBoost Regressor)で、新たにデータを作成して、予測をしてみましょう。 1.予測結果の性能評価 まず、チュートリアルの最初のコードをみてみましょう。『holdout_pred = predict_model(best)』となっています。 右側のpredict_model関数は、通常、『 predict_model(モデル名, data=データ名) 』のような引数を指定しますが、setup()で分割した テストデータ に対して 予測した結果 を返してくれます。 引数『data=データ名』が無い場合は、指定した モデルの性能評価 が出力されます。 『holdout_pred』は、predict_model関数の実行結果が格納される変数です。何でもいいのですが、ほとんどの人はテストデータの予測結果を宣言する場合、『holdout_pred』と書きましょう。お作法です。 ですから、 holdout_pred = predict_model(best) とコードを書くと、下記のように指定したモデルの性能評価が出力されます。 ※ MAE、MSE、RMSE、R2、RMSLE、MAPEに関しては、『#59 Section14 回帰(3)モデルの評価・比較』を参照してください。 ↓スライドはクリックすると大きくなります! 2.予測結果の出力 『holdout_pred』は、 予測結果が格納されたデータフレーム を保持していますので、下記のコードのように『holdout_pred.head()』とすると、指定したモデルをテストデータに当てはめた予測結果が出力されます。元にデータに『 prediction_label 』という列が追加され、そこに『保険料(charges)』の予測結果が表示されています。これで、テストデータの予測ができました。 3.新たなデータで予測 同じコードは、未知のデータセットのラベル予測にも使えます。 元のデータのコピーを作成し、列『charges』を削除し、新たなデータ『new_data』を作成します。 次は、この『new_data』を下記に当てはめて、 『new_data』の予測をしています。 predict_model(モデル名, data=データ名) ...