例を用いたマルコフ連鎖の紹介–Pythonを用いたマルコフ連鎖



マルコフ連鎖の概要に関するこの記事は、マルコフ連鎖の背後にある基本的な考え方と、Pythonを使用してそれらをモデル化する方法を理解するのに役立ちます。

マルコフ連鎖の紹介:

GoogleがWebページをどのようにランク付けするのか疑問に思ったことはありませんか?調査を行った場合は、マルコフ連鎖の概念に基づくPageRankアルゴリズムを使用していることを知っておく必要があります。マルコフ連鎖の概要に関するこの記事は、マルコフ連鎖の背後にある基本的な考え方と、それらを実際の問題の解決策としてモデル化する方法を理解するのに役立ちます。

取り上げるトピックのリストは次のとおりです このブログで:





  1. マルコフ連鎖とは何ですか?
  2. マルコフ性とは何ですか?
  3. 例でマルコフ連鎖を理解する
  4. 移行マトリックスとは何ですか?
  5. Pythonのマルコフ連鎖
  6. マルコフ連鎖アプリケーション

Pythonを使用したデータサイエンスと機械学習に関する詳細な知識を得るには、ライブに登録できます 24時間年中無休のサポートと生涯アクセスを備えたEdurekaによる。

マルコフ連鎖とは何ですか?

アンドレイマルコフは1906年に最初にマルコフ連鎖を導入しました。彼はマルコフ連鎖を次のように説明しました。



特定の仮定と明確な確率的ルールに応じて、ある状態から別の状態に遷移する確率変数を含む確率過程。

これらのランダム 変数は、と呼ばれる重要な数学的特性に基づいて、ある状態から状態へと遷移します。 マルコフ性。

これは私たちに質問をもたらします:



マルコフ性とは何ですか?

Discrete Time Markov Propertyは、ランダムプロセスが次の可能な状態に遷移する確率の計算は、現在の状態と時間にのみ依存し、それ以前の一連の状態とは無関係であると述べています。

ランダムプロセスの次の可能なアクション/状態が前の状態のシーケンスに依存しないという事実は、マルコフ連鎖を変数の現在の状態/アクションのみに依存するメモリのないプロセスとしてレンダリングします。

これを数学的に導きましょう:

ランダムプロセスを{Xm、m = 0,1,2、⋯}とします。

Javaでハッシュマップを実装する方法

このプロセスは、次の場合にのみマルコフ連鎖です。

マルコフ連鎖式-マルコフ連鎖入門-エドゥレカ

マルコフ連鎖–マルコフ連鎖の紹介– Edureka

すべてのm、j、i、i0、i1、⋯im&minus1

有限数の状態、S = {0、1、2、⋯、r}の場合、これは有限マルコフ連鎖と呼ばれます。

ここで、P(Xm + 1 = j | Xm = i)は、ある状態から別の状態に遷移する遷移確率を表します。ここでは、遷移確率は時間に依存しないと想定しています。

つまり、P(Xm + 1 = j | Xm = i)は「m」の値に依存しません。したがって、要約することができます、

マルコフ連鎖の公式–マルコフ連鎖の紹介– Edureka

したがって、この方程式は マルコフ連鎖。

例を挙げて、マルコフ連鎖が正確に何であるかを理解しましょう。

マルコフ連鎖の例

例を示す前に、マルコフモデルとは何かを定義しましょう。

マルコフモデルとは何ですか?

マルコフモデルは、変数がマルコフ性に従うように確率変数をモデル化する確率モデルです。

次に、マルコフモデルがどのように機能するかを簡単な例で理解しましょう。

前述のように、マルコフ連鎖はテキスト生成およびオートコンプリートアプリケーションで使用されます。この例では、例の(ランダムな)文を見て、マルコフ連鎖を使用してモデル化する方法を確認します。

マルコフ連鎖の例–マルコフ連鎖の紹介– Edureka

上記の文は私たちの例です。あまり意味がないことはわかっています(そうする必要はありません)。ランダムな単語を含む文です。ここで、

  1. キー 文中の一意の単語を示します。つまり、5つのキー(1、2、あられ、幸せ、エデュレカ)

  2. トークン 単語の総数、つまり8トークンを示します。

