スキップしてメイン コンテンツに移動

位相の定義

Introduction

今日から位相空間論について書いていきます。自分の復習のためですが、、、
位相空間は数学を学ぶ上でとても重要になってきます。
位相空間を定義する利点の一つは写像の連続性を位相を用いて定義できるからです。
今日は位相の定義について書いていきたいと思います。


概要

  •   距離空間
  • 位相の公理
  • 位相空間
  • 開集合


距離空間
初めに距離空間を定義します。
Xを集合,関数dを $d:X\times X ->\mathbb{R}$とします。この時、

(X,d)が距離空間である$\iff$

  • $\forall x,y \in X,~~~~~d(x,y) \geq 0$
  • $\forall x,y \in X,~~~~~x = y \implies d(x,y) = 0$
  • $\forall x,y \in X,~~~~~d(x,y) = d(y,x)$
  • $\forall x,y,z \in X, ~~~~d(x,y) + d(y,z) \geq d(x,z)$

この条件は距離の公理と呼ばれています。
dは距離関数と呼ばれています。

位相空間
(X,d)を距離空間とします。この時、
$\mathbb{O} \in 2^X$が(X,d)の位相$\iff$


  • $\phi,X \in \mathbb{O}$
  • $\forall O_1,O_2 \in \mathbb{O} \implies O_1 \cap O_2 \in \mathbb{O}$
  • $\forall \Lambda ,~~\forall \{O_\lambda \}_{\lambda \in \Lambda} \in O \implies \bigcup_{\lambda \in \Lambda} O_\lambda \in \mathbb{O}$


ここで$2^X := \{A | A \subset X \}$です。

この条件は位相の公理と呼ばれています。

気を付けるべき点は $\Lambda$ は任意の添え字集合であることです。つまり、$\mathbb{N}$でなくても$\mathbb{R}$のような実数無限集合でもよいのです。


この時、$(X,d,\mathbb{O})$を位相空間と呼びます。
$(X,\mathbb{O})$と書くことが多いです。

開集合
$A \subset X$が開集合$\iff$

$$\forall x \in A,~~\exists \epsilon > 0, ~~s.t.~~ B(x,\epsilon) \subset A$$
ここで、$$B(x,\epsilon):= \{y\in A| d(x,y) < \epsilon\}$$とします。

この開集合の定義は位相の公理を満します。

X:集合, $d:X \times X -> \mathbb{R}$:距離関数とします。

$$\mathbb{O} := \{A \subset X|A :open set\}$$.
と定義するとき、 $\mathbb{O}$は位相の公理を満たす。


証明.


  • $\phi,X \in \mathbb{O}$


これは明らかです。なぜなら、$\phi$は要素を持っていないため、 $\phi$は開集合の定義を満たします。そして、$\forall x \in X, \exists \epsilon > 0 ~~s.t.~~ B(x,\epsilon) \subset X$.これはXが全体集合なので明らかに成り立ちます。


  • $\forall O_1,O_2 \in \mathbb{O} \implies O_1 \cap O_2 \in \mathbb{O}$


$\forall O_1,O_2 \in \mathbb{O}$について、$\forall x \in O_1 \cap O_2$を考えます。
$x \in O_1$and $x \in O_2$なので、 $\exists \epsilon_1 ~~s.t.~~ B(x,\epsilon_1) \in O_1$ and $\exists \epsilon_2 ~~s.t.~~ B(x,\epsilon_2) \in O_2$
よって$\epsilon := \min\{\epsilon_1,\epsilon_2\}$と定義すると、
$$B(x,\epsilon) \subset B(x,\epsilon_1)$$
$$B(x,\epsilon) \subset B(x,\epsilon_2)$$
が満たされます。
よって$$B(x,\epsilon) \subset O_1 \cap O_2$$


  • $\forall \Lambda ,~~\forall \{O_\lambda \}_{\lambda \in \Lambda} \in O \implies \bigcup_{\lambda \in \Lambda} O_\lambda \in \mathbb{O}$


$\forall \{O_\lambda\}_{\lambda \in \Lambda}$について、
$$\forall x \in \bigcup_{\lambda \in \Lambda} \{O_\lambda\}_{\lambda \in \Lambda},$$を考えます。
 $\forall x \in \{O_\lambda\}_{\lambda \in \Lambda},$について、
$$\exists \lambda_0 \in \Lambda ~~.st.~~ x \in O_{\lambda_0}$$
が成り立つので、
 $$\exists \epsilon ~~s.t.~~ B(x,\epsilon) \subset O_{\lambda_0}$$
従って、 $$B(x,\epsilon) \subset \{O_\lambda\}_{\lambda \in \Lambda}$$

Q.E.D

結論
位相にはほとんど開集合が使われます。
位相を用いた写像の定義はまた、別の機会に書こうと思います。

Reference
https://ja.wikipedia.org/wiki/%E8%B7%9D%E9%9B%A2%E7%A9%BA%E9%96%93

https://ja.wikipedia.org/wiki/%E4%BD%8D%E7%9B%B8%E7%A9%BA%E9%96%93

コメント

このブログの人気の投稿

カーネルk-meansの実装

