プロメモグラム

誰が見てもわかるような文章を目指す

Google CalendarのStylishの設定

Googleカレンダーで一番左を月曜日にすると、
休日がまとまって嬉しいんだけど、
普通のカレンダーは一番左が日曜日だから、
曜日と日付の対応を間違える。

そこで、Chrome拡張機能Stylishを使って、
土日の背景色を変えた。

Stylishはスタイルの同期してくれないみたいだから、 メモっておく。とても簡単だけど多少よくなった。

.st-bg-table tbody tr :nth-child(6) {
    background-color : #aaf !important;
}
.st-grid  tbody tr :nth-child(6) {
    background-color : #aaf !important;
}

.st-bg-table tbody tr :nth-child(7) {
    background-color : #faa !important;
}
.st-grid  tbody tr :nth-child(7) {
    background-color : #faa !important;
}

f:id:zia_glass:20170730223722p:plain

Ubuntu導入時に個人的にやることまとめ

なんどかLinuxを導入する機会があるんだけど、そのたびに同じことを調べているような気がするので、 やることをまとめておく。思い出しつつ追加する形で。

環境は以下の通り

  • Ubuntu16.04 LTS (trusty)
  • GNOME shell

諸々をインストー

Lubuntuなどでは、まさかのvimが入っていないのでインストールをする。luaなどは使ってないので普通にaptで入れる。

sudo apt install -y git vim
sudo apt install ubuntu-restricted-extras

あとは、ネットからこいつらをダウンロードして、dpkgでインストール。

zshのインストー

うまく行かない時は、/etc/shellsにzshのパスが追加されていないかもしれない。

sudo apt install zsh
sudo chsh -s $(which zsh)

dotfilesを適用

管理しているdotfilesを適用(ここは本当に個人用)

git clone https://github.com/b1013251/dotfiles ~/dotfiles
bash ~/dotfiles/setup.sh

GNOME shellのインストー

個人的にGNOME shellのほうが好きなのでGNOMEを入れる。今後はデフォルトでGNOME shellになるらしい。 tweak toolも便利なのでインストールする

sudo apt install gnome-tweak-tool
sudo apt install gnome-shell-extensions
sudo apt install gnome-shell

便利なエクステンションをTweakToolをつかって入れる。 Put windowはWin+矢印で横幅を任意の長さに切り替えてくれるツール。 もともとのキーバインドがかぶるので、元の設定を、「設定」→「キーボード」から削除

  • Dash to dock
  • Alternatetab
  • Put window
  • Suspend button

また、TweakToolから以下の部分を設定

  • アニメーションを止める
  • 見た目が綺麗なPaperに変更
    • ここを参照してインストール+TweakToolから設定
  • CapsLockをCtrlとして扱う
  • 日付表示

Rubyをインストー

rbenvでインストール。必要なパッケージをaptで入れる。入れないと長いビルド中に怒られて異常終了する。
ディストリビューションHome · rbenv/ruby-build Wiki · GitHubを参照

sudo apt install -y autoconf bison build-essential libssl-dev\
libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev\
libffi-dev libgdbm3 libgdbm-dev

gitでrbenvとrbenv-build入れる。rbenvだけではRubyをインストール導入できない。

git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

PATHを通す。.zshrcで~/.zshlocalという名前を個人的にsourceしているので、そこに追加。

: ruby
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

Rubyをビルド

rbenv install -l
: 最新のバージョンを入れる
rbenv install 2.4.1
rbenv global 2.4.1

Pythonのインストー

Anacondaが便利なので、Anacondaを使って入れる。bashでインストール。 とりあえず、最新のPythonが入るので環境などは作らなくてもいい。

: 最新のものを入れる
bash Anaconda3-4.4.0-Linux-x86_64.sh
: 環境を作成(tensorflowを入れる場合は現状はPython3.5で対応しているので3.5を入れる)
conda create -n [環境名] python=3.5 anaconda

.zshlocalに追加

# anaconda
export PATH=$HOME/anaconda3/bin:$PATH

Node.jsをインストー

nodebrewをつかう

curl -L git.io/nodebrew | perl - setup
nodebrew ls-remote
: 最新を入れる
nodebrew install-binary v7.10.1
nodebrew use v7.10.1

pythonに機械学習系のライブラリを入れるとき必要なパッケージ

ライブラリを入れるときに先に入れる必要があるものリスト.

: #scipy
sudo apt-get install libatlas-base-dev
sudo apt-get install libatlas-doc

: #matplotlib
sudo apt-get install pkg-config 
sudo apt-get install libfreetype6
sudo apt-get install libfreetype6-dev
sudo apt-get install libpng-dev

anacondaが便利すぎて忘れてたけど
入ってないとエラーが出るし,そのたびに検索するのが面倒だったりする.

線形回帰のカーネルトリック

SVMに取り掛かる前に線形回帰のカーネルトリックを試す

前提

関数は以下のものにノイズを加える

$$ y=x3+\epsilon $$

見ての通り線形回帰だとうまくいきそうにないのでガウシアンカーネルで回帰を行う

また、コスト関数には誤差の総和を用い解析的に解く

まずは線形回帰

import numpy as np
import matplotlib.pyplot as plt

size = 25 #サンプル数
x = np.linspace(-6, 6, size) 
y_truth= (-0.05 * x ** 4) + ( 0.1 * x ** 3) + (-0.5 * x ** 2) + (0.6 * x )
np.random.seed(0)
y_noise = y_truth + np.random.randn(size) * 10.0

plt.plot(x, y_truth, color='#aaaaaa')
plt.scatter(x, y_noise, color="#aaaaaa")