次に、これらの単語の出現頻度を理解する必要があります。次の図は、各単語とその単語の頻度を示す数字を示しています。

キーと周波数–マルコフ連鎖の紹介– Edureka

したがって、ここの左側の列はキーを示し、右側の列は周波数を示します。

上記の表から、キー「edureka」は他のキーの4倍であると結論付けることができます。このような情報を推測することは、特定の時点でどの単語が発生するかを予測するのに役立つため、重要です。例文の次の単語を推測する場合は、出現確率が最も高い「edureka」を使用します。

確率について言えば、あなたが知っておくべきもう一つの尺度は 加重分布。

私たちの場合、「edureka」の加重分布は、頻度が合計8つのトークンのうち4であるため、50%(4/8)です。残りのキー(1、2、あられ、幸せ)はすべて、発生する可能性が1/8です(&asymp 13%)。

加重分布を理解し、特定の単語が他の単語よりも頻繁に発生する方法について理解したので、次のパートに進むことができます。

マルコフ連鎖を理解する–マルコフ連鎖の紹介– Edureka

上の図では、文の始まりと終わりを示す2つの単語を追加しました。これを行った理由は、以下のセクションで理解できます。

次に、これらのキーにも頻度を割り当てましょう。

更新されたキーと周波数–マルコフ連鎖の概要– Edureka

それでは、マルコフモデルを作成しましょう。前述のように、マルコフモデルは、特定の状態で確率変数をモデル化するために使用され、これらの変数の将来の状態は、過去の状態ではなく現在の状態にのみ依存します。

したがって、基本的にマルコフモデルでは、次の状態を予測するために、現在の状態のみを考慮する必要があります。

次の図では、文の各トークンが別のトークンにどのようにつながるかを確認できます。これは、将来の状態(次のトークン)が現在の状態(現在のトークン)に基づいていることを示しています。したがって、これはマルコフモデルの最も基本的なルールです。

次の図は、トークンのペアがあり、ペア内の各トークンが同じペア内の他のトークンにつながることを示しています。

マルコフ連鎖ペア–マルコフ連鎖入門– Edureka

次の図では、ペアにできる次の可能なトークンの配列とともに各キーを示す構造表現を作成しました。

マルコフ連鎖ペアの配列–マルコフ連鎖の概要– Edureka

この例を要約すると、上記の例で見たキーとトークンの配列を使用して文を形成する必要があるシナリオを考えてみます。この例を実行する前に、もう1つの重要な点は、2つの初期メジャーを指定する必要があることです。

  1. 初期確率分布(つまり、時間= 0での開始状態、(「開始」キー))

  2. ある状態から別の状態にジャンプする遷移確率(この場合、あるトークンから別のトークンに遷移する確率)

最初に加重分布を定義したので、確率と初期状態があります。次に、例を見てみましょう。

  • したがって、最初のトークンは[開始]です。

  • 次に、可能なトークンは1つだけです。つまり、[1つ]

  • 現在、文には1つの単語、つまり「1つ」しかありません。

  • このトークンから、次に可能なトークンは[edureka]です。

  • 文が「oneedureka」に更新されます

  • [edureka]から、次のトークンのいずれかに移動できます[two、hail、happy、end]

  • 「2つ」が選択される可能性は25%です。これにより、元の文が形成される可能性があります(1つのedureka、2つのedureka、hail edureka、happy edureka)。ただし、「end」を選択すると、プロセスが停止し、新しい文、つまり「oneedureka」が生成されます。

マルコフモデルを作成してテストケースを実行しただけなので、背中を軽くたたいてください。上記の例を要約すると、基本的に現在の状態(現在の単語)を使用して次の状態(次の単語)を決定しました。そしてそれがまさにマルコフ過程です。

これは確率過程であり、変数の将来の状態が現在の状態にのみ依存するように、確率変数が1つの状態から別の状態に遷移します。

それを次のステップに進めて、この例のマルコフモデルを引き出しましょう。

状態遷移図–マルコフ連鎖の概要– Edureka

上の図は、状態遷移図として知られています。これについては、以下のセクションで詳しく説明します。この図は、ある状態から別の状態への遷移と確率を示していることを覚えておいてください。

