Machine Morning

機械学習やWebについて学んだことを記録しています。

ビットフラグの判定

競プロの問題でビットフラグの判定の問題があった。 atcoder.jp ビットフラグの判定は初見だったので各桁が0か1かを文字列から取り出して判定したが、他の人の解答を見るとどうも自分の書き方はスマートではない。 ということでスマートなビットフラグの判定…

Rの出力結果をWordに貼り付ける

R

Rの出力結果をそのままwordにコピペすると、形式が崩れてしまいます。 しかし、Rの貼り付けた部分のフォントをConsolas、またはLucida Consoleに変更すれば形式が崩れません。 簡単に解決できますね。

フィボナッチ数列で動的計画法に入門する

無数にある同様の記事の二番煎じになってしまうが、自分でまとめたいのでご容赦を。Pythonでフィボナッチ数列を実装することで、動的計画法に入門することが目的。 フィボナッチ数列とは フィボナッチ数列とは、前の2つの数の和が次の数字となる数列のことで…

Pythonでリストを反転する

>>> [1, 2, 3, 4][::-1] [4, 3, 2, 1] >>> "apple"[::-1] 'elppa' リストまたは文字列を[::-1]すると反転する。

Pythonで桁数を指定して0埋めする方法

5桁の数字で余った位を0埋めする場合 例: 123 を 00123と表示する。 >>> print("{:05d}.format(123)") 00123 >>> print("{:05d}".format(12345)) 12345 >>> print("{:05d}".format(123456)) 123456 上は0埋め、5桁、decimal(10進数)。 4桁なら"{:04d}".forma…

karabinerで単体のcommandが効かなくなる問題の対処

karabinerで日英の入力切り替えをcommandに割り当てると単体のcommandが使えなくなり、他の単体commandによる操作が行えなくなる。筆者の環境ではcheetsheetというアプリを入れていて、command長押しがそのショートカットなっているが、karabinerが悪さをす…

C++入門

C++

最近競プロを始めたことに伴い、C++を勉強している。自分用のtipsとしてメモを残していく。細かい話は慣れてから再度調べるため、おまじないとして自分に言い聞かせている箇所がある。読者はあまり参考にしない方がいい。 using namespace std; using namesp…

Pythonのif __name__ == "__main__":とは

if __name__ == "__main__": __name__はモジュールの名前が入っている特殊な変数で、通常import hogeをしてモジュールを取り込むと、そのモジュールの__name__はhogeとなる。 例えば、 import numpy as np print(np.__name__) >>> numpy しかし、python hoge…

最小公倍数と最大公約数を求めるアルゴリズム

最小公倍数は最大公約数を使って簡単に求めることができるので、まず最大公約数を求める。 最大公約数 最大公約数を求める最も有名なアルゴリズムはユークリッドの互除法である。 wikipediaから引用すると、 2つの自然数a, b (a >= b)について、aのbによる剰…

Pythonで変数を動的に生成する

