NumPy ダイアグラム、配列を視覚的に理解するためのチュートリアル

NumPy ダイアグラム、配列を視覚的に理解するためのチュートリアル

NumPy パッケージは、Python エコシステムにおけるデータ分析、機械学習、科学計算の主力です。ベクトルおよび行列演算が大幅に簡素化されます。 scikit-learn、SciPy、pandas、tensorflow などの主要な Python パッケージでは、アーキテクチャの基本的な部分として NumPy を使用しています。 NumPy を使用すると、数値データを細かく分析できるだけでなく、上記のライブラリの高度な例の処理とデバッグも大幅に容易になります。

この記事では、NumPy の主な使用方法と、機械学習モデルに入力する前にさまざまな種類のデータ (表、画像、テキストなど) を表現する方法について説明します。

  1. numpyをnpとしてインポートする

配列の作成

Python リストを渡して np.array() を使用することで、NumPy 配列 (主に多次元配列) を作成できます。この例では、Python によって作成された配列が下の図の右側に表示されています。

通常、NumPy で配列の値を初期化する必要があります。そのために、NumPy は ones()、zeros()、random.random() などのメソッドを提供します。 NumPy で生成したい要素の数を渡すだけです。

配列を作成したら、それを使って何でもできるようになります。

配列操作

配列操作機能を実証するために、2 つの NumPy 配列を作成しましょう。以下の 2 つの配列を data と ones と呼びます。

位置によって追加するには(つまり、各行をそれに応じて追加するには)、データ + 1 を入力するだけです。

これらのツールを学び始めると、このような抽象化によって、ループ内で同様の計算を記述する必要がなくなることがわかりました。この種の抽象化により、物事をより高いレベルで考えることができるようになります。

「追加」に加えて、次の操作も実行できます。

多くの場合、配列と単一の数値間の演算 (つまり、ベクトルとスカラー間の演算) を実行できるようにする必要があります。配列がマイル単位の距離を表しており、それをキロメートルに変換したいとします。データを入力するだけ* 1.6:

NumPy がこの操作をどのように理解するかわかりますか? この概念はブロードキャストと呼ばれ、非常に便利です。

索引

Python リストをスライスするのと同じように、NumPy 配列を任意にインデックス付けしてスライスすることができます。

重合

NumPy は集計関数も提供します:

min、max、sum に加えて、mean を使用して平均を取得したり、prod を使用してすべての要素の積を取得したり、std を使用して標準偏差を取得したりすることもできます。

さらなる次元

上記の例はすべて 1 次元のベクトルを扱っています。 NumPy の優れた点は、上記のすべての方法を任意の数の次元に適用できることです。

1. マトリックスを作成する

次の形状の Python リストを渡すと、NumPy でそれを表す行列が作成されます。

  1. np.配列([[1,2],[3,4]])

上で説明したメソッド (ones()、zeros()、random.random()) を使用することもできます。作成する行列の次元を記述するタプルを記述するだけです。

2. 行列演算

2 つの行列が同じサイズの場合、算術演算子 (+-*/) を使用して行列を加算および乗算できます。 NumPy はこれらを位置ごとの操作として扱います。

このタイプの演算は、異なるサイズの行列に対しても実行できますが、次元の 1 つが 1 の場合 (つまり、行列に 1 つの列または行しかない場合) に限ります。この場合、NumPy はブロードキャスト ルールを使用して演算を実行します。

3. ドット積

算術演算と行列演算の主な違いは、行列の乗算ではドット積が使用されることです。 NumPy はすべての行列に dot() メソッドを提供しており、これを使用して他の行列とのドット積を実行できます。

2 つのマトリックスの隣接するエッジの寸法が同じである必要があることを強調するために、上の画像の右下隅にマトリックスの寸法を追加しました。上記の操作は次のように考えることができます。

4. 行列インデックス

インデックス作成とスライス操作は、行列を扱うときにさらに便利になります。

5. マトリックス集約

ベクトルを集約するのと同じように、行列を集約することができます。