Introduction   English ver 今日はカーネルk-meansの実装をしました。k-menasアルゴリズムはクラスタリングのためのアルゴリズムです。僕がカーネルk-meansを実装しようと思ったのには一つ理由があります。それは僕の友人がk-meansのプレゼンを、僕がカーネルのプレゼンをしていた時に、k-meansにカーネルを適応できないかと思ったからです。そこで、カーネルk-meansについての論文を探しました。 ここのpdf を主に参考にさせていただきました。うまくカーネルk-meansを実装できたと思います。ここでは、普通のk-meansとカーネルを用いた,kernel k-meansについての実装の結果を紹介します。 また、この記事では実装結果のみ書きますが、理論のほうも別の記事で書くつもりです。書き終えたらリンクをこの記事にも貼っておきます。 #  理論編書きました。K-means 理論編 概要 dataset   ちょっとだけ理論の説明  k-means    kernel k-means   Dataset   English ver 今回使うのは二つのデータセットです。一つ目は、普通のk-means用のデータです。二つ目はkernel k-means用のデータセットです。 一つ目のデータは、三つのグループで構成されており、次元は2で、サンプル数は300です。以下のような分布になっています。 二つ目のデータは二つのグループで構成されており、次元は2でサンプル数は300です。   this page にデータセットを作ったコードを載せています。 ちょっとだけ理論の説明 k-meansとは、k-平均法とも呼ばれています。初めに、適当なクラスに分け、各クラスの中で平均となるベクトルを求めます。そして、各データに対して、すべての平均ベクトルとの距離を求めます。そして、最小となる距離になるクラスに改めて、そのデータをクラスタリングします。そして、新たに得られたクラスの中でそれぞれ平均ベクトルを求め、これを繰り返し、平均ベクトルが動かな...

Implementation of Robbins monro

Robbins monro の実装 sorry, this page is Japanese only.   今回はRobbins monro の実装をしてみました。 Robbins monroは確率勾配降下法の学習率を入りテーション回数の逆数で割っていくものです。 使っているprogram言語はpython 3です。osはwindowsです。(macほしい...) アルゴリズム 確率勾配降下方とは目的関数の最適解を求めるアルゴリズムです。目的関数をf(X)とすると、手順は以下のようになっています。 初期学習率$n_0$を決めます。訓練データDを用意します。この訓練データは複数の初期値の集まりです。 訓練データから一つ初期値をランダムに取り出し、これを$x_0$とし、最初の予測値とします。 次の式に現在の予測値$x_0$を代入し、新たな予測値$x_{n+1}$を得ます。$$x_{n+1} = x_{n} - \frac{n_0}{n} grad f(X_n)$$ 収束して入れば4へ、収束していなければ2で得られた値$x{n+1}$を新たに$x_n$としてもう一度2を行う。 訓練データを一周していなければ2へ、一周していれば各初期値から得られた解の中から目的関数を最も小さくするものを選ぶ。   実装例 以下の目的関数を最小化させてみましょう。 $$f(x,y) = (x-2)^2 + (y-3)^2 $$ コマンドラインでpythonを実行していきます。 予想通り、(2,3)という解を導き出してくれました。目的関数が簡単だったので、初期値をどの値でとってもばっちり正解にたどり着いてくれました。 CODE 以下にRobbins monroの関数だけ置いておきます。 こちら にすべてのコードを載せています。 def Robbins_monro(function,grad,number_variable_gradient): init_learning_rate = 1.5 stepsize = 1000 init_value = np.array([range(-1000,1020,20) for i in range(number_v...

カーネルK-means 理論編

Introduction English ver 今日は、カーネルK-meansの理論について書きます。カーネルK-meansは通常のK-meansの欠点を補うことができます。通常のK-meansの欠点とカーネルK-meansの強みも説明します。もし、まだ御覧になられていなければ、通常の K-means 理論編 の記事を見ていただけるとよいのではないかと思います。 カーネルK-meansの実装編 も併せてご覧ください。 概要 K-meansの弱点 カーネルトリック カーネルK-means アルゴリズム K-meansの弱点 例えば、次のようなデータを用意します。 このデータはK-meansによってうまく分類することはできません。なぜなら通常のK-meansでは、データとプロトタイプのユークリッド距離に依存しているからです。そのため、このような円状に分布しているデータはうまく分類することができません。 プロトタイプとはそれぞれのクラスにあり、そのクラスを代表するようなもののことです。K-meansでは各クラスの平均ベクトルとなります。それゆえ、以下のような分類になってしまいます。 このようなデータではK-meansはうまくいきません。 K-meansで分類できるデータセットは次のように各クラスで固まっている必要があります。 カーネルK-meansはK-meansの弱点を補います。 カーネルトリック 初めに、カーネルトリックを説明します。 線形分離できないようなデータ$X$を例えば次のように線形分離できるように$\phi(x)$に送る写像$\phi$を考えます。 カーネルは次のように定義されます。 $$K(x,y) = \phi(x)^T \phi(y)$$ $\phi$を具体的に計算することは難しいですが、$K(x,y)$を計算することなら簡単です。 この手法をカーネルトリックと呼ばれます。 カーネルK means K-meansの目的関数を復習しておきます。 $$J = \sum_{n=1}^{N} \sum_{k=1}^{K} r_{nk} ||x_n-\mu_k||^2$$ ここで、 プロトタイプは$\mu_i ~\forall k \in K$としま...