旅行好きなソフトエンジニアの備忘録

プログラミングや技術関連のメモを始めました

【機械学習】「仕事ではじめる機械学習」を読んでのメモ

1章 機械学習プロジェクトのはじめ方

1.2 機械学習プロジェクトの流れ


1. 問題を定式化する
* ○○のために××が必要。そのために機械学習を利用する。機械学習が○○に貢献しているかどうかの判断として、□□をKPIとする

2. 機械学習をしなくて良い方法を考える
* ルールベースで期待する精度が出るのに機械学習を適用しようとしていないか
* 100%の精度が得られるといった実現不可能な期待はないか
*(画像処理で十分なのにCNNを適用しようとしていないか)

3. システム設計を考える
* 予測結果はどういう形で利用するのか
* 予測誤りをどこでどうやって吸収するのか

4. アルゴリズムの選定
* 過去に類似の問題がどのように解かれているか(Kaggle等を調べる?)
* PCAやt-SNEでデータの特性を可視化してあたりをつけられないか
* (問題設定が複数考えられる場合は顧客に前もって確認しておく。例えば顧客はクラス分類問題を求めているようで、実は対象の大きさも知りたいと思っており、セグメンテーション問題として扱わなければならないかもしれない。逆に顧客はセグメンテーション問題を求めているようで、実は対象の大きさは必須ではなく、ラベリング負荷が減るのであればクラス分類問題として扱っても良いかもしれない)

5. 特徴量、教師データとログの設計をする
* ビジネスドメインに詳しい人に予測に必要な情報を確認する

6. 前処理をする

7. 学習・パラメータチューニング
* ロジスティック回帰等シンプルなアルゴリズムをまず適用する
* (学習データで精度が出ない? ⇒ モデルを大きくする、学習期間を長くする、別のモデルを試す)
* (バリデーションデータで精度が出ない? ⇒ データを増やす、正則化を適用する、別のモデルを試す)

8. システムに組み込む
* 予測性能とKPIをモニタリングし、継続してビジネスに貢献しているのか確認/改善を続ける
* 改善を続けることが出来る組織づくりもしておく

1.4 機械学習を含めたシステムを成功させるには

機械学習を含めたプロダクトをビジネスとして成功させる上で重要になるのは以下の4者がいること

  1. プロダクトに関するドメイン知識を持った人
  2. 統計や機械学習に明るい人
  3. データ分析基盤を作れるエンジニアリング能力のある人
  4. 失敗しても構わないとリスクを取ってくれる責任者

機械学習プロダクトを作っていくうえで参考になる資料

www.slideshare.net

www.slideshare.net

5章 学習のためのリソースを収集しよう

1. 公開されたデータセットやモデルを活用する
* モデルやデータセットは商用利用可能なライセンスか
* 学習済みモデルやデータセットを自分のドメインに適用できるか

2. 開発者自身が教師データを作る
* 決めたカテゴリはそのままで良いのか、分類の定義を更新した方が良いのか考えて分類する
* 他に重要そうな特徴量が判明したら、それを含めると改善する可能性がある
* 分類基準は実例を残して他人に説明できるようにしておく

3. 同僚や友人などにデータ入力してもらう
* 複数名で作業するとき、同一のデータに対して正解を付与してもらうことも重要。人間同士でも分類が一致しないようなタスクは機械学習では解けない問題の可能性が高い

4. クラウドソーシングを活用する
メリット
* 専門の作業者を雇うより作業が速く、金額も専門家への依頼より安い * 作業が速く終わるため試行錯誤しやすい * 作業コストが低いことから、複数人に同一タスクを依頼するなど冗長性を持ったデータ作成が可能

注意点
* 作業者が短時間で解けるようにする必要があり、タスクの設計が難しい * 高い専門性が求められる作業は、手順の分割、詳細化などが必要 * 作業結果の質を担保するために、結果をチェック/利用する際の工夫が必要

5. サービスに組み込み、ユーザーに入力してもらう

仕事ではじめる機械学習

仕事ではじめる機械学習

【C#】Windows7で日本語音声合成する

音声合成はSystem.Speech.SynthesisのSpeechSynthesizerクラスを使えば良いのですが、Windows7ではデフォルトで日本語対応しておらず、対応させるには非常に面倒そうでした。

結局ここに書いてあるように、Windows7ではSpeechLibを使うのが楽だと思います。

using SpeechLib;

var readonly voice = new SpVoice();

private void SayHello()
{
    voice.Speak("ハロー");
}

【Python】 ファイルの行数を数える

データがいくつ入っているのか数えたかったのですが、以下で簡単に行数を取得できました。

num_lines = sum(1 for line in open('myfile.txt'))

ja.stackoverflow.com

【WPF】 PNG ⇔ BitmapSourceの変換

ここ(方法: PNG イメージをエンコードおよびデコードする)で調べました。

