ベイズ公式メモ

ベイズ統計入門の15-3章を読んでベイズの公式どうやって出てきたかを勉強になったので、それを簡単にまとめるメモ 問題1 目の前にツボが一つあり、AのツボかBのツボであることはわかっているが、見た目ではどちらかわからない。知識として、Aのツボには9個の白球と1個の黒球が入っており、Bのツボには8個の黒球と2個の白球が入っていることを知っている。今、ツボから1個球を取り出したら、黒球だった。目の前のツボはどちらのツボか。 黒球取り出して、Bツボである確率を計算してみると P(B|黒) = P(B & 黒) / P(黒) = ( P(B) x P(黒|B) ) / P(黒) = ( P(B) x P(黒|B) ) / ( P(A & 黒) + P(B & 黒)) = ( P(B) x P(黒|B) ) / ( ( P(A) x P(黒|A) ) + ( P(B) x P(黒|B) ) ) 補足 P(A|B) = P(AとBの重なり) / P(B) 問題2 珍しい病気の診断問題で、仮に千人の中に一人がこの病気にかかるとする。検査ではヒット率が99%で、つまり人が本当に病気にかかって、さらに検査で99%の精度でpositive(病気にかかってる)の結果が出る。逆に病気にかかっていないにも関わらずpositiveの検査結果が出る確率は5%。このようなデータに基づいて一人を選んで、検査して、検査結果はpositiveの場合、この人本当に病気にかかっている確率はどのぐらい。 分母は二つの確率の和で、1) 病気かかって、さらにpositiveと診断される確率 2) 病気かかっていないけどpositiveと診断される確率。

Pod中からKubernetesのAPI Serverに認証