使う機会があるのかわからないが、変数を動的に生成する方法を紹介する。 基本的に辞書、または変数名が数字でいい場合は配列の方が使い勝手はよい。 for i in range(5): exec("var_{} = {}".format(i, i)) print(var_0) => 0 print(var_1) => 1 print(var_2…

R studioでファイルを読み込む際の文字コードエラー

R

MacのRStudioでcsvファイルを読み込もうとすると以下のようにinvalid multibyte stringというエラーが出てくる。 > df <- read.csv("filename.csv", header=T, sep=",") Error in make.names(col.names, unique = TRUE) : invalid multibyte string at '<94>N…

標準誤差とは

今回は標準誤差について取り上げる。標準偏差との違いがいまいちわからないという人もいると思うが、これらはまったくの別物であり、推定や検定を理解する上で非常に大切なものである。ただし、ここで扱う標準誤差とはSEM(standard error of the mean)、すな…

テイラー展開からオイラーの等式を導く

世界一美しい等式として有名なオイラーの等式を導出する。 導出の手順は以下の通りである。 、、の多項式近似をテイラー展開で求める。 とを足す。 虚数を指数に導入する。 にを代入する。 まず初めに、、、の多項式近似をテイラー展開で求めると以下のよう…

誤解されがちな信頼区間

学部3年時に取った授業内で、「信頼区間(CI: Confidence Interval)の意味理解してる?」という話になり、当時自分も含め大勢の理解がいい加減だったことを思い出したので、今回はこの話題を取り上げる。ちなみにこの話題を振ってくださったのはダートマス…

標本平均の分散はなぜサンプルサイズnで割るのか

標本平均の分散 (ただしは母分散、はサンプルサイズ)がなぜこのような形になっているのか。 結論から言うと、サンプルサイズが大きければ標本平均の分散は0に収束し、標本平均の期待値が母平均に収束するからである。これは大数の法則が主張したいことその…

ベイズ推定とグラフィカルモデル

Udemyの「ベイズ推定とグラフィカルモデル:コンピュータビジョン基礎1」を受講しているので、受講した範囲のノートを随時追加していく。 無料でこんなに素晴らしい講義を公開してくださっている広島大学の玉木先生には大変感謝です。 02 Introduction to pr…

ガンマ関数とは

ベータ分布やディリクレ分布の確率密度関数にΓ関数(ガンマ関数)が出てくる。 いったいこのガンマ関数は何をしているのか。 まず、ガンマ関数の概要を説明する。 ガンマ関数とは階乗の概念を複素数に拡張し、一般化したものだ。 「正の整数以外の階乗とは何…

Pythonで欠損値を扱う。

Pythonで欠損値を扱う際、主にNone (Null), NaN(Not a Number)を扱うことになる。今回はこれらの違いについて説明する。 None (Null) NoneはPythonに標準で備わっているシングルトンオブジェクトである。PythonではNullをNoneとして扱い、NoneのみがNoneであ…

大学数学を始めた。

久しぶりの投稿です。最近大学数学を始めました。 微分幾何と関数解析を勉強したいと思ったのがきっかけです。 一応数学科のカリキュラムを参考に勉強していけばゆくゆくはこれらの分野に足をつっこめると思い調べてみると、学部1年時は微積と線型代数という…

Pythonのsuper()の引数!?

読んでいたPythonのコード内に class SubClass: def __init__(self): super(SubClass, self).__init__() というコードが出てきた。super()に引数を取っているのは何?と思って調べてみると、Python2.x系ではこの書き方だったらしい。 3系から書き始めたので…

pickle

Pythonのpickleはプログラム実行中にできたオブジェクトをバイト列にしてファイルとして保存する。このオブジェクトをバイト列にする作業を直列化(serialize)、バイト型列のファイルを元のデータ型でオブジェクトに戻す作業を非直列化(deserialiize)とい…

疑似乱数のseedとは

擬似乱数を生成する際にseedを指定することができる。実は疑似乱数はあくまで'疑似'乱数なので、再現性のある乱数として利用することが可能だ。その再現性のある乱数を生成する際に指定するのがseedである。Pythonのrandomモジュールではrandom.seed()で指定…

自動微分とは

自動微分(Automatic Differentiation)とは関数を合成関数に分割し連鎖律(Chain rule)の方法で偏導関数値を求める方法である。複雑な数式も四則演算や指数関数、対数関数、三角関数などの基本的な関数の組み合わせでできているため、それらを分割すること…

なぜソフトマックス関数にeを使うのか

ソフトマックス関数はニューラルネットワークにおいてスコア(affine layerから出力された値)を確率に変換する役割を持っている。しかしなぜわざわざを底として累乗するのだろうか。 ソフトマックス関数とは ソフトマックス関数による出力値はニューラルネ…

matplotlibは一つのセルで完結させるべき...?

Google Colaboratory上でmatplolibでプロットしていたら、ハマったポイント。 複数セルにまたがって書くと初期化される? pltのインスタンスを作成したら、plt.show()するまでセルを変えない方が良い? Plot disappears after executing cell second time · …

Colaboratoryでグラフをファイルとして保存する

Google Colaboratoryでプロットしたグラフを保存するにはplt.savefig()だけではできない。 import matplotlib.pyplot as plt from google.colab import files # グラフを作成したら plt.savefig("file_name") files.download("file_name") これでローカルの…

yieldとは

yieldを理解するために、まずはIterablesについて解説する。 Iterables listを作成すると要素を一つずつ読むことができる。この要素を一つずつ読み出す作業をiterationと呼ぶ。 >>> sample_list = [1, 2, 3] >>> for i in sample_list: ... print(i) 1 2 3 s…

Spark入門2

Sparkのインストール SparkはJavaのバーチャルマシン(JVM)上で動くので、JVMを入手する。JVMはJava SE Development Kit(JDK)をインストールすることで手に入る。2018年8月21日現在ではバージョン10が最新だ。以下のリンクから自分のマシンに合ったものを…

Spark入門

Sparkのコアのデータ構造は(RDD: Resilient Distributed Dataset)である。pandasのDataFrameのようにデータセットをRDDにロードして、メソッドでデータを扱う。 PythonでSparkを使うにはPySparkを使う。SparkはJavaでできているので Py4Jによって、Javaの…

SparkとHadoopの違い

この記事は以下の記事の翻訳、要約、及び筆者が調べたことのまとめです。 www.scnsoft.com 両方ともApacheによるOSSである。2017年時点では歴史の長いHadoopがより多く使われているが、Sparkも爆発的に人気を上げていてパフォーマンスもよい。 主な違い Spar…