PNG ⇒ BitmapSource

using System.IO;
using System.Windows.Media.Imaging;

public BitmapSource ReadPng(string pngPath)
{
    var stream = new FileStream(pngPath, FileMode.Open, FileAccess.Read, FileShare.Read);
    var decoder = new PngBitmapDecoder(stream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
    return decoder.Frames[0];
    // 誤ってstreamをDisposeするとBitmapSourceも捨てられます
}

BitmapSource ⇒ PNG

using System.IO;
using System.Windows.Media.Imaging;

public void SaveAsPng(string pngPath, BitmapSource bitmapSource)
{
    using (var stream = new FileStream(pngPath, FileMode.Create))
    {
        var encoder = new PngBitmapEncoder();
        encoder.Interlace = PngInterlaceOption.On;
        encoder.Frames.Add(BitmapFrame.Create(bitmapSource));
        encoder.Save(stream);
    }
}

【アイトラッキング】 アイトラッカーメーカー一覧

アイトラッカーを販売しているメーカーのメモです。以下に記事に加えて日本のメーカーを付け加えています。 imotions.com

Tobii

まず思い付くのがTobiiです。まぁ高いのですが、視線を解析しないのであればTobii Eye 4CをAmazonから購入すると安くすみます(Tobii Eye 4Cはライセンス上視線の解析が認められていません)。 www.tobii.com

SMI

Appleに買収されたなんて記事があります。物は良いけどべらぼうに高い印象があります。

EyeLink

サンプリングレートが異常に高い製品を販売しているので特殊な用途向けでしょうか。問い合わせたことが無いので価格は分かりません。 www.eyelinkinfo.com

ISCAN(http://www.iscaninc.com/

ホームページに情報が無さ過ぎて問い合わせ必須です。ホームページからのどかな場所にオフィスがあるんだということは分かります。

LC Technologies

ホームページに行くとモニタ一体型のリモートタイプアイトラッカーのみが表示されるので、ヘッドマウント型は販売していないのかもしれません(要確認)。問い合わせたことが無いので価格は分かりません。 www.eyegaze.com

EyeTech

リモートタイプ、モニター一体型リモートタイプを販売しているようです(+OEM)。問い合わせたことが無いので価格は分かりません。 www.eyetechds.com

Eye Tribe

この会社の登場でアイトラッカーに低価格化の波が来ることを期待していたのですが、Oculusに買収されてしまいました。

Ergoneer(http://www.ergoneers.com/en/

ヘッドマウント型を販売しているようです。

Smart Eye(http://smarteye.se/

リモートタイプを販売しているようです。ホームページを見ると車載向けソリューションに特化している感じです。

Mirametrix

ホームページが見辛い。。。 www.mirametrix.com

Pupil Labs

ヘッドマウント型を販売しているようです。 pupil-labs.com

Gazepoint

低価格アイトラッカーを販売しているので魅力的なのですが、いかんせんヘッドボックスが狭いのが難点です。 www.gazept.com

ナックイメージテクノロジー(http://www.eyemark.jp/

モニタ一体型リモートタイプ、ヘッドマウント型を販売しているようです。モニタ一体型は精度は落ちるもののキャリブレーションフリーも可能なようです。

ディテクト(http://www.ditect.co.jp/products/gauging/index.html

リモートタイプ、ヘッドマウント型両方取り扱いがあるようです。リモートタイプのラインナップの中に測定距離120cm~250cmというものがあり、リモートタイプで長距離測定可能というのは他では見当たらないかもしれません。

Intel

アイトラッキング用ではありませんが、IntelのRGBDカメラF200で視線追跡が出来るようです。 www.buildinsider.net

精度はどうなんでしょうか。ここでは精度は良いと回答されていますが、試してみたいところです。

【WPF】 StackPanelにアイテムを追加した時に自動でスクロールさせる

ScrollViewer内のStackPanelに画像を次々追加した時、何もしないとスクロールは一番上にありますが、これを f:id:ni4muraano:20180123184918p:plain

こんな感じに自動でスクロールを一番下に持っていって欲しいという状況でした。 f:id:ni4muraano:20180123185048p:plain

これを実現する方法は簡単で、画像を動的に追加した時にScrollViewerのScrollToBottomメソッドを呼び出せば良いだけでした。疑似コードは以下のようになります。

StackPanel1.Children.Add(Image);
ScrollViewer1.ScrollToBottom();

【アイトラッキング】 RGBカメラで視線計測できるサービス

iMotionsのブログで角膜反射法での視線計測と、ウェブカメラベースの視線計測が比較されていました。

imotions.com

ウェブカメラベースの視線計測は角膜反射法と比較して精度が劣りますが、逆に精度が重要でなければ検討しても良いかもしれません。上記リンクは海外のサービスのみが紹介されていますが、日本であればオムロンNECがカメラから視線計測する技術を持っていそうです。