unhurried

コンピュータ関連ネタがほとんど、ときどき趣味も…

ソーシャルアプリプラットフォーム構築技法

立ち寄った書店で見かけて衝動買いした書籍ですが、簡単に感想をまとめました。

自社サービスを社外の開発者に公開するためのプラットフォームを構築するときに必要となる、社内の組織構造や企画・開発・運用について、筆者の経験をもとに解説されています。

最近は多くの企業が他社と連携するためのプラットフォームを開発しており、私も同様のプラットフォーム(筆者のものに比べれば小規模ですが)の開発に携わったことがあります。

構築の際にまず困ることがこれらのプラットフォームの企画・開発・運用に関する情報はあまり公にはされていなく、他社事例の情報が少ないことです。この書籍は開発時のアーキテクチャやデータの設計まで踏み込んで解説されているため、プラットフォームの1つの構築事例としてとても参考になりました。

もちろん書籍で解説されていることが全てのプラットフォームにそのまま適用できるわけではありませんが、これからプラットフォーム構築を検討されている方には事例として役に立つでしょうし、すでにプラットフォームを運用している方にとっては、自分のサービスと比較することで今後の方針検討に活用できると思います。

Pythonではじめる機械学習

Pythonではじめる機械学習を読みましたので、簡単に内容をご紹介します。

Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎

Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎

本書は、機械学習の数学的な理論を概念レベルで理解しつつ、実践で機械学習アルゴリズムを使えるようにすることを目指す書籍である。

sckit-learnで利用できる機械学習アルゴリズムについて、それぞれの特徴と使い方が説明されている。また、実践的なテクニックとして、グリッドサーチを使ったパラメータのチューニングや、前処理を組み合わせてパイプラインを構成する方法についても詳細な解説がある。

機械学習を理解するための数学のきほん

私が機械学習を始めるときに最初に読んだ本を簡単に紹介します。

概要

線形モデルを使った機械学習の数学的理論が、高校数学の知識で理解できるように解説されている。取り上げられている主な内容は以下の通り。

  • 回帰問題
    • 最小二乗法を使って、誤差関数を定義し、最急降下法でパラメータ更新式を求める手順
    • 多項式回帰、重回帰、確率的勾配法の適用方法
  • 分類問題
    • パーセプトロンを使って、座標的な意味からパラメータ更新式を求める手順
    • ロジスティック回帰の尤度関数を定義し、最急降下法でパラメータ更新式を求める手順
    • ロジスティック回帰への多項式特徴量の適用方法
  • モデルを評価するための交差検証
  • 線形モデルの過学習を防ぐための正則化(L1、L2)

また、これらの機械学習モデルをPythonでの実装方法(scikit-learnなどのライブラリを使わずに、NumPyを使って自分で実装する)も解説されている。

感想

機械学習を始めるに当たって、取っ付きやすい書籍を探して行きついたのが本書であった。グラフを使って数式の図形的な意味が解説されていて、巻末には数学を離れて久しい人が忘れていそうな基礎知識もまとめられているため、線形モデルの数学的理論の基礎を途中で詰まることなく理解することができた。

本書は機械学習で最近よく使われるアルゴリズムや、実践的なテクニックまでは触れていないが、数学を忘れかけている人が機械学習の基礎となる線形モデルの理論を理解するのにとても役に立つ本であると感じた。

bashrcとbash_profileの使い分け

読み込みタイミング

  • ログイン時
    • .bash_profile.bashrc の順に実行される
  • bash起動時
    • .bashrc のみ実行される

用途

参考

Visual StudioサブスクリプションでMicrosoft Azureを利用する

Visual Studioサブスクリプション(旧MSDNサブスクリプション)にはMicrosoft Azureを利用できるクレジットが付いてくるものがある。(例えば、Visual Studio Professionalサブスクリプションでは月間50ドルのクレジットが付く。)

ただし、このクレジットで利用できるサービスには以下の制限があることに注意が必要である。

  • 開発もしくはテストでのみ使用でき、運用目的では使えない。
  • SLAの保証はなく、120時間以上の連続稼働が禁止されている。
  • 利用できないリージョンがある。
    • 例えば、仮想VMは米国東部、米国中南部、ヨーロッパ西部、東南アジア、米国西部2、米国中西部のリージョンにのみ作成できる。
  • 利用できないサービスがある。
  • 有料サブスクリプションよりクォータが低いものがある

参考

Tomcatのlogging.properties設定方法

Tomcat 7/8のログ出力設定ファイル(logging.properties)の定義方法をまとめています。

Tomcatjava.util.logging API実装(JULI)での設定方法拡張(一部抜粋)

  • .handlersプロパティを設定することでルートLoggerのHandlerが定義できる。
  • Handler名にプレフィックスを付けることで同じHandlerクラスを複数回利用できる。
    • プレフィックスは数字で始まり.で終わること。
  • あるLoggerにHandlerが設定されている場合は親のLoggerの処理は実施されない(設定で変更可能)。

デフォルトのlogging.properties設定内容

# 利用するHandlerを指定する。この設定方法はjava.util.loggingと同様。
# org.apache.juli.FileHandlerクラスを"1catalina"、"1localhost"、"3manager"というプレフィックスをつけることで3つのHandlerとして利用している。
handlers = 1catalina.org.apache.juli.FileHandler, \
           2localhost.org.apache.juli.FileHandler, \
           3manager.org.apache.juli.FileHandler, \
           java.util.logging.ConsoleHandler

# ルートLoggerが利用するHandlerを指定する。
# Loggerに個別にHandlerを指定していない場合は、ルートLoggerのHandlerに渡される。
.handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler

# 各Handlerに対して設定値を指定する。
# level:出力するログレベル
# directory:ログファイルを出力するディレクトリ(FileHandler)
# prefix:ログファイルのファイル名のプレフィックス(FileHandler)
# bufferSize:ログ出力処理のバッファサイズ(FileHandler)
# formatter:ログの整形を行うクラス

1catalina.org.apache.juli.FileHandler.level = FINE
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.FileHandler.prefix = catalina.

2localhost.org.apache.juli.FileHandler.level = FINE
2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.FileHandler.prefix = localhost.

3manager.org.apache.juli.FileHandler.level = FINE
3manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
3manager.org.apache.juli.FileHandler.prefix = manager.
3manager.org.apache.juli.FileHandler.bufferSize = 16384

java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

# 各Loggerに対して設定値を指定する。
# level:記録対象となるログのログレベル
# handlers:Loggerが利用するHandler

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = \
   2localhost.org.apache.juli.FileHandler

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = \
   3manager.org.apache.juli.FileHandler

参考