y_uti のブログ

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

巡回セールスマン問題の近似解法と 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. 動詞の格パターンの抽出 今回用いている文章をコ…

Task Spooler を試した (社内勉強会の発表資料)

先日、Task Spooler というツールを知り*1、少し試してみたところ便利そうだったので、勤め先の社内勉強会で紹介しました。発表資料を公開します。 Task Spooler を試した from y-uti www.slideshare.netTask Spooler は、簡易ジョブ管理システムのようなツ…

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

『言語処理 100 本ノック』に PHP で挑戦しています。今回は第 5 章の問題 44 を解きます。 www.cl.ecei.tohoku.ac.jp 44. 係り受け木の可視化 与えられた文の係り受け木を有向グラフとして可視化せよ.可視化には,係り受け木をDOT言語に変換し,Graphvizを…

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

『言語処理 100 本ノック』に PHP で挑戦しています。前回は、第 5 章で利用するデータを CaboCha で処理するところまで進めました。今回は第 5 章の問題を解いていきます。 www.cl.ecei.tohoku.ac.jp 40. 係り受け解析結果の読み込み(形態素) 形態素を表…

『言語処理 100 本ノック』に PHP で挑む (第五章の準備)

『言語処理 100 本ノック』に PHP で挑戦しています。今回から第五章に入ります。 www.cl.ecei.tohoku.ac.jp 準備 夏目漱石の小説『吾輩は猫である』の文章(neko.txt)をCaboChaを使って係り受け解析し,その結果をneko.txt.cabochaというファイルに保存せ…

PHP の JIT 実装を試す

PHP の開発者向けメーリングリストに、JIT の開発を始めたという投稿がありました。PHP 8.0 への搭載を目標として開発を進めるそうです。 php.internals: JIT for PHP projectそこで、投稿に書かれているベンチマークテストを私の環境*1でも実行してみました…

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

『言語処理 100 本ノック』に PHP で挑戦しています。今回は第 4 章の残りの問題を解きます。 www.cl.ecei.tohoku.ac.jp 37. 頻度上位10語 出現頻度が高い10語とその出現頻度をグラフ(例えば棒グラフなど)で表示せよ.

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

『言語処理 100 本ノック』に PHP で挑戦しています。前回は、MeCab を導入して形態素解析の結果を読み込む関数を実装しました。今回は、この関数を利用して問題 31 以降を解いていきます。 www.cl.ecei.tohoku.ac.jp[2016-08-19 追記] 各問題の実行結果を追…