セッション6:教師なし学習アルゴリズム – K-meansクラスタリング、PCA、SVD

AI入門
この記事は約38分で読めます。

本動画は、機械学習の基礎を学ぶシリーズの第6回目であり、教師なし学習アルゴリズムに焦点を当てている。これまでのセッションで扱ってきた教師あり学習とは異なり、ラベル付けされていないデータセットを扱う手法について詳しく解説する。主要なアルゴリズムとしてK-meansクラスタリングと次元削減技術を取り上げ、それぞれの理論的背景と実装方法を丁寧に説明している。K-meansではLloydアルゴリズムの仕組み、距離メトリクス、エルボー法による最適クラスタ数の決定方法を学び、主成分分析では次元の呪いとその解決策、共分散行列の計算、固有値・固有ベクトルの役割について理解を深める。さらに特異値分解をPCAの数学的エンジンとして紹介し、推薦システムへの応用可能性にも触れている。理論だけでなく、Pythonのコーディング実習を通じて、スクラッチでの実装とscikit-learnライブラリを使った実装の両方を体験できる実践的な内容となっている。

(Session #6) Unsupervised Learning Algorithms - K-Means Clustering, PCA, and SVD
This is Session #4 of our workshop series - Supervised Learning: Understanding Logistic Regression.In this session, you ...

教師なし学習の世界へようこそ

Gunika Dhingra: さて、Zoomの皆さん、音声は今クリアに聞こえていると思います。こちらでも私の声は届いていますね。それでは今日は機械学習入門シリーズの第6回目のセッションです。

これまで議論してきたのは、主に教師あり学習、つまりラベル付きのトレーニングデータセットを使った学習についてでした。何かを猫か犬に分類したり、スパムかスパムでないかに分類したりする話を覚えていますか?

しかし、データにまったくラベルが付いていないシナリオがあったらどうでしょうか。膨大な数のXYZ枚の画像があるだけで、何が猫で、何が犬で、あるいは他の動物なのか分からないような状況です。このようなラベルなしデータセットを扱う機械学習のクラスは、教師なし学習と呼ばれています。

教師なし学習で学ぶ主な2つのアルゴリズムは、K-meansクラスタリングと次元削減です。今日はこの両方について詳しく議論していきます。しかし、これらのアルゴリズムに入る前に、まずラベル付きデータセットでのトレーニングの考え方から、ラベルなしデータセットへと移行したこの変化について理解しましょう。

教師なし学習とは何か

では何が起こっているのでしょうか。類推してみましょう。例えば、私があなたに大量のレゴのビンを渡して、そこから何かを作るように頼んだとします。さて、あなたは私が渡した異なるレゴのピースがどのような分類になっているのか知りません。

では、あなたの最初の反射的なアプローチは何でしょうか。あなたはそれらを分類し始めるでしょう。緑色を一方に、赤色を別の場所に、青色をまた別の場所に分けます。そして長方形を一方に、正方形を別の場所に分けます。これが、レゴブロックの事前設定されたグループなしに、私たちが自分なりの方法を見つけ出す方法なのです。

つまり何が起こっているかというと、私があなたに大量のビンを渡しましたが、今度はあなた自身が事前分類なしに、自分でこの美しい作品をレゴから作る方法を見つけ出したのです。これこそが教師なし学習のすべてなのです。

データはラベル付けされておらず、アルゴリズムは自分自身で基礎となるパターンを見つける方法を理解し、それからグループを作り出し、私たちが特定のケースで話しているレゴのように、何かを構築するためにすべてをまとめるのです。

正式に教師なし学習を定義すると、教師なし学習は機械学習アルゴリズムのクラスであり、ラベルなしデータセットを使用し、それらのデータセットをクラスタリングおよび分析して、私たちが行っている分析全体の最終目標を決定するのに役立つ基礎的な意味とパターンを見つけます。

そして、ここで最後の行を強調しました。見えますか。これらのアルゴリズムは、人間の介入を必要とせずに、隠れたパターンやデータグループを発見します。

ですから、私たちはアルゴリズムをデータに対してトレーニングし、隠れているパターンを自ら見つけ出し、それらをクラスタリングするか、次元を削減するようチャネライズしているのです。これについてはこれから議論していきます。

教師あり学習と教師なし学習の違い

さて、この分類を理解するために、まずこの違いを理解しましょう。これまでの前4回のセッションで見てきたのは、ラベルを予測することでした。私が言ったように、猫か犬か、あるいは他の動物かということです。

つまり、ラベルを予測するという概念から始めました。しかし、教師なし学習で今やっていることは、データの自然な構造を推測することです。

どうやってそれを行うのでしょうか。さまざまなアルゴリズムによって行います。これらのアルゴリズムは、何らかの形でデータセットに質問をします。これらの質問はどのように見えるでしょうか。

それらは、私の顧客ベースにはどんな隠れたグループが存在するか、といったものに似ています。例えば、eコマースプラットフォームに関連するデータセットについて話しているときなどです。

あるいは、データにはさまざまな属性がありますが、手元にあるデータの本質を完全に描写する最も基本的な特性は何か、ということもあります。ですから、ラベルを予測することから自然な構造を推測することへの移行があり、そのプロセスで、アルゴリズムの手段を通じてこれらすべての異なる質問をするのです。

教師なし学習の応用領域

これは正確にはどこで適用されるのでしょうか。今、データは膨大にあります。大量のデータがありますが、そこには膨大な量のラベルなしデータもあり、これらの領域で特に教師なし学習とラベルなしデータを利用します。そしてこれだけではなく、それを超えて広がりますが、皆さんがより良い関連性を持てるように、いくつかの例をまとめました。

顧客セグメンテーションはそのような領域の1つです。eコマースの販売に関するデータがあり、季節が変わるとき、またはセールシーズンが画面に入ってくるとき、顧客の購買パターンがどのように映し出されるかを把握したいのです。それがどのように見えるか。それがすべて顧客セグメンテーションで起こることです。

不正検出も別の分野です。銀行業界では、不正検出は実際に変動しやすい金融分野の中核を大規模に形成しています。金融分野では、不正は自然には発生しないと思います。それは一種の基本的な変化です。通常起こることからの変化ですよね。そして、まさにそこにこれらの教師なし学習アルゴリズムが投入され、取られた特定の行動や活動が不正かどうかを決定し、それらをまとめてグループ化します。

次はマーケットバスケット分析です。例えば、スーパーマーケットのケースを描写できます。パンとバターを買う人がいたら、その傾向は何でしょうか。その人は一緒に果物も買うのでしょうか。それともその人は一緒に卵も買うのでしょうか。これがマーケットバスケット分析の下に入るものであり、そして明らかに医療診断の分野もあります。そこでは患者データを利用して、医療診断のために横たわっている隠れたパターンを分析し、取り出します。

本日の目標

では本日の目標ですが、私が言ったように、2つの主要な教師なし学習アルゴリズムについて議論します。1つはクラスタリングです。

名前自体が自明です。ここでやっていることは、似たようなデータポイントを自動的にグループ化することです。そして2つ目の目標は、次元削減とそのサブセットについて話すことです。

次元削減とは何でしょうか。それは変数の数を減らすシンプルなプロセスです。例えば、何かの目標を分析していて、50個の特徴があるとしましょう。しかしその50個の特徴、つまり異なる属性のうち、20個だけが特定の価値を持っているとします。

私はその20個を選んで、その方向で分析全体を進めたほうがよいかもしれません。その50個をプレートに載せるのではなく。なぜそうするのか。これについては少し後で議論します。

K-meansクラスタリングの基礎

それでは、K-meansでクラスタリングを始めましょう。ここに2枚の写真があります。まずこの写真を見てください。

グラフ上にいくつかのデータポイントがあります。肉眼で、すでにそこには特定の種類のクラスターがあることがわかります。

しかし、常に肉眼の仮定で進めるわけにはいきませんよね。そして、これは私たちが見ている非常に小さなデータのサブセットです。

そこで何が起こるかというと、このK-meansアルゴリズムがバックエンドで実行され、このような画像を私に提供します。特定の方向に向かう傾向がある異なるデータポイントのグループがあります。

そして、これがK-meansクラスタリングの目標です。そして、K-meansと言うとき、K-meansのKは実際に見つけたいクラスター数なのです。どうやってそれを見つけるのでしょうか。正しいクラスター数はいくつでしょうか。これらすべての質問が今ポップアップしているかもしれませんが、これらの質問のそれぞれに対して何かしらの答えがあると思います。これについて今から議論します。

しかし、他のことよりも前に、右側のグラフ、つまりK-means前のグラフから、左側のグラフ、つまりすでにクラスターがあるグラフへのこの移行が、計算上どのように起こっているかを理解しましょう。

Lloydアルゴリズムの仕組み

このアルゴリズムがあり、Lloydアルゴリズムとも呼ばれています。これはどのように機能するかというと、K個の重心をランダムに配置することで初期化します。これはデータ空間におけるKの仮定のようなものです。それから何が起こるかというと、各データポイントを最も近い重心に割り当てます。

つまり、例えば3つの異なる重心を配置したとします。さて、クラスター内、つまり全体の空間に30個の異なるデータポイントがある場合、私が決定した3つのクラスターにそれらの30個の異なるデータポイントのそれぞれを割り当てます。

次のステップは更新です。各データポイントにクラスターを割り当てましたが、それは効率的な選択でしょうか。特定のデータポイントに割り当てられたクラスターは、計算的にもその他の面でも十分に効率的だったでしょうか。

まさにそれが、この更新ポイントを持つ理由です。そこで、それに割り当てられたすべてのデータポイントの平均を取ることによって、各重心の位置を再計算します。

そしてそれが完了したら、反復が見られる場合は、重心が大幅に移動しなくなるまで、プロセス全体を繰り返します。

さて、ここで2つ、3つの異なる側面が見えています。データポイントに最も近い重心を割り当てたいということです。それはどのように起こるのでしょうか。再計算したいです。

それはどのように起こるのでしょうか。それはこのように起こります。

距離メトリクス

ここで異なるクラスターがあるのが見えますね。各重心を各データポイントにどのように割り当てたのでしょうか。それは明確な距離メトリクスを通じてです。そして私たちが持っている2つの非常に一般的な距離メトリクスは、ユークリッド距離です。

そしてマンハッタン距離です。さて、ユークリッド距離は前のセッションでも見たことがあるはずです。これは基本的にポイントと重心の間にある直線距離であり、教師なし学習アルゴリズムの下で使用する際に非常に人気があります。

そして次はマンハッタン距離です。これは重心とデータポイントの間の絶対差の合計です。

ですから、これらの距離メトリクスが、私たちが話している空間にある各データポイントに重心を割り当てるために利用されます。

クラスタリングの2つの基本目標

クラスタリングにおける2つの基本的な目標は何でしょうか。距離メトリクスがあり、Lloydアルゴリズム全体が配置されましたが、私たちは何のために働いているのでしょうか。全体の目標は何でしょうか。これがうまく機能しているかどうかをどのように確認するのでしょうか。

2つのシンプルな目標によってそれを行います。

第1は、クラスター間距離を最大化することです。つまり、2つのクラスター、あるいは任意のクラスターは、最大限離れているべきです。

そうすることで、クラスターに明確な境界があることがわかります。作成されたクラスターが、そこにある隣接するクラスターから十分に離れているほどコンパクトであることがわかります。

そして私が設定する2つ目の目標は、クラスター内距離を最小化することです。

つまり、同じクラスター内では、ポイントが非常に密にコンパクトに詰め込まれているべきで、それによって私たちが割り当てている重心に大きく依存し、それに十分近いのです。これが、K-meansアルゴリズムが効率的に実行されていることを確認する方法であり、K-meansクラスタリングで私たちが目指す2つの目標です。

目的関数(WCSS)

さて、これをどのように達成するのでしょうか。目的関数によって達成します。これは慣性とも呼ばれることがあります。それはクラスター内平方和関数、WCSSです。

これはシンプルな数学関数で、各ポイントとその割り当てられたクラスターの中心との間の平方距離の合計です。

そして私たちはこのWCSSを最小化する方向に取り組んでいます。

つまり、シンプルな式があり、小さいWCSSによって何が決定されるのでしょうか。

皆さんの誰か推測してみたい人はいますか。

はい。

いいえ、内部の透明性ではありません。

ですから、小さいWCSSは、クラスターが非常にコンパクトで、重心として割り当てたものが、私たちが扱っているデータに対してうまく機能していることと等価です。それが私たちが目指す目的関数の全体です。

エルボー法

さて、距離メトリクスとしての関数があり、クラスター間距離を決定する関数があることは分かっていますが、ご存知のように、私たちは30個のデータポイントと3つのクラスターから始めました。そのKが3に等しいというのはどのように画面に入ってきたのでしょうか。

そして、そこにエルボー法が登場します。

例えば10個の異なる値に対してK-meansアルゴリズム全体を実行できますが、その10個の異なる値のうち1つが最良の値であることをどうやって知るのでしょうか。そしてそれがエルボー法によって決定されます。

そのエルボー法はどのように起こるのでしょうか。それは、私たちがLloydアルゴリズムについて話したのを覚えていますね。初期化、割り当てを行い、それからクラスターに更新し、そしてそのプロセスを何度も繰り返します。異なるKの値に対してそのプロセスを実行します。Kが1、2に等しいとしましょう。そして10まで射影します。

それから、それぞれに対してWCSSを計算します。

WCSSの式を見ました。それは1回のK-means反復全体の目的関数として出てきます。

各反復に対してWCSSを計算し、各反復でクラスターがどれだけコンパクトかを確認します。

それからプロットします。K、つまりクラスター数に対して、私たちが見つけたWCSSに対してシンプルなグラフをプロットします。

そしてエルボーを見つけます。実際にエルボーとは何でしょうか。それは最適なクラスター数を示唆するポイントです。

そしてそれはまた、最適なクラスター数をどのように取得するかという点でもあります。それは、全体の低下が値において減少するときです。

例を示します。あるデータに対してK-meansクラスタリングを実行したとしましょう。異なるKの値に対してWCSSの値を書き留めます。そして、このKとWCSSのグラフに対してプロットすると、ここに見えるように、Kが5に等しいところに鋭いエルボーがあります。

つまり、そのポイントの後、減少は減少しました。大きな段差はもうありません。それがまさにエルボーポイントです。そして、

Lloydアルゴリズム全体の実行が完了したら、このエルボー法アルゴリズムを実行し、そこにある最適なクラスター数であるエルボーを見つけるために、KとWCSSに対してこのグラフをプロットします。

さて、ここでKが5に等しいとはどういう意味でしょうか。それは、私たちが話している特定のデータ、任意のデータに対して、Kが5に等しい場合、

2つの異なるクラスター間の距離が最大であり、各クラスター内の距離が最小である、つまりクラスターが十分にコンパクトであるということです。これが私たちの解釈方法です。

コーディング演習の準備

それでは、K-meansクラスタリングアルゴリズムがどのように機能するか、エルボー法がどのように機能するかを見てきました。それでは、これを自分たちでコーディングし始めましょう。皆さん全員、DiscordのAIS Discordにアクセスできますか。メンバーですか。

はい、そこでColabノートブックを共有します。

ウェブサイトです。

さて、今は皆さんアクセスできると思います。Discordの代わりに、AIS-ASUに行ってください。

ここで皆さんと一緒に開きます。

はい。

そしてイベントに行ってください。

そこにColabノートブックのテンプレートがあります。これが今から使用するノートブックです。このコピーを作成して、それを自分のドライブで作業するようにしてください。

準備ができたら教えてください。

全員がノートブックにアクセスできましたか。

はい。

わかりました。

K-meansのスクラッチ実装

さて、ここにまとめたコーディング演習の一部として、K-meansを実装する2つの異なる方法があります。1つは、関数を定義してそのアルゴリズム全体をハードコーディングすることによって、極端にスクラッチから実装する方法です。

もう1つの手段は、K-meansの機能を持つsklearnという別のライブラリを使用することです。今からこれら両方の可能性を見ていきます。

しかし主に、スクラッチから使用して構築することから始めましょう。このノートブックのコピーを作成してから、一緒にコーディングを始めましょう。

さて、皆さんが見るコードは、これはテンプレート化されたコードです。多くのことがすでにコーディングされており、皆さんの注意が必要な唯一の場所は、K-meansの、あるいは今日話すアルゴリズムのコアロジックです。

コードを入れなければならないインスタンスでは、このシンボルをまとめました。つまり、任意の変数がクエスチョンマークに等しいというものです。

皆さんのためにこれをズームします。いつが良いか教えてください。

これはここにいる皆さんにとって良く見えますか。

はい。

わかりました。

わかりました。

さて、スクラッチからK-meansを始めるにあたって、基本的にやっていることは、K-means関数を定義し、Lloydアルゴリズムで話した4つのステップすべてをここで実施し、それからエルボー法のプロットなどを見ていきます。

関数があり、データとしてXがあり、n個のサンプルとn個の特徴があります。

行と列があり、それから指定されたKがあるので、異なる数のKをテストできます。そしてここに最大反復カウントがあり、どの反復に対しても、最大カウントが300を超えないようにしたいです。それはあまりにも多くなってしまうからです。

ここにTOLというものがあります。これは収束許容誤差です。

これは非常に高い数字にしたくありません。そうするとアルゴリズムが特にうまく機能しないからです。また、非常に小さい数字にもしたくありません。そうするとその完璧さに向かって機能するだけだからです。ですから、

これは私たちがここで定義した甘いスポットのようなもので、これが基本的に行っていることは、私たちが行っている中心割り当ての収束最適化に向けて機能することです。

そして、ランダム状態はnoneに設定されています。

さて、ここで何が起こっているかというと、まずK個の異なるランダムポイントを選択することによって重心を初期化します。どうやってそれを行うのでしょうか。インスタンス、つまりインデックスを定義することによって行います。

ここで私と一緒にコーディングしてほしいです。

つまり、ランダムなものが見えます。

NumPyを通じてランダム関数で生成しています。私たちが基本的に行うことは、これを取ることです。

そして、それに対してchoice関数を実行します。

持っているn個のサンプルに対して。

はい、持っているn個のサンプルに対して。

そして、サイズをKとします。

そしてここにreplaceという別の属性があります。

これはfalseです。

さて、これらのインデックスが与えられたら、そこにある重心を初期化したいです。これらの重心をどのように初期化するかというと、持っているデータに対して、単にindicesと書きます。

そして、それをコピーにします。

これが、Lloydアルゴリズムで議論したように、私たちが行った最初のステップです。次のステップは割り当てです。データポイントをクラスターに割り当てます。どうやってそれを行うのでしょうか。そこにある通常の距離を計算するだけです。

アルゴリズムに取り組んでいる間に話していた距離メトリクスを覚えていますか。

これが私たちが行っている距離割り当てであり、最終的にラベルが出てきます。最小の距離が欲しいですよね。ですから、ラベルをそれらの距離の最小値として割り当てます。

そしてここにdistancesと書きます。

いいえ、1ではなくXです。

次のステップは更新です。初期化を行い、割り当てを行いましたが、今度は可能な最良の方法でそれを更新したいです。

そして、まさにそれがこのスニペットが行っていることです。つまり、割り当てた特定のデータポイントに対して可能な最良のクラスターが何かを調べるために機能します。

そして収束を確認します。変化をチェックします。

はい。

ノルムの観点で。

そして変化を確認します。変化をどのように確認するのでしょうか。新しい重心として変化を確認します。

そして前のものとの差です。ですから、単に新しい重心と書きます。

さて、これが与えられたら、これがすべて完了したら、最終的な割り当てが必要ですよね。最終的な割り当ては、

ここにあるスニペットを通じて行われます。距離があり、ラベルがあり、今度は慣性を指定したいです。覚えていますか、慣性は私たちが話していたWCSS、クラスター内平方和関数です。

ですから、基本的に、私たちが話していた距離の合計としてそれを定義しました。つまり、慣性を次のように書くことができます。

numpyそしてsumを呼び出します。

それからサンプルを取ります。

それからラベルと重心を取ります。

そして二乗します。

そのセルを実行します。その前にライブラリのインポートも実行していることを確認してください。

さて、これが完了したら、エルボー慣性関数を見ています。私たちが話していたエルボー法を覚えていますか。つまり、これは基本的にその関数の表現です。

基本的に見ているのは、特定のKに対する慣性、つまり事前定義されたKの任意の添付値に対する特定のWCSSです。これは事前定義されており、ここで何も作業する必要はありませんが、エルボーの背後にある概念全体が明確であることを確認してください。

それから、エルボーグラフをプロットしたいです。これはKとWCSSの関係です。

これら2つのセルを単に実行します。皆さんも同様に行う必要があります。

K-meansを定義するための基本作業は完了しました。今度はそれをデータに適用したいです。皆さんは過去にこれらのセッションの中でアイリスデータセットに取り組んだことがあるかもしれません。

ですから、ここにこのライブラリがありました。

それを通じてアイリスデータセットをロードしました。

何が起こるかというと、そのデータセットをロードし、そのデータセット全体を利用してK-meansクラスタリングアルゴリズムに取り組みます。ですから単に

そのデータをロードし、特徴名が何であるかを確認し、それから実行したいです。

K-meansクラスタリングアルゴリズムを実行してほしいのですが、見る値は何でしょうか。

K最小値を1とします。つまり、最小限では、データ空間全体が1つのクラスターのみを持つことができます。これは良いシナリオではありませんが、ベースラインを設定する必要がありますよね。

そして、Kの最大値を10としたいです。これは、データスコープ全体、クラスターの最大数です。10を超えてはいけません。なぜなら、私たちが話しているデータの範囲を考えると、それは超混乱した状況になるからです。

そして同様に、前に述べたように、最大反復と許容誤差があり、これについては以前に話しました。そして、ランダム状態はシード番号として設定されているので、アプリケーションと再現のために保存します。

単にこの販売を実行すると、皆さんにとっても同様です。

3でエルボーが見えます。

そうですよね。でもここで。

私はこの結果だけで判断しません。なぜなら、実際にここで値3をハードコーディングしているからです。

K1から10までのこれらすべてのKの値のうち、なぜ値3を選んだのかをどうやって知るのでしょうか。

Kが3に等しいというのは、どんなデータセットに対しても取る古典的な選択です。だから皆さんのためにここにダミーを用意しました。

しかし、Kが3に等しいこの特定のシナリオがあるとして、それに対してグラフをプロットしましょう。

つまり、これは何か

このように見えます。3つの明確なクラスターがあります。中央に重心として赤いプロセスがあります。

そして、Kが1から10までの異なる値に対しても実行でき、私たちが見ている任意の与えられたデータに対して最良の特定の値がどれかを確認できます。

ここまで皆さん大丈夫ですか。はい。

エラーは何ですか。

複数の場所で大文字のXを使用しています。それがエラーかどうか確認してください。

他に問題がある人はいますか。はい。

それについて手伝ってもらえると思います。

ここまで完了した人はどれくらいいますか。わかりました。わかりました。

良いですね。

sklearnライブラリを使ったK-means実装

さて、今見たのはスクラッチで実装することでした。

しかし、sklearnライブラリには機能があるので、単にそこにあるK-meansモジュールを呼び出すことができます。そこにあるその機能を単に呼び出すことができ、それが私たちの仕事をしてくれます。割り当て、更新、再割り当て、そしてそれを繰り返すというすべてのバックエンド関数を指定する必要はありません。

それらすべては、コードで行う1回のシンプルな呼び出しで処理されます。

それはどのように起こるのでしょうか。

そのためには、単に

ここに2つの追加があり、K-meansがインポートされ、標準スケーラーがインポートされるという観点で、そこにあるコードを実行します。なぜ標準スケーラーが必要かは少し後で説明しますが、これを進めていきましょう。

ここでも、見えるように、構築したいエルボーグラフである慣性、エルボー慣性があります。それはヘルパー関数です。それから構築したいプロットがあります。それに対する関数もあります。

ですから、アイリスデータセットを再度ロードし、それがどのように機能するかを確認したいです。行うことは、このデータの標準化されたバージョンを見ることです。なぜ標準スケーラーが画面に入ってくるかというと、

データセットに4つの異なる特徴があるとしましょう。それらすべての特徴が異なる多様な範囲を持っています。つまり、最小値と最大値が非常にコンパクトな特徴があるかもしれません。

値が非常に離れている特徴があります。

持っている範囲のこの違いを考えると、それをそこに置くと、クラスター全体がダイナミクス全体を変えるつもりです。ですから、そこにあるシンプルな標準スケーラー関数を使用して、すべてのそれらの値を、すべてのそれらの特徴が同じ、

プロット項目にある平面に標準化します。プロット、つまり同じ範囲と言えるものです。

例えば、このアイリスデータセットにさまざまな特徴があるとします。

ある特徴はマイナス1から、という範囲の明確な属性を持っているとします。

そこに10まで。しかし、200から1,000の範囲にある別の特徴があるかもしれません。それは公平な差別化や公平な比較ではありませんよね。だから、すべてをある値に下げて標準化し、すべてが私たちが話している同じ空間で比較可能になるようにするのです。

ですから、そこに標準スケーラー関数があり、私たちが扱っているライブラリを利用しています。すでにデータをロードしました。ここに見えるように。さて、私たちの仕事はそれらのデータを標準化することです。どうやって行うかというと、まずスケーラーを指定します。それは標準スケーラーになります。

他にもさまざまなスケーラーがありますが、この範囲では標準スケーラーについて話しています。

それから標準化されたデータを決定したいです。私のデータがXだったとして、標準化されたデータをXZとします。これは基本的にスケーラーになり、それから持っているスケーラーに適合させます。

ですから、この属性Fit Transformを使用します。

それから、それにデータを適用します。

これを上から実行し始めます。

さて、それが完了したら、行うことは

ここでも、Kが3に等しい例がありますが、実行するとしましょう。K-meansアルゴリズムを実行していますよね。ですから、どうやって行うかというと、そこにあるK-means関数を呼び出すだけです。

ライブラリを通じて。

それから、クラスターをKに等しくしたいです。

そして、最小値と最大値は1と10です。それをどうやって決定できるでしょうか。n-init値によって決定できます。

そして、再度、最大反復が300を超えないようにしたいです。

ですから、最大反復を300として指定します。そしてここでランダム状態にシード値を入れます。これは基本的に0です。

タイプミスがあります。ここでK-meansに大文字のMが必要です。

さて、それに対するラベルを導出するために、ここにfitPredict関数があり、K-meansを入れて、欲しい値に適合させ、ラベルを取得します。ですから、これを実行すると、

同様のグラフを再び取得しますが、ここでの唯一の違いは、ライブラリに事前構築された機能を使用しており、一緒に構築した関数を通じてハードコーディングしていないということです。ですから、ここでも、Kが3に等しいのは、

最終的なエルボーポイントとして見え、私たちが扱っているデータに対する最良のクラスター数であるため選ばれています。そして、標準化された特徴空間の異なる重心についても話しています。

これをもっと実行すると。

特定の重心で割り当てられた3つの異なるクラスターという同じ値を取得します。

さて、ここまで皆さん大丈夫ですか。

はい、私たちが議論していたことに戻りましょう。さて、K-meansクラスタリングは、私たちに与えられたデータの観点で完了しました。K-meansクラスタリングは、それらのデータセットからクラスターを作成するのに役立つ教師なしアルゴリズムです。

そして、それらのクラスターは本質的に、私たちが行っている導出分析の観点で何かを意味します。

次元の呪い

次に、話すことは次元の呪いです。次元の呪いとは何でしょうか。ここにあるこのシンプルな図で理解しましょう。直線上に10個のデータポイントがあります。

これらの10個のデータポイントは十分にコンパクトに見えますよね。

これらのデータポイントを2D空間に投影するとしましょう。

今度は少しまばらです。

それを3次元空間に置いたらどうでしょうか。

範囲全体が変わりますよね。今は非常にまばらです。

ですから、次元が増えるにつれて、そこにある空間は指数関数的に拡大しています。

ですから、これをそこにあるデータセットと比較してください。n個の特徴があるとしましょう。

それは私たちが行っている分析の方法を完全にどのように変えるのでしょうか。そして、これらすべての次元を扱う方法、そしてこれらの無用な次元または有用な次元を持たないようにする方法の解決策に入る前に理解する必要があることの1つは、そこに多くの次元がある場合、範囲全体がどのように変わるかということです。

理由の1つはまばらさです。

距離測定が意味を持たなくなると、距離が増加するにつれて、範囲全体が意味を持たなくなります。

それが行うことは、より多くの次元があるにつれて、計算コストも増加します。なぜなら、私たちが目指している目標に到達するために、同じことを何度も何度も実行しているからです。

そして最後に、過学習も可能性があります。モデルが無関係な特徴から学習するだけで、私たちが学習したかったことは本質的にモデルから学習されません。

ですから、これらは私たちが防ぎたい結果です。そして、どうやってそれを防ぐのでしょうか。主成分分析と呼ばれる一般的な技術によってそれを防ぎます。

主成分分析の全体的な基盤は、特徴の数を減らすのに役立つことです。データセットが100個の特徴を持っているが、申し訳ありません、データセットが50個の特徴を持っているが、そのうち20個だけが私にとって有用であるという話をしていた方法を覚えていますか。なぜ私はその20個だけを使って分析を進めないのでしょうか。ですから、PCAが行うことは、手元にある特定のデータセットでそれらの特徴の数を減らすのに役立つということです。

そして、それが行うことは、そのプロセスで、最も重要な情報だけを保持することです。ですから、そこにある正しい特徴を捉えるのに十分に賢いのです。

それはどのように起こるのでしょうか。全体の元の特徴空間を新しい特徴空間に変更するだけです。

どうやってそれを行うのでしょうか。そこにある線形代数の方法を通じて行います。そして、特定のデータセットで使用しているすべてのデータ特徴を変換し、計算する新しい特徴空間に投影します。これは主成分と呼ばれます。

そして、使用する線形代数技術は、

固有値と固有ベクトルのようなものです。聞いたことがありますか。

そして、それが行うことは、それらを計算して共分散メトリックを生成することです。

さて、そこにある特定のデータセットに対してPCAをどのように進めていくのでしょうか。

そして、これは多くの人にとって圧倒的かもしれないことは分かっています。なぜなら、数学が今画面に入ってきているからです。しかし、どこで質問に答えてほしいか話してください。

PCAのステップ1:データの標準化

さて、ステップ1で何が起こっているかというと、まずデータを標準化することから始めたいです。ここで何が起こっているかというと、K-meansで話した同様のケースで、データは十分に変化している可能性があります。給与がドル単位、年齢が数字であるデータがあるとします。

身長と体重には異なる次元があります。

これらすべてを一緒にどうやって比較するのでしょうか。

標準化によって行います。すべてのそれらの値をある空間に持ってきて、特定の同様の平面にあることを望みます。そうすることで比較が公平になります。特徴に対して部分的ではありません。

そして、ここで使用するシンプルな式は

X引くミューをシグマで割ったもので、ミューは独立特徴の平均、シグマは独立特徴の標準偏差であり、前のセッションで話した通常の方法で計算されます。

標準偏差が計算されたら、今度は共分散行列の計算に向けて作業します。

PCAのステップ2:共分散行列の計算

さて、共分散メトリックはどのようにここで画面に入ってくるのでしょうか。それを持つことの本質は何でしょうか。共分散は実際に何を意味するのでしょうか。共分散は、特定の空間で2つの特徴が互いにどのように関連しているかを確認するシンプルな尺度です。

ですから、ここで何が起こるかというと、増加要因または減少要因があります。

さて、それらが高度に相関している場合、それらが1つの方向に投影される傾向が増加しますよね。同様の方法で機能するかもしれません。

そして、それらが非常に異なる共分散を持っている場合、非常に小さな共分散がある場合、同じ方向に機能しないだけです。私たちが話しているケースとは全く反対です。

ですから、行うことは共分散メトリックを見つけることです。共分散を見つけるために使用するシンプルな式は、

申し訳ありません、私の間違いです。ここで表されています。

ですから、そこにある2つの異なるポイント間の共分散を見つけます。それから各データポイントに対してそれを行います。そして、

そこにあるすべての特徴に対してそれを行います。ですから、それから行列を生成します。ですから、約4つの属性、つまり4つの特徴のデータがあるとします。それに対して4×4の共分散行列を生成します。各特徴が各サンプル、またはそこにある各特定のケースにどのように明確に影響するかを確認するためです。

ですから、ここで言及したい1つのことは、得られる可能性のある値は正の結果であり、それが意味することは、

話したように一緒に増加するということです。しかし、負の結果は非常に明白で、一方が上がると他方が下がるかもしれないということです。それが、私たちがまとめている共分散メトリックの観点で異なるサイン値が機能する方法です。

PCAのステップ3:主成分の発見

ステップ3は、主成分を見つけることです。どうやってそれを行うのでしょうか。固有値と固有ベクトルによって行います。

ですから、方向は、例えば、一方が上がると他方が下がる。一方が増加すると他方が減少する、それは共分散行列の固有ベクトルから来ます。

そして、各特徴がどれだけの影響を与えているかという観点での重要性は、そこにある固有値から来ます。

どうやってそれを計算するか、前のセッションで見てきたと思います。今その詳細に入ると、本当に混乱することになります。しかし、ここで理解してほしいことは、PCAが行うことは、異なる軸、第1主成分である主成分1、または第2主成分を識別することです。それらは互いにどのように異なるのでしょうか。

見えるように、そこにある第1主成分、特徴空間全体がどのように広がっているかという観点での最大分散の方向です。または第2主成分、これは持っている第1主成分に対する次の最良の方向は何かということです。

私たちが話している通常は直交しているものです。しかし、それが私たちがそれを見る方法です。そして、それに対する数学をどのように行うのでしょうか。ここにシンプルな関数があります。AXはラムダXに等しい、それは本質的に意味します、

任意のPCA、任意の特別な固有ベクトルに対して。

方向とそのすべては、そこにあるこれらの計算によって決定されます。そこにあるこの式によって、そして方向は、私が言ったように、固有ベクトルから来て、重要性は固有値によって測定されます。

さて、次のステップは、これらすべてを計算したとして、トップの方向が何であるか、そしてそれらがデータをどのように変換するかを確定したいということです。

PCAのステップ4:データ変換

ですから、固有ベクトルとそれらに対応する固有値をそこで計算した後、PCAが行うことは、それらすべてをランク付けし、それからトップK個の成分を選択することです。

最も多くの分散をキャプチャする成分、95%以上と言いましょう。つまり、基本的に分析の範囲全体がどのように見えるかを決定します。

それから、行うことは、そこにあるすべてのそれらの特徴から最終的に独自の削減されたデータセットを作成し、持っている元のトップK成分、利用してきたものだけを使用します。

ですから、画面上の画像を見ると、

シンプルなグラフがあります。そこには2つの特徴があります。1つは半径で、もう1つはデータです。半径は半径で測定され、軸はそこにある黒い軸で表されています。

半径と面積です、申し訳ありません。はい。それからPCAが行うことは、2つの新しい方向を識別することです。PC1が見えますか。

それからPC2が見えますか。

これらは、見つけた削減されたデータの主成分です。さて、これら2つの軸は元のものの回転されたバージョンです。

私たちが話しているものです。ですから、元の軸から始めて、今は回転した軸について話しています。

ですから、見えるように、PC1はデータの最大分散をキャプチャします。それは本質的に、情報の大部分を保持していることを意味します。一方、PC2は、そこにある残りの変動をキャプチャし、PC1に垂直です。つまり、PC1に直交しています。

ですから、このデータの広がりはPC1の概念に沿ってはるかに広く、そして、

そして、PC2と比較して私たちが話しているもの、それはそこにかなり明白です。ですから、なぜPC1が、

私たちが話しているこの特定のケースに対する次元削減に利用されているのです。

そして完全に、何が起こるかというと、全体の範囲がシフトされ、今は分析で使用される最良の属性がそこにあります。

PCAのコーディング実装

コーディングに戻りましょう。

はい。

無限の計算能力があったとしても、まだこれを行いますか。はい。

なぜこれを行うかというと、計算ステップを減らしたいからだけではなく、

この分析を行うことによって、そこにある最も本質的な特徴をキャプチャするからでもあります。それは、これから行うコーディングでも見ることになるものですが、100個の特徴があっても、すべての100個が分析に含まれる必要があるわけではありません。

それらのいくつかは何も貢献していないかもしれず、私たちが到達している最終目標の観点でより良い他のものを利用するかもしれません。

10,000でも入れることができます。

議論のための参照。

データが増えるとモデルへのトラフィックが増えるので、それを維持する方が良いです。

何が重要かということです。

なるほど、ありがとうございます。

わかりました。

ですから、再生すると、PCAをスクラッチから実装しましょう。それから、K-meansで見たように、PCAにも事前構築されたものがあります。ですから、それを見るために、ダミーデータがあるとします。歩数があり、安静時心拍数があり、睡眠時間があり、年齢があり、その人がアクティブかどうかを判断しようとしています。

ですから、ここに出した条件があります。歩数が9,000より大きい場合、または安静時心拍数が60未満で、睡眠時間が7.5時間より多い場合、その人をアクティブな人として設定します。

ですから、ここで行っていることは、人がアクティブかどうかを判断するためにこれらの特徴を利用していることです。ですから、特徴としてXがあります。これは深さ、安静時の時間、睡眠時間、年齢、安静時心拍数であり、安静時心臓ではありません、はい。それから、人がアクティブかどうかとしてYがあります。

ですから、PCでデータを最初に標準化する方法を見ましたよね。そして、それに向けて作業しましょう。ですから、そこにデータがあり、それを実装するだけです。

持っているこの特定のデータのデータフレームも作成します。定義します、

持っている条件に基づいて、アクティブまたは非アクティブな人。

分析と投影の観点で欲しいものの観点でデータを分割しました。次は標準化です。どうやってそれを行うのでしょうか。ミューは平均でしたよね。ですから、単に、データ全体を取ります。

これはXです。そしてそれに対して平均を呼び出します。

これがデータの見え方です。

わかりました。

さて、このデータが与えられたら、平均であるミューを計算していますよね。ですから、単にX.meanと入れます。

Xを0に等しいと入れます。

そして、keep dimensionsをtrueに等しいと入れます。

それから別のものがありました。

私たちが話していたZ関数にあるもの、標準化関数、シグマとして、それは標準偏差です。どうやってそれを計算するのでしょうか。単にXの標準偏差と入れ、それからここでも同様のことをします。

これが完了したら、どの時点でも、計算している得点の観点での除算が、どの時点でも0による除算が起こらないことを確認するステップがあります。なぜなら、そうすると全体が欲しいプレートに入らないからです。それは起こってほしくないことです。

ですから今、次に、Xがありました。今度は標準化されたXに向けて作業します。これは基本的にスライドで話したのと同じ関数です。

それからシグマで割ります。

この関数を実行します。

標準化が完了したら、共分散行列を取得する方向に作業します。そして、それは持っている機能で非常にシンプルです。ですから、

明示的に、できることはここにNPと書くことです。

ドット共分散、これは共分散メトリックを計算するために持っている機能です。

それから、できることは

ここに中心化されたデータがあります。

その中心化されたデータを呼び出します。

それから、行変数を思考に対置したものがあります。

すべてのそれらの中に特徴があるべきです。

ですから、共分散行列は完了しました。それから固有分解を行います。なぜなら対称行列なので、持っている機能を通じて簡単に行うことができます。それからPCAの下で行わなければならない計算のためにそれらをソートし、それから行うことは単にそれを見ている特徴空間に投影することです。

完全に最終目標は分散比を見ることです。その分散比をどのように見るのでしょうか。固有値を取ることによってです。

それからそれの合計で割ります。

これが完了して、次のセルを実行すると、次のことが得られます。

2つの成分特徴がどのように異なるか。

ですから、かなり明白に、PC1が最も貢献しており、それはこのデータセットから導出しようとしている本質を完全に保持しています。

そして、これは皆さんのためにまとめた別のプロットで、私たちが話していたライフスタイルデータについて、PC1とPC2がどのように異なるかを見るためのものです。

ですから、ここで何が起こっているかというと、固有値を見てみましょう。

4.17、0.0672、0.0132、そして0.008が見えます。

私がおそらく最初のものを選ぶことは非常に明白です。なぜなら、それは私が行わなければならない計算のために最も本質を保持している成分だからです。

それから、話していた説明分散比です。

97%は、私が扱っているPC1で簡単に行うことができるので、なぜ私は他の特徴を利用して、行っている分析の考慮に入れるのでしょうか。

それから、そこに主成分行列があります。これは、各特徴がどのように、

PC1、PC2、PC3、PC4を考慮に入れたときに変化するかです。

ですから、それに対してさまざまな値があります。値はそれが引き起こす影響であり、符号は方向を与えます。ですから、一方が上がると他方が下がり、それが範囲全体が変化する方法の全体です。

sklearnを使ったPCA実装

ですから、これがスクラッチバージョンから行っていた方法ですが、ライブラリから取るという観点でのコア機能バージョンを見てみましょう。ですから、

この同様のデータを再び持っています。同じ仕事をしていますが、今度は、全体の計算がそこでの1回の呼び出しだけに削減されたのが見えるでしょう。

ここでもスケーリングしています。私が自分でスケーリングを行う代わりに、そこにある標準スケーラーを呼び出しただけです。これは、私たちがスコアを計算することによって行っていたスケーリングの同様の仕事をします。

ここで行わなければならないことは、そこにある関数を呼び出すだけです。ですから、PCAは実際には私たちが話しているsklearnライブラリ、つまりscikit-learnライブラリの下にあり、それから成分を2として指定しています。

これを行うだけで、そして、

それから、持っているデータに適合させるだけです。

ですから、スケーリングされたデータがありました。それにPCAを適用するだけです。

結果は明らかに以前見たものと同じになりますが、核心的なアイデアは、ライブラリとそこにある機能の助けを借りて、それがどのように簡単に行えるかを皆さんに伝えることです。

それから再び、同様のグラフです。話した最初の成分が、

私たちが行っている分析の全体的な本質を持っています。

わかりました。

これは主成分分析についてでした。それは1つの技術ですが、このPCAがどのように起こるかの背後には数学的エンジンがあり、そのエンジンは基本的に特異値分解と呼ばれています。

特異値分解(SVD)

それにはさらに多くの数学があります。ゆっくり進めて、なぜ、どのようにそれが起こるかを理解しようと思います。

ですから、SVDで何が起こるかというと、それは、まず第一に、それが何であるかを理解しましょう。ですから、それは基本的に基本的な行列因数分解技術であり、任意の行列を3つの異なる行列に分解します。そして何が起こるかというと、その日はより意味のあるものになります。

なぜより意味のあるものになるかというと、一般的な好みについて教えてくれる部分が1つあり、特徴がどれだけ重要かについての1つの部分があり、もう1つは特徴がどれだけ似ているかについてあるからです。

それは、そこにある推薦システムや、構築するユーザーアイテムメトリックで非常に利用されています。特定のアイテムとユーザーのトランザクション、相互作用がどのように見えるかを確認するためです。

そして、ここで行っていることは、これらすべての行列を取り、3つの異なる金属に分解することです。ですから、その1つの部分は、任意のメトリック、そこにある任意のデータについて話しているとして、それは、人々について、彼らの一般的な好みは何かを教えています。

そして次の部分、シグマですが、それは各要因がどれだけ重要かを教えてくれます。つまり、映画評価、またはユーザーアイテム評価を持つデータに対して、各評価がどれだけ重要か。そして最後に、V転置メトリックがあり、それは、

製品がどのように変化するか、それらがどれだけ似ているか、私たちが見ている範囲からどれだけ離れているかです。そして数学的には、持っている任意のM×Nデータ、または持っている行列に対して、下部にあるこのシンプルな数学式によってSVDを決定します。

これが実際にどのように機能するかの簡単な息抜きとして、皆さんのためにこのシンプルな例をまとめました。このデータがあるとしましょう。そして、ユーザーアイテムの相互作用について話しています。

3人の異なるユーザーがいて、2つの異なるアイテムがあり、それらに対する評価があります。

ですから、SVDから考案したいこれらの行列はこの特定のデータに対して何を意味するのでしょうか。

ですから、最初の部分としてUがあります。これは、ある意味で、

人々について、人々が話しているアイテム全体をどのように好むかを教えてくれます。

それから、次はこれらの評価がそこにいる異なる人々にとってどれだけ重要かです。

そして最後に、これらの、

アイテムが互いに範囲内でどれだけ似ているかで、あるアイテムが別のものと密接に関連している場合、アイテムAを好む人がアイテム2も好むかもしれないという高まった密度があります。それが、ここで私たちが目指している全体的な本質です。

ですから、これが計算です。その背後にはさらに多くの数学がありますが、その詳細に入ると、少し混乱することになります。ですから、コーディングの観点から見てみましょう。ここで何が起こるかというと、戻って、

これまで利用してきた同じデータを利用します。

アクティブなライフスタイルデータセットです。

データを再びスケーリングします。

それから、そして、行うことは、そこにあるライブラリからSVDを利用することです。

ですから、基本的に行うことは、numpyを呼び出します。

そしてSVDを利用します。

スケーリングされたデータセットを利用します。

それから、full matricesがfalseに等しいという属性があります。

完了したら、これらの形状を見ます。ですから、そこにある最初の行列は16、4です。4つの異なる特徴があります。それらに対する特異値があり、また見ているのはV転置の形状で、これは4×4行列です。

さて、言ったように、これはPCAと密接に関連しています。行うことは関係を確立することです。

それから、PCAで行ったように、分散比も計算します。

結果はここで似たように見えますが、核心的なイデオロギーは、SVDがPCAの背後にあるエンジンをどのようにチャネライズするかを理解することです。

ですから、これらの値は、見ているかもしれませんが、以前に行ったPC分析で見たものと非常に似ており、それは完全に私たちに、それらに対する異なる計算があることを伝えていますが、両方とも持っている次元削減の目標に向かって投影しています。

同様に、データセットの観点で見ると、PC1、PC2、再びPC1が最も貢献しているのが見え、2D投影も似ていないように見えます。

それから、2つの成分を使用した再構成誤差があります。それは、

ゼロポイントについてです。

はい、0.07で、これは95%をはるかに上回っています。データがどのように見えるかを描写し分析し、行いたい分析のために全体の次元を削減するという良い仕事をしています。

これは完全に、持っている主成分削減についてです。

はい、私の方から持っているのはそれで全部だと思います。

この発表もそこで行いたいと思います。明日、別のイベントがあります。それは、

そこにいるすべての技術者とまったりした時間を過ごすための息抜きイベントです。

技術的なことについて話すかもしれないし、そうでないかもしれませんが、全体的な本質は息抜きをすることであり、これらすべてを行うことに向かって働くだけではありません。

一緒に。ですから明日、これが起こります。それはVortex Apartmentsで行われています。私たちがまとめたバーベキューです。それはSoda、Wics、GDSCとのコラボレーションです。

ですから、多くの人々がそこにいます。ネットワーキングにも良いです。ですから、その時に皆さん全員に会えることを願っています。

さて、食べ物は外にあります。

コメント

タイトルとURLをコピーしました