行列内のすべての値を集計できるだけでなく、axis パラメータを使用して行または列全体の集計を実行することもできます。

6. 転置と変形

行列を扱うときに一般的に必要になるのは回転行列です。 2 つの行列に対してドット積を実行し、それらの共有次元を揃える必要がある場合は、転置が必要になることがよくあります。 NumPy 配列には、行列の転置を見つけるための便利なメソッド T があります。

より高度なケースでは、特定の行列の次元を変換する必要がある場合があります。機械学習アプリケーションでは、モデルがデータセットとは異なる入力形状を必要とすることがよくあります。このような場合、NumPy の reshape() メソッドが役立ちます。必要な新しい次元をマトリックスに割り当てるだけです。次元に -1 を割り当てると、NumPy は行列に基づいて正しい次元を推測します。

さらなる次元

NumPy は上記のすべてを任意の次元で実装できます。中心的なデータ構造が ndarray (N 次元配列) と呼ばれるのには理由があります。

多くの場合、新しい次元を処理するには、NumPy 関数の引数にコンマを追加するだけです。

実用的な使い方

以下は、NumPy で実現できる便利な機能の例です。

1. 式

行列とベクトルを扱う数式を実装することは、NumPy の重要な使用例です。これが、NumPy が Python コミュニティのお気に入りである理由です。たとえば、平均二乗誤差の式は、回帰問題に対する教師あり機械学習モデルの中核となります。

この数式を NumPy で実装するのは簡単です。

これの素晴らしい点は、NumPy は予測とラベルに 1 つの値が含まれているか、1000 個の値が含まれているかを気にしないことです (サイズが同じであれば)。上記のコード行の 4 つの操作を、次の例で順番に実行できます。

予測ベクトルとラベル ベクトルの両方に 3 つの値が含まれており、n の値は 3 であることを意味します。減算後、得られる値は次のようになります。

次にベクトルを二乗すると次のようになります。

これらの値を合計します。

得られた結果は、予測のエラー値とモデル品質スコアです。

2. データ表現

処理してモデルを構築する必要があるすべての種類のデータ (スプレッドシート、画像、オーディオなど) を検討してください。その多くは n 次元配列での表現に適しています。

(1)表とスプレッドシート

スプレッドシートまたは値の表は、2 次元の行列です。スプレッドシート内の各ワークシートは、独自の変数になることができます。 Python で最も人気のある抽象化は pandas データフレームです。これは実際に NumPy を使用し、その上に構築されています。

(2)音声と時系列

オーディオ ファイルはサンプルの 1 次元配列です。各サンプルは、オーディオ信号の小さな部分を表す数値です。 CD 品質のオーディオには 1 秒あたり 44,100 個のサンプルが含まれ、各サンプルは -65535 から 65536 までの整数です。つまり、10 秒の CD 品質の WAVE ファイルがある場合、それを長さ 10 * 44,100 = 441,000 の NumPy 配列に読み込むことができます。オーディオの最初の 1 秒を抽出したい場合は、ファイルを audio という NumPy 配列にロードし、audio[:44100] を取得するだけです。

以下はオーディオファイルです。

時系列データ(時間の経過と共に変化する株価など)についても同様です。

(3)画像

画像は、サイズ(高さ x 幅)のピクセルのマトリックスです。

画像が白黒(グレースケール)の場合、各ピクセルは 1 つの数値(通常は 0(黒)から 255(白)まで)で表されます。画像の左上隅を 10 x 10 ピクセルで切り取りたいですか? NumPy でそれができます。

以下は画像ファイルの一部です。

画像がカラーの場合、各ピクセルは赤、緑、青の 3 つの数字で表されます。この場合、3 次元配列が必要になります (各セルには 1 つの数値しか含められないため)。したがって、カラー画像はサイズ (高さ x 幅 x 3) の ndarray で表されます。

(4)言語

テキストを扱う場合、状況は異なります。テキストのデジタル表現には、語彙(モデルが認識する一意の単語のリスト)を構築するステップと埋め込みステップが必要です。次のテキストを数字で表す手順を見てみましょう。