Javaのスタックおよびヒープメモリ

図の各楕円はキーを表しており、矢印はそれに続く可能性のあるキーに向けられていることに注意してください。また、矢印の重みは それぞれの状態から/への遷移の確率または加重分布。

以上がマルコフモデルの仕組みです。それでは、マルコフ過程におけるいくつかの重要な用語を理解してみましょう。

遷移確率行列とは何ですか?

上記のセクションでは、簡単な例を使用してマルコフモデルの動作について説明しました。次に、マルコフプロセスの数学的用語を理解しましょう。

マルコフ過程では、行列を使用して、ある状態から別の状態への遷移確率を表します。この行列は、遷移行列または確率行列と呼ばれます。通常はPで表されます。

遷移マトリックス–マルコフ連鎖の概要– Edureka

すべての値のpij&ge0、および「i」は、

遷移行列式–マルコフ連鎖の概要– Edureka

これを説明させてください。現在の状態が「i」であると仮定すると、次の状態または次の状態は、潜在的な状態の1つである必要があります。したがって、kのすべての値の合計を取りながら、1つを取得する必要があります。

状態遷移図とは何ですか?

マルコフモデルは、状態遷移図で表されます。この図は、マルコフ連鎖のさまざまな状態間の遷移を示しています。例を使用して、遷移行列と状態遷移行列を理解しましょう。

遷移行列の例

3つの状態1、​​2、および3と次の確率を持つマルコフ連鎖を考えてみます。

遷移行列の例–マルコフ連鎖の概要– Edureka

状態遷移図の例–マルコフ連鎖の概要– Edureka

上の図は、マルコフ連鎖の状態遷移図を表しています。ここで、1、2、および3は3つの可能な状態であり、1つの状態から他の状態を指す矢印は遷移確率pijを表します。 pij = 0の場合、状態「i」と状態「j」の間に遷移がないことを意味します。

今、私たちは マルコフ連鎖の背後にある数学と論理を理解し、簡単なデモを実行して、マルコフ連鎖を使用できる場所を理解しましょう。

Pythonのマルコフ連鎖

このデモを実行するために、Pythonを使用します。したがって、Pythonを知らない場合は、次のブログを参照してください。

  1. Python 3を最初から学ぶ方法–初心者向けガイド

それでは、コーディングを始めましょう。

マルコフ連鎖テキストジェネレータ

問題文: マルコフ性を適用し、ドナルドトランプの音声データセットを研究してテキストシミュレーションを生成できるマルコフモデルを作成します。

データセットの説明: テキストファイルには、2016年にドナルドトランプが行ったスピーチのリストが含まれています。

論理: マルコフ性を適用して、スピーチで使用されている各単語を考慮してドナルドトランプのスピーチを生成し、各単語について、次に使用される単語の辞書を作成します。

仮想関数javaとは何ですか

ステップ1:必要なパッケージをインポートする

numpyをnpとしてインポート

ステップ2:データセットを読み取る

trump = open( 'C://Users//NeelTemp//Desktop//demos//speeches.txt'、encoding =' utf8 ')。read()#データを表示print(trump)SPEECH 1 ...ありがとうあなたはそんなに。それはとても素敵です。彼は素晴らしい人ではありませんか。彼はそれを受け取らない公正な報道を受けません。それは公正ではありません。そして、私はここにいること、そして非常に強くここにいることを伝えなければなりません。なぜなら、私はスティーブ・キングを非常に尊敬し、シチズンズ・ユナイテッド、デビッド、そしてすべての人を同様に尊敬し、ティーパーティーを大いに尊敬しているからです。また、アイオワの人々も。彼らには共通点があります。勤勉な人々....

ステップ3:データセットを個々の単語に分割する

corpus = trump.split()#コーパスを表示print(corpus) 'powerful、'、 'but'、 'not'、 'powerful'、 'like'、 'us。'、 'Iran'、 'has'、 'シードされた '、'テロ '、..。

次に、スピーチで異なる単語のペアを生成する関数を作成します。スペースを節約するために、ジェネレータオブジェクトを使用します。

ステップ4:キーとフォローアップ単語のペアを作成する

