y_uti のブログ

統計、機械学習、自然言語処理などに興味を持つエンジニアの技術ブログです

WPF の GridSplitter の実装を調べる

Windows Presentation Framework (WPF) の GridSplitter の動作を理解するため、Reference Source を調べてみました。GridSplitter の動き方は、グリッドの列幅や行高を比率で指定した場合とピクセル値で指定した場合で異なります。Reference Source を読む…

WPF の GridSplitter を使う

Windows Presentation Foundation (WPF) の GridSplitter を使う機会があったので、使い方について調べた内容をまとめます。GridSplitter はグリッドの行の高さや列の幅を変更可能にするコントロールです。何となく簡単そうな印象があったのですが、実際に使…

PHP カンファレンス福岡 2018 に参加しました

一昨年、昨年に続き、今年も PHP カンファレンス福岡 2018 に参加しました。 phpcon.fukuoka.jp今年は、前日の 17 時から 前々夜祭、19:30 から 前夜祭 と非公式なサテライトイベントが開催され、これらにも参加してきました。前々夜祭は GMO ペパボ株式会社…

PHPerKaigi 2018 に参加しました

3 月 9 日から 3 月 10 日に開催された PHPerKaigi 2018 に参加しました。会場は練馬区立 区民・産業プラザ Coconeri ホールでした。 phperkaigi.jp全体的にとてもくだけた雰囲気で、お祭り感覚で楽しめるカンファレンスでした。発表はどれも内容の濃いもの…

PHPUnit の assertEquals を調べる

PHPUnit の assertEquals メソッドは、sebastian/comparator パッケージを利用して等価性を判定します。PHP の == 演算子を直接利用する実装にはなっていません。そのため、独自の拡張モジュールで == 演算子の挙動を変更した場合には、== での比較と assert…

nikic/comparable で PHP の比較演算をオーバーライドする

PHP で比較演算子の挙動を変更する拡張モジュール nikic/comparable を試してみました*1。PHP ではオブジェクト同士の比較方法は言語仕様として決められており*2、他の言語で見られるように equals や compareTo といったメソッドで挙動を変更することはでき…

PHP-ML で手書き数字認識 (勉強会発表資料)

PHP-ML という機械学習ライブラリを使って、MNIST の手書き数字認識を試してみました。11 月 29 日に開催された 第120回 PHP勉強会 の LT で発表しましたので、スライドを公開します。 PHP-ML で手書き数字認識 from y-uti www.slideshare.net勉強会の LT 発…

巡回セールスマン問題の近似解法と 2-opt 改善法

前回の記事に続き、巡回セールスマン問題の近似解法について調べてみます。前回は、いくつかの近似解法を実装して、問題を解く様子をアニメーションで紹介しました。今回は、それぞれの解法でどのくらい良い解が求められるのかを比較してみます。 巡回セール…

巡回セールスマン問題の近似解法を眺める

今年の 8 月頃に、paiza のプログラミングの問題に取り組みました。巡回セールスマン問題を解くものです*1。 paiza.jp巡回セールスマン問題の近似解法として、さまざまなバリエーションが知られているようです。そこで今回は、いくつかの簡単な方法を PHP で…

OPcache の最適化器の今 (PHP カンファレンス 2017 発表資料)

10/8 (日) に開催された PHP カンファレンス 2017 で「OPcache の最適化器の今」という内容で発表しました。発表資料を公開します。 OPcache の最適化器の今 from y-uti www.slideshare.netPHP カンファレンスという大きなイベントでもあり、発表のレベル感…

PHP のバージョンごとのベンチマーク実行時間

PHP 5.5 以降の各バージョンでマイクロベンチマークの実行時間を計測してみた結果を報告します。PHP のソースコードに含まれている Zend/bench.php を私の環境*1で各 10 回ずつ実行したものです。青色の棒は OPcache を無効にして実行したもの、橙色の棒は O…

Lasso によるパラメータ推定を確認する (社内勉強会発表資料)

7 月 4 日 (火) に統計数理研究所の公開講座「スパース推定」を受講しました。電気通信大学の川野秀一先生による講義で、Lasso とそれを発展させた様々なスパース推定法の紹介、推定値を得るための最適化アルゴリズムの説明など、分かりやすく説明していただ…

Kaggle の Titanic チュートリアルに挑戦する

Kaggle でチュートリアルとして開催されている、Titanic 号の生存者の予測 (以下、単に Titanic と記述します) に挑戦しました。実装したコードを公開します。Kaggle のサイト上で登録したものです*1。この実装でテストデータに対する判別精度は 80.8% でし…

PHP カンファレンス福岡 2017 に参加しました

6/10 (土) に開催された PHP カンファレンス福岡に参加しました。昨年に続き 2 回目の参加です。昨年はホテルの予約を取れず慌しく帰京したのですが、今年は観光も兼ねてのんびりと楽しんできました。スタッフ、発表者の方々、楽しいカンファレンスをありが…

『Python 機械学習プログラミング』 第 3 章 (社内勉強会発表資料)

勤め先での社内勉強会として、『Python 機械学習プログラミング 達人データサイエンティストによる理論と実践』を読んでいます。 book.impress.co.jp私は、第 3 章「分類問題 - 機械学習ライブラリ scikit-learn の活用」を担当することになりましたので、発…

Soft Confidence-Weighted Learning の実装