モデルは大量のテキストを見て、数字を使って詩人の言葉を表現する必要があります。これを小さなデータセットで実行し、語彙(71,290語)を構築することができます。

この文は、トークン(共通のルールに基づいた単語または単語の一部)の配列に分割できます。

次に、各単語を語彙の ID に置き換えます。

これらの ID はまだモデルに多くの情報価値を提供しません。したがって、この単語セットをモデルに入力する前に、トークン/単語を埋め込み(この場合は 50 次元の word2vec 埋め込み)に置き換える必要があります。

ご覧のとおり、この NumPy 配列の次元は [embedding_dimension x sequence_length] です。ディープラーニング モデルは、パフォーマンス上の理由から、バッチ サイズの最初の次元を保持する傾向があります (多くの例を並行してトレーニングすると、モデルのトレーニングが高速化されるため)。この場合、reshape() が非常に便利になります。 BERT のようなモデルでは、[batch_size、sequence_length、embedding_size] という形式の入力が想定されています。

これは、モデルが処理して動作できる数値ボリュームです。他の行は空のままですが、モデルがトレーニング (または予測) するための他の例が入力されます。

オリジナルリンク: https://jalammar.github.io/visual-numpy/

[この記事は51CTOコラム「Machine Heart」、WeChatパブリックアカウント「Machine Heart(id:almosthuman2014)」によるオリジナル翻訳です]

この著者の他の記事を読むにはここをクリックしてください

<<:  ビデオPSツール!文字の非表示と透かしの除去:CVPRで発表されたこの研究はオープンソース化されました

>>:  AI基盤を強化し、業界の実践に注力する---WOTグローバル人工知能技術サミット機械学習実践フォーラムの記録

ブログ    
ブログ    

推薦する

ディープフェイクで映画を作る時代が来た:ディズニーが高解像度の顔を変えるアルゴリズムを公開

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

Python を使ってシンプルな遺伝的アルゴリズムをゼロから実装する

遺伝的アルゴリズムはランダムなグローバル最適化アルゴリズムです。人工ニューラル ネットワークと並んで...

ChatGPT 1 周年、Altman が OpenAI に復帰!帰国の内幕を明かすイリヤの所在はまだ不明

ChatGPT の 1 周年に、OpenAI は公式発表を行いました: Sam Altman が O...

アンドリュー・ン氏との独占インタビュー: 今後 10 年間の AI、ハードウェア優先からデータ優先へ

現在の仕事に飽きて方向転換したいと思ったことはありませんか?もしそうなら、あなたは決して一人ではあり...

Python+AI で古い写真をカラー化

こんにちは、みんな。今日も引き続き、興味深い AI プロジェクトを皆さんと共有したいと思います。前回...

メタバースの錬金術には物理の基本法則が必要です! Nvidia副社長:現実世界のデータトレーニングは不要

次のことは直感に反するように思えるかもしれません: AI が現実世界のアプリケーション シナリオに適...

ICLR 2021 調査ではゲームスキル パッケージについて調査?順序付けられた記憶決定ネットワークは、次のことを達成するのを助けます

[[394114]]木を切る、狩りをする、家を建てるなどの長いゲームビデオを機械に見せるとします。モ...

KuaishouとNVIDIAが提携し、業界最先端のGPUコンピューティングインフラストラクチャを展開

1日あたり2億人以上のアクティブユーザーを抱える快手には、130億本以上の短編動画が蓄積されており、...

自動運転の研究の方向性は間違っているのか?

1 知覚ソリューション: 純粋な視覚とマルチセンサー融合自動車が自動運転を実現するには、まず周囲を...

行列の乗算は乗算を必要とせず、100倍高速化、MITが近似アルゴリズムをオープンソース化

[[421266]]この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI...

小売業界における人工知能の応用

多くの小売業者にとって、2020年のコロナウイルスの流行は、その存続と運営に深刻な影響を及ぼしました...

...

...

バイナリ検索ツリーの検証: インターネット上の古典的なアルゴリズム

[[427951]]この記事はWeChatの公開アカウント「Programmer Bear」から転載...