プロメモグラム

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

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で入れる。入れないと長いビルド中に怒られて異常終了する。

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

いくつかの環境下でのgitbook

gitbookを試してうまく行ったりしなかったりしたので,どこで詰まったかを書いておく. 

やりたかったことは,

  1. npm で gitbook-cliのインストール
  2. gitbook initでgitbookのダウンロード
  3. book.jsonを作成し,pluginとしてmathjaxを追加
  4. gitbook installでbook.jsonを参照してmathjaxをインストール
  5. gitbook serveでlocalhost:4000を公開しプレビュー.最悪gitbook buildができればいい.

前提としてnodejs v4をインストール済みとする.
またwindowsにはVisualstudio2015とC++をインストール済みである.

Ubuntu 14.04

すべてうまくいった

CentOS7 (Windows10のVirtualBox上)

mathjaxのインストールに成功したが,
サーバがlocalhostなため,ホストコンピュータからアクセスできない. railsとかなら--bind=0.0.0.0でいけるんだが,それに相当するオプションが見つからなかった.

Bash on windows (Ubuntu)

mathjaxのインストールもできたが,サーバが起動しない.

$ gitbook serve
Error: watch /mnt/c/gitbook/book.json EPERM

Windows10

サーバの起動まではいったが,mathjaxのインストールに失敗.

$ gitbook install
このソリューション内のプロジェクトを 1 度に 1 つずつビルドします。並行ビルドを有効にするには、"/m" スイッチを追加してく ださい。
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\CodeAnalysis\Microsoft.CodeAnalysis.targets(219,5): error M
SB4175: タスク ファクトリ "CodeTaskFactory" をアセンブリ "C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Build.Tasks.Core.dll" から読
み込めませんでした。プロセスを開始するのに使用される環境ブロックの長さは、65,535 バイトを超えて指定することはできません 。  ユーザーの環境ブロックの長さは 1861438 バイトです。  環境変数のいくつかを削除して、もう一度実行
してください。 [C:\gitbook\node_modules\contextify\build\contextify.vcxproj]

Error: contextify@0.1.15 install: `node-gyp rebuild`
Exit status 1

contextifyをnpmでインストールすることを試みるも失敗.

npm install contextify
このソリューション内のプロジェクトを 1 度に 1 つずつビルドします。並行ビルドを有効にするには、"/m" スイッチを追加してください。
  contextify.cc
  win_delay_load_hook.c
C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\src\win_delay_load_hook.c(34): error C2373: '__pfnDliNot
ifyHook2': redefinition; different type modifiers [C:\gitbook\node_modules\contextify\bu
ild\contextify.vcxproj]
  C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\delayimp.h(134): note: see declaration of '__pfnDliNot
  ifyHook2'
gyp ERR! build error
gyp ERR! stack Error: `C:\Program Files (x86)\MSBuild\14.0\bin\msbuild.exe` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onExit (C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\lib\build.js:276:23)
gyp ERR! stack     at emitTwo (events.js:87:13)
gyp ERR! stack     at ChildProcess.emit (events.js:172:7)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)
gyp ERR! System Windows_NT 10.0.14393
gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd C:\gitbook\node_modules\contextify
gyp ERR! node -v v4.4.7
gyp ERR! node-gyp -v v3.3.1
gyp ERR! not ok
npm ERR! Windows_NT 10.0.14393
npm ERR! argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "contextify"
npm ERR! node v4.4.7
npm ERR! npm  v2.15.8
npm ERR! code ELIFECYCLE

npm ERR! contextify@0.1.15 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the contextify@0.1.15 install script 'node-gyp rebuild'.
npm ERR! This is most likely a problem with the contextify package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node-gyp rebuild
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs contextify
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!
npm ERR!     npm owner ls contextify
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     C:\gitbook\npm-debug.log