[2017-03-20] アルゴリズムと実装の対応など、全体的に説明を補強しました。Soft Confidence-Weighted (SCW)[1] を実装して、Iris データセットを分類する様子を観察します。SCW-I と SCW-II のほかに Confidence-Weighted (CW)[2], Adaptive Reguralization…

Passive Aggressive の実装

『オンライン機械学習』を参考にして Passive Aggressive (PA) アルゴリズムを実装し、学習の様子を眺めてみます。PA の制約を緩めたアルゴリズムである PA-I, PA-II も実装し、これらの動作の違いについても実験を通して比較します。 www.kspub.co.jp デー…

パーセプトロンの実装

『オンライン機械学習』を参考にしてパーセプトロンを実装し、その動作の様子を確認してみました。 www.kspub.co.jp[2017-02-19 修正] 記事中の「学習データの線形変換」の内容について、プログラムの実装に誤りがあったので修正して実験結果を差し替えまし…

Anaconda + Jupyter Notebook 環境構築でのトラブルあれこれ

Windows に Anaconda + Jupyter Notebook の環境を作成した際、いくつかのトラブルに遭遇したので、現象と解決方法を報告します。前提となる環境は以下のとおりです。Anaconda は、ウェブサイト*1からインストーラ (Anaconda3-4.2.0-Windows-x86_64.exe) を…

BoW 特徴量に対するロジスティック回帰分析の過学習

ここ数回の記事で『言語処理 100 本ノック』の第 8 章、ロジスティック回帰による極性分析の問題に取り組みましたが、正則化無しでも交差検定での正解率があまり変わらないという結果が得られました*1。今回は、このことについて詳細に調べてみます。 データ…

『言語処理 100 本ノック』に PHP で挑む (問題 78 ~ 79)

『言語処理 100 本ノック』に PHP で挑戦しています。今回は、第 8 章の残りの問題を解いていきます。 www.cl.ecei.tohoku.ac.jp 78. 5分割交差検定 76-77の実験では,学習に用いた事例を評価にも用いたため,正当な評価とは言えない.すなわち,分類器が訓…

『言語処理 100 本ノック』に PHP で挑む (問題 73 ~ 77)

『言語処理 100 本ノック』に PHP で挑戦しています。第 8 章の問題 73 から解いていきます。 www.cl.ecei.tohoku.ac.jp 73. 学習 72で抽出した素性を用いて,ロジスティック回帰モデルを学習せよ. ロジスティック回帰は、教師ありの分類問題に適用できるア…

『言語処理 100 本ノック』に PHP で挑む (問題 70 ~ 72)

『言語処理 100 本ノック』に PHP で挑戦しています。昨年の 9 月に第 5 章を終えたところで間隔が空いてしまいました。第 6 章と第 7 章は飛ばして、今回から第 8 章に取り組みます。今回の記事では、機械学習の前処理に相当する問題 72 まで進めます。 www…

geospatial 拡張モジュールで二点間の距離を求める

PHP の geospatial 拡張モジュール*1を利用して、緯度と経度で表された二地点間の距離を計算してみます。 github.comまず、拡張モジュールを取得してビルドします。通常の手順どおり phpize を利用してビルドできます*2。私の手元では、PHP 5.3.29, PHP 5.6.…

第七回 闇PHP勉強会に参加しました

12 月 11 日に開催された「第七回 闇PHP勉強会」に参加しました。私の発表内容は前回の記事で紹介済みですが、皆さんの発表も大変興味深く、とても楽しい勉強会でした。会場はピクシブ株式会社さんでした。はじめてお邪魔したのですが開放的で自由な雰囲気の…

JIT のコードを読んでみた (勉強会発表資料)

12 月 11 日に開催された 第七回闇 PHP 勉強会 に参加して、現在開発が進められている PHP の JIT コンパイラについて発表しました。 JIT のコードを読んでみた from y-uti www.slideshare.netおおまかな流れとしては、OPcache に処理を追加することで各関数…

PHP から CaboCha を使う

PHP から CaboCha を利用できるように、拡張モジュールを作成しています。 github.com一般的な PHP 拡張モジュールと同様に、次の手順でインストールできます。ただし、現時点では PHP 7 専用です。 $ git clone https://github.com/y-uti/php-cabocha.git $…

『言語処理 100 本ノック』に PHP で挑む (問題 48 ~ 49)

『言語処理 100 本ノック』に PHP で挑戦しています。今回は問題 48 と問題 49 を解いて第 5 章を終えます。 www.cl.ecei.tohoku.ac.jp 48. 名詞から根へのパスの抽出 文中のすべての名詞を含む文節に対し,その文節から構文木の根に至るパスを抽出せよ.た…

『言語処理 100 本ノック』に PHP で挑む (問題 46 ~ 47)

『言語処理 100 本ノック』に PHP で挑戦しています。今回は問題 46 から進めていきます。 www.cl.ecei.tohoku.ac.jp 46. 動詞の格フレーム情報の抽出 45のプログラムを改変し,述語と格パターンに続けて項(述語に係っている文節そのもの)をタブ区切り形式…

『言語処理 100 本ノック』に PHP で挑む (問題 45)

『言語処理 100 本ノック』に PHP で挑戦しています。今回は問題 45 を解きます。MeCab の解析結果に含まれる「読み」の情報を利用して辞書順に整列する実装も試してみました。 www.cl.ecei.tohoku.ac.jp 45. 動詞の格パターンの抽出 今回用いている文章をコ…