w = (1 / np.dot(x, x) * x).dot(y_noise)
y_predict = w * x
plt.plot(x, y_predict, color="r")
plt.scatter(x, y_predict, color="r")

f:id:zia_glass:20170504022539p:plain

次に正則化していないカーネル

import numpy as np
import matplotlib.pyplot as plt

size = 25 # サンプル数
x = np.linspace(-6, 6, size) 
y_truth= x**3

np.random.seed(0) # ノイズ固定
y_noise = y_truth + np.random.randn(size) * 10.0

# 本来のデータ
plt.plot(x, y_truth, color='#aaaaaa')
plt.scatter(x, y_noise, color="#aaaaaa")

# ガウシアンカーネル
def kernel(x1, x2, beta=1.0):
    return np.exp(- beta * (x1 - x2)**2)

# グラム行列
K = np.zeros((size, size))
for i in range(size):
    for j in range(size):
        K[i,j] = kernel(x[i], x[j])
    
# 解析計算
alpha = np.linalg.inv(K) * y_noise

# 計算したパラメータをもとに予測
y_predict_kernel = np.zeros(length)
for _x, a in zip(x, alpha):
    y_predict_kernel += a * kernel(_x, _x)

# プロット
plt.plot(x, y_predict_kernel, color="b")
plt.scatter(x, y_predict_kernel, color="b")
plt.xlim([-6,6])
plt.ylim([-50, 50])

f:id:zia_glass:20170504022544p:plain

予想通りぐちゃぐちゃ

正則化を行って計算

size = 25 # サンプル数
x = np.linspace(-6, 6, size) 
y_truth= x**3

np.random.seed(0) # ノイズ固定
y_noise = y_truth + np.random.randn(size) * 10.0

# 本来のデータ
plt.plot(x, y_truth, color='#aaaaaa')
plt.scatter(x, y_noise, color="#aaaaaa")

# ガウシアンカーネル
def kernel(x1, x2, beta=1.0):
    return np.exp(- beta * (x1 - x2)**2)

# グラム行列
K = np.zeros((size, size))
for i in range(size):
    for j in range(size):
        K[i,j] = kernel(x[i], x[j])
    
# 解析計算 (アルゴリズム的にはここに単位行列を足しただけ)
alpha = np.linalg.inv(K + np.identity(size)) * y_noise

# 計算したパラメータをもとに予測
y_predict_kernel = np.zeros(length)
for _x, a in zip(x, alpha):
    y_predict_kernel += a * kernel(_x, _x)

# プロット
plt.plot(x, y_predict_kernel, color="b")
plt.scatter(x, y_predict_kernel, color="b")
plt.xlim([-6,6])
plt.ylim([-50, 50])

f:id:zia_glass:20170504022535p:plain

正則化項が働いて多少汎化された。

それで

モデルを通常の線形パラメータとは違うものに置き換えていることや、ガウシアンカーネルの次元数が無限にあることにより、正則化による影響が直感的にわかりにくいけど、うまくはいっているみたい。

Anaondaを入れる流れ(Windows 8.1)

複数のサイトで解説されているけど自分用に書く。
現状でTensorflowはPython 3.6に入らないようなので、3.5の環境を作ってそこにいろいろぶっこむ。 通常のPythonインストーラからやろうとすると、matplotlib、scipyのインストールあたりで詰まって面倒だからAnaconda助かる。

環境

  • Windows 8.1
  • Anaconda3 (4.3.1 : 64bit)
    • Python3.5
    • numpy
    • scipy
    • matplotlib
    • pandas
    • scikit-learn
    • tensorflow

Anacondaの導入

  1. まず、ダウンロードする。
    Download Anaconda Now! | Continuum
  2. インストールは特に注意点は特になし。

Python3.5の環境作成

コンソールから新しい環境を作る

> conda create -n [環境名] python=3.5 anaconda

Python3.5の環境に移行する

> activate [環境名]

諸パッケージのインストール

scipy, numpy, matplotlib,pandas,scikit-learnをインストールする。
ただ、conda createで環境を作った時点でインストールされていたので、実際に以下のコマンドは実行しなかった。

> conda install numpy scipy matplotlib pandas scikit-learn

tensorflowをインストール
最新のパッケージはInstalling TensorFlow on Windows | TensorFlowのURLを参照。
今回は現状のCPU最新版を使う。

> pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/windows/cpu/tensorflow-1.1.0-cp35-cp35m-win_amd64.whl 

Visual Studio Code

VS CodeはCtrl+F5での実行と入力補完が特に設定しなくてもできるから便利。 設定は、3.5環境のパス設定とlintの無効化をしたぐらい。

[
"python.pythonPath": "C:/……/Anaconda3/envs/tensor/python",
"python.linting.enabled": false,
]

開いているタブをMarkdownのリンク形式でクリップボードにコピーするChromeエクステンションを作ったけど既にあった

タイトルの通り

公開したものの意味が無いので、
ハイパーリンクをコピーする機能などを追加して付加価値を作りたい

Chrome

Copy this tab as Markdown Link - Chrome ウェブストア

プレビュー

f:id:zia_glass:20170407011017p:plain

UDPのポート番号54915にパケットがたくさん流れる

wireshark触って見ていたらあるホストから1秒に一回程度の頻度でUDP 54915にデータが送られていた.

なにかと調べてみるとLogicoolのマウス設定を行うLogicool Gamesoftwareが
スマートフォンなどと通信するためのArx Controlという機能によってネットワークを探索しているとわかった.

設定からモバイルサービスを無効にすることによりパケットが消えた.

f:id:zia_glass:20161129203138p:plain