def make_pairs(corpus):for i in range(len(corpus)-1):yield(corpus [i]、corpus [i + 1])pairs = make_pairs(corpus)

次に、空の辞書を初期化して、単語のペアを保存しましょう。

ペアの最初の単語がすでに辞書のキーである場合は、その単語に続く単語のリストに次の潜在的な単語を追加するだけです。ただし、単語がキーでない場合は、辞書に新しいエントリを作成し、ペアの最初の単語と同じキーを割り当てます。

ステップ5:辞書を追加する

word_dict = {} for word_1、word_2 in pair:if word_1 in word_dict.keys():word_dict [word_1] .append(word_2)else:word_dict [word_1] = [word_2]

次に、コーパスからランダムに単語を選択します。これにより、マルコフ連鎖が開始されます。

ステップ6:マルコフモデルを構築する

#最初の単語をランダムに選択first_word = np.random.choice(corpus)#最初の単語を大文字の単語として選択して、選択した単語が文の間から取得されないようにします。first_word.islower():#チェーンを開始します。選択された単語チェーン= [first_word]#刺激された単語の数を初期化しますn_words = 20

最初の単語に続いて、チェーン内の各単語は、トランプのライブスピーチでその特定の単語に続く単語のリストからランダムにサンプリングされます。これは、以下のコードスニペットに示されています。

for i in range(n_words):chain.append(np.random.choice(word_dict [chain [-1]]))

ステップ7:予測

最後に、刺激されたテキストを表示しましょう。

#Joinは、チェーンを文字列として返しますprint( '' .join(chain))信じられないほどの人の数。そして、ヒラリー・クリントンには、私たちの人々、そしてそのような素晴らしい仕事があります。そして、私たちはオバマを打ち負かすことはありません

これが、トランプのスピーチを考慮して得た生成テキストです。あまり意味がないかもしれませんが、マルコフ連鎖を使用してテキストを自動的に生成する方法を理解するには十分です。

それでは、さらにいくつかのアプリケーションを見てみましょう マルコフ連鎖と、それらが実際の問題を解決するためにどのように使用されるかについて説明します。

マルコフ連鎖アプリケーション

マルコフ連鎖の実際のアプリケーションのリストは次のとおりです。

  1. Google PageRank: Web全体はマルコフモデルと考えることができます。このモデルでは、すべてのWebページを状態にすることができ、これらのページ間のリンクまたは参照は、確率を伴う遷移と考えることができます。したがって、基本的に、サーフィンを開始するWebページに関係なく、特定のWebページ、たとえばXに到達する可能性は一定の確率です。

  2. 単語予測の入力: マルコフ連鎖は、次の単語を予測するために使用されることが知られています。オートコンプリートや提案にも使用できます。

  3. Subredditシミュレーション: 確かに、あなたはRedditに出くわし、スレッドまたはサブRedditの1つでやり取りをしました。 Redditは、グループ全体で行われたすべてのコメントとディスカッションを含む大量のデータを消費するsubredditシミュレーターを使用します。シミュレーターは、マルコフ連鎖を利用して、単語間の確率を生成し、コメントやトピックを作成します。

  4. テキストジェネレータ: マルコフ連鎖は、ダミーテキストを生成したり、大きなエッセイを作成したり、スピーチを編集したりするために最も一般的に使用されます。また、Webで表示される名前ジェネレーターでも使用されます。

マルコフ連鎖を使用して現実の問題を解決する方法がわかったので、もっと知りたいと思っていると思います。他の統計概念を始めるのに役立つブログのリストは次のとおりです。

これで、このマルコフ連鎖入門ブログは終わりです。このトピックに関して質問がある場合は、下にコメントを残してください。折り返しご連絡いたします。

トレンドテクノロジーに関するその他のブログにご期待ください。

データサイエンスのオンライン構造化トレーニングをお探しの場合は、edureka!特別にキュレーションされた 統計、データラングリング、探索的データ分析、K-Meansクラスタリング、ディシジョンツリー、ランダムフォレスト、ナイーブベイズなどの機械学習アルゴリズムの専門知識を習得するのに役立つプログラム。時系列、テキストマイニングの概念、およびディープラーニングの概要も学習します。このコースの新しいバッチがまもなく開始されます!!