概要 やりたいことは簡単のアプリケーションを作って、Kubernetesの中にPodとしてデプロイして、このアプリは現在Kubernetesクラスター中に何個のPodがあるかをKubernetesのApi Serverに問い合わせる。 つまりPodの中のアプリケーションはどうやってKubernetesのAPI Serverに認証して、情報を取得することである。 このアプリを作るためにKubernetesのclient-goライブラリを使います。サンプルとしてここに載っています。Pod内からKubernetesのApi Serverと通信するための認証部分の設定は rest.InClusterConfig()を呼び出すことになる。 プログラム作成 ファイル名はin-cluster-client-configuration.go package main import ( "fmt" "time" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" ) func main() { // creates the in-cluster config config, err := rest.InClusterConfig() if err != nil { panic(err.Error()) } // creates the clientset clientset, err := kubernetes.NewForConfig(config) if err != nil { panic(err.Error()) } for { pods, err := clientset.CoreV1().Pods("").List(metav1.ListOptions{}) if err != nil { panic(err.Error()) } fmt.

Kubernetesに既存のDeploymentをGolangでUpdate

Kubernetesの client-go-testネームスペースに既存のdemo-deploymentという名前のDeploymentはNginx 1.12バージョンを使っているが、それをNginx 1.13にUpdateする。 package main import ( "flag" "fmt" "path/filepath" // apiv1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/util/homedir" "k8s.io/client-go/util/retry" ) func main() { var kubeconfig *string home := homedir.HomeDir() kubeconfig = flag.String("kubeconfig", filepath.Join(home, ".kube", "config"), "(optional) absolute path to the kubeconfig file") flag.Parse() config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig) if err != nil { panic(err) } clientset, err := kubernetes.NewForConfig(config) if err != nil { panic(err) } // https://godoc.org/k8s.io/client-go/kubernetes/typed/apps/v1#AppsV1Client.Deployments // clientset.

Kubernetesに既存のDeploymentをGolangで削除

KubernetesのDeploymentを削除するときにDeletionPropagationを設定する必要があるようです。 ソースコードにDeletionPropagationの説明は DeletionPropagation decides if a deletion will propagate to the dependents of the object, and how the garbage collector will handle the propagation. DeletionPropagationはForegroundの場合 The object exists in the key-value store until the garbage collector deletes all the dependents whose ownerReference.blockOwnerDeletion=true from the key-value store. API sever will put the “foregroundDeletion” finalizer on the object, and sets its deletionTimestamp. This policy is cascading, i.e., the dependents will be deleted with Foreground.

Golangを使って、KubernetesにNginxをデプロイ

概要 GolangでKubernetesのAPIを色々試しているので、NginxをKubernetesにデプロイするのもやってみました。 package main import ( // "bufio" "flag" "fmt" // "os" "path/filepath" appsv1 "k8s.io/api/apps/v1" apiv1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/util/homedir" // "k8s.io/client-go/util/retry" ) func main() { var kubeconfig *string home := homedir.HomeDir() kubeconfig = flag.String("kubeconfig", filepath.Join(home, ".kube", "config"), "(optional) absolute path to the kubeconfig file") flag.Parse() config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig) if err != nil { panic(err) } clientset, err := kubernetes.NewForConfig(config) if err != nil { panic(err) } // https://godoc.

client-goでKubernetesのAPIを試す

概要 Kubernetesのclient-goクライアントを利用して、クラスターへの操作を色々試す。 Nodeの取得 package main import ( "fmt" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/clientcmd" "log" "os" "path/filepath" ) func main() { // kubernetesの設定ファイルのパスを組み立てる kubeconfig := filepath.Join(os.Getenv("HOME"), ".kube", "config") // BuildConfigFromFlags is a helper function that builds configs from a master url or // a kubeconfig filepath. config, err := clientcmd.BuildConfigFromFlags("", kubeconfig) if err != nil { log.Fatal(err) } // NewForConfig creates a new Clientset for the given config. // https://godoc.

Centos7に新しいEmacsを入れる

# yum remove emacs-nox emacs-filesystem emacs-common -y # yum install gcc ncurses-devel -y # cd /opt # wget http://ftp.gnu.org/pub/gnu/emacs/emacs-25.3.tar.gz # tar zxvf emacs-25.3.tar.gz # cd /opt/emacs-25.3 # ./configure --without-x # make # make install # emacs -bash: /usr/bin/emacs: そのようなファイルやディレクトリはありません # mv /usr/bin/emacs /usr/bin/emacs.orig # ln -s /usr/local/bin/emacs /usr/bin/emacs # mv ~/.emacs.d ~/.emacs.d.orig # git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d # emacs

OpenCV ハンズオン 2

下の四文字を分割するタスク import cv2 # OpenCVライブラリ import numpy as np from matplotlib import pyplot as plt # 画像を描画するライブラリ matplotlib image_bgr = cv2.imread("../images/2A2X.png") image_gray = cv2.cvtColor(image_bgr, cv2.COLOR_BGR2GRAY) plt.imshow(image_gray, cmap='gray') plt.show() print(image_bgr.shape) 結果: (24, 72, 3) # https://algorithm.joho.info/image-processing/otsu-thresholding/ ret, threshd_img = cv2.threshold(image_gray, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU) plt.imshow(threshd_img, cmap='gray') plt.show() image_contour, contours, hierarchy = cv2.findContours(threshd_img.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) print(type(contours)) print(len(contours)) # 四つ輪郭 結果: <class 'list'> 4 letter_image_regions = [] for contour in contours: (x, y, w, h) = cv2.

OpenCV ハンズオン1

画像をBGRで表示、BGRはRGB色を逆転するだけ import cv2 # OpenCVライブラリ import numpy as np from matplotlib import pyplot as plt # 画像を描画するライブラリ matplotlib image_bgr = cv2.imread("../images/Lenna.png", cv2.IMREAD_COLOR) print(image_bgr.shape) # 変なBGR色の画像が表示される #print(image_bgr) plt.imshow(image_bgr) plt.show() 結果: (512, 512, 3) 画像をRGBで表示 import cv2 import numpy as np from matplotlib import pyplot as plt image_bgr = cv2.imread("../images/Lenna.png", cv2.IMREAD_COLOR) image_rgb = cv2.cvtColor(image_bgr, cv2.COLOR_BGR2RGB) #print(image_rgb.shape) #print(image_rgb) plt.imshow(image_rgb) # rgb色の画像が表示される plt.show() 画像をGrayscaleで表示 import cv2 import numpy as np from matplotlib import pyplot as plt image_bgr = cv2.

線形代数とPython

例1: 3 x 4 行列の表示 import numpy as np A = np.array([ [1,2,3,4], [5,6,7,8], [9, 10, 11, 12], ]) A 結果: array([[ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12]]) 例2: 単位行列(identity matrix)の表示 import numpy as np I = np.identity(3) I 結果: array([[ 1., 0., 0.], [ 0., 1., 0.], [ 0., 0., 1.]]) 例3:転置行列の表示 import numpy as np A = np.array([ [1,2,3,4], [5,6,7,8], [9, 10, 11, 12], ]) A.