サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大谷翔平
chiral.hatenablog.com
複数のカテゴリ変数があって、それらの相関をみたいときクラメールの連関係数というのが便利です。 カテゴリ変数の間の相関をまとめた変数をざっくり取り出したいときは因子分析というのを使うことが多いと思いますが、ここでのテーマはその因子分析とかを適用する手前の「まずデータの雰囲気を見る」段階についてです。 データフレームagというのがあるとします。 > head(ag) A B C D E F G 1 1 0 2 2 1 2 1 2 0 0 3 2 0 0 2 3 0 0 1 2 0 0 1 4 1 1 3 2 1 1 3 5 1 1 1 1 0 2 2 6 2 0 3 3 0 3 3 > nrow(ag) [1] 97009reshape2パッケージを使うとカテゴリの値ごとにクロス集計できます。例えば、カラムAとBのカテゴリ値のクロス表は library(reshape2) > dcast(ag
簡単だった。 var attachMethods = function(obj,methods) { var wrap = function(a,f) { return function() { return f.apply(a,arguments); } }; for (var name in methods) { if (obj[name]) throw "conflict:"+name; obj[name] = wrap(obj,methods[name]); } return obj; } 以下のように使う。既存メソッドと名前がぶつかったらエラーを投げる。実行コンテキストでメソッド構成が変わるようなオブジェクトはあまりないのでこの仕様でOKでしょう。 var sysObj = some.system.getObj(); attachMethods(sysObj, { myMetho
R言語で実装してみました。特にパッケージは使ってないのでコピペすれば動くと思います。 このプログラムは隠れノード数やCD-kのkや更新ステップのηや収束条件のパラメータ等を変えて試すことが出来ます。 また学習後のRBMを使ってreconstruct(後述)したり隠れノードのサンプリングや確率計算をしたり出来ます。 ソース ### Restricted Boltzmann Machine implementation by isobe sigmoid <- function(x) 1/(1+exp(-x)) rbm <- function(obs,n_hidden,eta=0.05, epsilon=0.05,maxiter=100, CD_k=1,reconstruct_trial=10, verbose=0) { L <- nrow(obs) N <- ncol(obs) M <- n_
勉強したことメモ。数式を使わずに書く。 また、行間をスキップせずに、多少くどいかもしれないくらいにきっちり順を追って説明を書いたので長いけどわかりやすくなっているはず。 第一回はベイズの手前まで、最尤法のあたりまでの話をする。 推定量 データを表す確率変数があってその密度関数は何らかのパラメータであらわされているとする。観測したデータから合理的にパラメータを決定するタスクのことを推定という。 推定を世界で最初にガッチリ研究したのはフィッシャーという人で、彼は推定方法の良しあしを判断する基準として、(A)不偏性、(B)有効性、(C)一致性、(D)漸近正規性、(E)十分性、などを考えた。 データからパラメータを推定する手続きは、データの関数として表せる。そういう関数を推定関数、そうやって計算した値を推定量と呼ぶ。 観測されうるデータは確率変数なので、推定量も確率変数となる。 推定量が確率変数だ
今日はアドファイブの製品開発の中身について少し。 背景(実装を早く見たい方はここはスキップして次節へ) バナー広告に代わる広告フォーマットとしてネイティブ広告というのが欧米を中心に盛り上がっています。TwitterやFacebookのフィードに紛れ込んでくる広告もネイティブ広告の一種と言われています。 ネイティブ広告特有の技術として、サイトのデザインに自動的にフィットさせる技術を開発する必要があります。 例えば、このNativoというネイティブ広告プラットフォームベンダはWebサイトを自動的に解析してネイティブ広告をプレビューできるという技術を持っています。手動で色々とインタラクティブにデザインの定義や設定をするUIでも良いのですが、やはりNativo社のような自動化エンジンを開発したくなります。 TwitterやFacebookのフィード広告のように、ネイティブ広告の代表例は「フィード型
トラックバック&感想。 ソフトウェアを作るのは、意外と難しい これ共感しますね。 このテーマ、僕も一家言ぶちたい願望があるので、ちょっと僕の言葉で言い換えてみます。 ソフトウェア以外にも顧客の注文なり社会的な要請なりを受けて創造されるものってあると思います。 CMの音楽を作曲する 美術館を建造する 注目があつまるフェルマー予想を証明する といった感じに。 作曲の場合、発注者が作曲家にリクエストする内容はどんな感じでしょうか。納期と予算はまずあって、ウキウキする感じ、とか荘厳な感じとか、ポップな感じとか、曲の長さとかクライマックスがこの辺にくるとか、使う楽器とかは専門的なのであまり注文つけられないかな、とか、そういう感じでしょうか。ざっくりとしたリクエストを投げて、いくつか作ってもらってイメージに合うものを採用するというプロセスをふむと思います。 美術館の建造でしたら、予算と納期、ロケーショ
以前このブログでも紹介したAnacondaをMacで使うとき、Systemにもとから入ってるpythonやbrewで入れたpython等とライブラリパスなどがぶつかって使いづらいときがあります。 そこでpyenvを入れてみました。ググるとやり方は出てきますが一応ここでも。 # brew install pyenv # cat >> .bashrc HOMEBREW_PATH=/opt/boxen/homebrew export PYENV_ROOT=$HOMEBREW_PATH/opt/pyenv if [ -s $HOMEBREW_PATH/bin/pyenv ] ; then eval "$(pyenv init -)" pyenv global 2.7.6 pyenv version | sed -e 's/ .*//' fi # source .bashrc (初回は2.7.6がま
slideshareを公開しました。PDFはこちらからダウンロード可能です。再配布自由です。 ブランディング指標の数値化について from Masayuki Isobe
Juliaについて書かれた海外のブログ記事でとても共感したものがあったのでブログ主に無断で翻訳したものを掲載します。(もし問題ありましたらご連絡ください。) このブログの著者はEvan Miller氏というソフトウェア開発者でWizardというかなりイケてそうな統計分析パッケージソフトを専業で開発している人みたいです。フリーランスなのかな。考え方も環境もそしてもしかしたら年齢も僕と似ている人なのかもしれない。 「私がJuliaを推す理由」(2014/1/23) 殆どのプログラミング言語の問題はそれらが言語ギークによってつくられていることだ。彼らは私ならほとんど気にしないようことに傾注しがちだ。安全性、型システム、同図像性、などなど。私はそういうものが確かに素晴らしいと思ってはいるが、新しい(訳注:そういう新プログラミング言語とかの)プロジェクトを興味本位で漁ってみる際に関心があるのは(1)
昨年NIPSベストペーパーで話題になったVCAの論文読みメモです。 デンソーアイティラボラトリの塚原氏が試していた件を初めとして、幾人か実装してブログを書かれているが、なぜ単純な円にガウスノイズを乗せた程度のグラフで円の方程式がパッと出てこないのか、その理由が知りたいです。 結論からいうと、論文読んでも良くわからなかったのですが、参考リンク http://lennmars.hatenablog.com/entry/2014/03/30/012008 http://d.hatena.ne.jp/m-a-o/20140323#p2 アブスト R^N上の集合に対してVanishingイデアルが定義できて、それは有限のイデアル生成系でコンパクトに表現できる。それを効率良く構成する方法を示す。我々のアプローチは数値的に安定、つまり誤差を許容する。教師あり学習に適用でき、実験ではカーネル法と同等の精度
カルマンフィルタという数理手法がロケットの姿勢制御等で良く使われています。これをアドテクに応用できそうに思うのでシェアしてみます。 カルマンフィルタと関連手法(知ってる人は飛ばして次へ) カルマンフィルタは一言でいうと「連続値の隠れ変数についてのモデルが既知でそれが線形で不定性をガウスノイズでくくれるような問題」に適用可能な手法です。 データサイエンティスト的な手法分類としては、線形じゃなくて非線形だったら粒子フィルタというのを使いますが、粒子フィルタはサンプリングといって乱数でシミュレートしてあたりをつけるみたいな方法なのに対して、カルマンフィルタは次の推定値を式一発でビシッと出してくれる(そういうのを「閉形式で解析的に求まっている」みたいな言い方をします)ので線形モデルで近似できそうならば線形モデルを使うことの利点はかなりあります。 隠れ状態が連続値でなく離散値だったら隠れマルコフモデ
出力変数(被説明変数)がYes/Noみたいな2値で表されるようなモデルを学習させたい場合についてググるとロジスティック回帰とかプロビット回帰とか出てきて、 「どうやらロジスティック回帰を使うのが定石っぽいけど、プロビットっていう良くわからないのがいっつもくっついて説明されてて困るなぁ」 と思ったりするのは僕だけじゃないはず。そこで自分なりに違いを考えたのでシェアしてみます。 問題1(プロビットが合う) 「ある人の年齢Nを聞いたとき、その人が既婚者か」を確率P(N)で表わすという問題を考えてみます。 結婚という「変化のイベント」について考えると、なんとなく平均結婚年齢あたりにピークがあって、その前後ではなだらかに頻度が少なくなっているイメージがあります。なのでその分布を正規分布だとしましょう。そうすると、年齢Nを聞いたときにその人が結婚してるかどうかは、正規分布の累積分布関数P(N)、すなわ
前回のつづきです。いくつか理論の補正*1 実験はR言語で行いました。ソース及びデータの一式はChiral's Gistに置いてあります。 具体的な問題設定 ある市場において、商品カテゴリ1,2があり、A社とB社が競合してるとします。A社は1,2両方のカテゴリの商品を扱っているいっぽうで、B社はカテゴリ2の商品のみを扱っています。 ユーザの興味ベクトルは、商品カテゴリ1,2それぞれの選好度、A社とB社それぞれのブランド選好度という4つの要素と、それらの4要素の変化の速度成分を加えて計8次元のベクトルとします。ここでいうユーザは何らかのひとかたまりのオーディエンスという想定です。 そしてA,Bの2社が、ユーザに向けてそれぞれ広告を打ちました。時間の単位は1週間とし、両社の広告の応酬が繰り広げられた3か月(13週)間を分析対象とします。 広告の種類は3種類、すなわち広告1がA社の商品カテゴリ1、
トラックバック&感想 最初の3年で仕事人生の大半が決まる説 意識高い(笑)と小馬鹿にしてる人に哀れみを感じる。 こういう話を読んで思うのは、プロ将棋の世界のことだ。トップ棋士の羽生さんは14歳でプロになり、以後ずっとトップを維持している。 仮にその羽生さんが 「一生は子供の頃からの才能で決まる。10代で既に才能がみえていなければ超一流になるのは難しい」 と言ったとする。そしてたぶん、それは事実だと思われる。 上記エントリのKAIZEN Platform須藤社長が書かれている事も、それと似たような話だと思う。そしてそれは事実そうだと思う。 しかし最大限のエネルギーを注げるかどうかは、その人に合った事をやっているかどうかだと思う。努力が続かないというのは、自分に合ってない事をやっているからであって、羽生さんや須藤さんのような成功者は合った事をやったひとなのだ。仮に須藤さんがプロ棋士を目指して奨
私は色んなプログラミング言語を触るのが病的*1に好きで、どの言語をどういう場面で使うのが良いのか凄く興味があります。 そこで、今の私の知識範囲でのそれぞれのプログラミング言語の使いどころを(自分用の整理もかねて)書いてみます。 C/C++ - C=OSやミドルウェア、C++=効率化のための再実装 安直に「メモリとスピードが第一優先のとき」と思いたいところですが、同等程度のスピードでもっといい言語はいっぱいあります。計算集約的ならJuliaとか、オブジェクト指向で組むようなソフトならD言語とか。なのでまずC言語は、Swigみたいのを使って他の言語の拡張ライブラリを書いたり、システムコールを使ってOSやミドルウェアを書くときじゃないかと思います。C++はテンプレートを駆使したりして効率を維持しながら抽象度の高いコーディングをするような場面がしっくり来ると思います。既に他の言語で実装したソフトウ
独立してからの2年間は、本当に自分がやりたいことを、他人からの色々な意見や世間で言われている常識に振り回されて、やれなかった。 開発に専念していいから、営業をやってあげるという甘い言葉で独占アライアンス契約を結ばされて、結局クライアントを一人もつれてきてくれなかった人、大手企業とのコネクションがあるのでこういうのを作ったらすぐに売り込みにいくからと言われて1ヶ月くらいでプロトタイプを作ったら本番の予算を組みたいから本格的に作ってくれと言われ、特許調査など諸々やったあげく一円もくれず「お詫びの言葉」だけをくれた人、そういう目に会った。 被害者めいたことを書いてしまいましたが、全て自分の心の弱さが原因。経営は結果が全て。世間に疎い自分が、そういう手になびいてしまったというだけのこと。 でもたぶん、それは自分にとって必要なプロセスだったのでしょう。最近は断ることが出来るようになったし。 もう、絶
このブログは「技術にマニアックなこだわりを持つようなプログラマが一人起業で頑張るパターン」について「試行錯誤してどうなったかをその都度色々シェアしてほしい」というニーズがあると思っているので、それが中核コンセプトです。 つまり、私を一つの実験事例として見ていただければ幸いと思って書くことにしてます。 またその中核コンテンツへの導線として、アドテク関連情報やプログラミングやデータマイニングネタをスポットでちりばめてSEO的なスケールも狙っています。 もちろん、このブログを仕事の引き合いのチャネルにする目的もありますが、それは自然な二次効果として期待できると思っています。というのもこのブログがメディアとしての機能を帯びさえすれば勝手に私とアドファイブの名前は認知度が向上していくと思うからです。なので営業面をそれほど意識せず書いていきたいとも思っています。 最近考えをまとめたこのブログの記事執筆
トラックバック&感想。 起業する前に意識すべき5つのポイント。失敗してみて気づいた、とあるスタートアップの反省 いつも不思議に思うんだけど、こういう起業家ってなんで自分でプログラミングしないの? 「プログラミング出来ない奴の考えたビジネス」にエンジニアが薄給もしくは株のみで協力することを当然のように考えるメンタリティってなんなの? BizDev担当ってつまり「契約を取ってくる人」だと思うんだけど、飛び込み営業とかやれること全部やったら結構まだまだ売り上げ立つんじゃないの? そもそも戦略だけならプログラマでも考えられるので、戦略を考えるだけの人って年商1億くらいまでは要らないんじゃないの? あと、そもそもこの人ってまだ死ななそうな感じするのに何でやめるの? 僕も井上さんのようにならないように頑張ろう。
あんまり語られてないことだけど僕が重要だと思っていることを書きます。 最近、特に米国の高等教育機関(大学や大学院のことね)のそれもトップ層の教育コンテンツが無料で公開される動きが増えてきた。スタンフォードやMIT、ハーバードもあったかな。 日本でも、それもネットではなくテレビで視聴できる放送大学の授業はずいぶん前からある。ただ日本は多くの人がテレビを買える豊かな国なのでもともと教育水準が高い。 世界の国々の多くは日本よりも経済的に貧しい国だが、それらの国でネットが普及している。特にスマートフォンは一台5000円程度で買える。5000円というのは例えば日本より30倍貧しい国の人からすると日本人の感覚でいうところの15万円くらいのコスト感だと思うが、それは十分庶民的に手が届く代物である。 電話を引くには物理的に電話線を引かなければならなかったが、無線IP網は鉄塔を立ててコモディティな通信機器を
知人に聞かれて挙げてみたのでここにも書いておきます。 海外 http://digiday.com/ http://www.adexchanger.com/ http://adage.com/ http://www.adweek.com/ http://search.gigaom.com/?s=advertising Quora http://www.quora.com/Digital-Marketing http://www.quora.com/Real-Time-Bidding http://www.quora.com/Data-Management-Platform-DMP http://www.quora.com/Mobile-Advertising http://www.quora.com/Social-CRM 日本 http://marketing.itmedia.co.jp/
PlayFrameworkerのisobeです。Scala面白いです。 Play使い始めてしばらくDAO周りでAnormを使ってたのですがノーテーションが冗長すぎて辛いのでSlick(旧ScalaQuery)に乗り換えました。今最新のPlay2.2を使ってるのですが次期2.3では標準ORM(というかDAO)がAnormからSlickに置き変わる予定だそうです。(ってことをSlick使い始めてから知りました) ライブラリの設定周り Play2.2ではplay new直後は入らないのでjarをlib/にぶち込むか、以下のようにbuild.sbtにmvnリポジトリを指定してplay updateで自動でダウンロードされるようにします。ちなみにScala使い始めてbuild.sbtとBuild.scalaの違いに混乱したりするのですがこのエントリが超分かりやすくて、つまりsbtのDSLはBuild
Node.jsアドベントカレンダー2013の4日目。 node.jsを使うとWebプロキシサーバのようなものは簡単に作れますが、それと似た仕組みでミラーサーバを作れます。 機能要件*1は以下を想定します。 一個のNode.jsプロセスで複数のサイトをミラー出来る ブラウザ側の設定を変えない(なのでプロキシやchromeプラグインはNG) ミラー対象サイトのURLを与えるとミラーサイトのURLを発行する設定API 例えば、http://aaa.bbb.com/ccc をミラーしたいとすると、http://aaa.bbb.com/ccc を登録するとミラーサイトのURL(後述)を発行してくれて、そのURLへのアクセスはすべてサーバサイドで元のサイトに中継してくれる、というものを作りたいわけです。それが出来れば、ミラーサイトの内容を編集するのは簡単なので、任意のサイトの改変後の姿を見ることができ
R Advent Calendar 2013の11日担当記事です。 日付を一日勘違いしてしまい一日遅れになってしまいました。すみません。 テーマは、スプライン曲線で自由に設定した確率分布を使ってベイズ推定をやってみよう、というものです。ガウス分布もベータ分布も出てきません。え、共益分布?なにそれ、尤度関数にマッチする事前分布を設定すればパラメータの更新だけで事後分布出てきますよだって?ノンノン、本記事はそんな小難しいこと知らなくてもベイズ推定のキモは試せるぜ、という話です。 さて能書きはこれくらいにして本題。 R言語でスプライン曲線 飛び飛びの点を用意してsmooth.splineというの関数に与えると、スプライン補間した関数(に相当するオブジェクト)を返してくれます。それに任意のxの点を与えると対応するyの点を返してくれます。 例えば xy<- rbind( c(0,10), c(20,
Scala Advent Calendar 2013の10日目担当記事です。みんなガチな人ばかりで怖いです。あまり期待しないでください。 ググっても日本の記事があまりないSprayの紹介をしてみます。 あと表題と関係ないですが最近書いたPlayFrameworkにSlickやSecureSocialを入れたメモを掲載しておきます。 Play2.2へのSlickのインストール Play2の認証ライブラリSecuaSocialを使う Sprayについて Akkaをベースに非同期モデルで実装された超ハイパフォーマンスなHTTP処理フレームワークという感じのもの。型システムがあって非同期でマルチスレッド(アクター)対応しててプラグインがある程度揃ってるHTTPサーバやWebフレームワークってScalaにしばらなくても少なそうです。ハイフリークエンシ―なWebアプリケーションやREST-APIを作る
Haskell Advent Calender 2013 12/5日当番記事です。 CoffeeScriptとかHaxeとかTypeScriptみたいなJavascriptにトランスレートして使う言語たちをAltJSっていうそうです。HaskellコードをJSに変換するプログラムもいくつかあって、このページに一覧があって詳しい。そこに掲載されてるFayとHasteを触ってみます。他にUHCやGHCJSというのもありますが試したら弱冠インストールでハマったのでそれらは機会あればまた。 そいつらを上手く使えば、サーバサイトはYesodまたはScotty、クライアントサイドはHaskellなAltJSを使ってオールハスケルなWeb開発が(マークアップをHaskellでやるやつとかもありますね)可能になります。ちなみにScottyのTipsを以前少し書いたので以下もあわせてどうぞ。 Scottyで
先日Juliaでデータ分析環境をインストールする話を書きましたが、もっといいやつがあったのでご紹介します。(IJuliaです。実はjuliaのホームページにそっくり掲載されてるのですが先日はなぜかスルーしてしまってた) 先の記事の最後に「Python(Pandas/Scipy/Sklrn等を使う環境)とJuliaで比較しながら今後の道具立てを整えたい」みたいなこと書きましたが、別にどっちかに決めなくても両方同時につかえちゃうIPython(Anaconda)という無料のすごいツール(オプション機能は有料ですが、その有料オプションがこれまた凄い)がありました。 開発元やライセンスなど(そういうのはいいから早くインストールしたい人は次節へ) IPythonというのは「Pythonにデータ分析系のライブラリをごっそりプレインストールしてかつMathematicaみたいなノートブック型のGUIをつ
PlayFrameworkで認証周りを実装するときSecureSocialというライブラリが便利です。(もともとPlay1.xに対応する認証関連ライブラリとしてPlayの公式サイトにも掲載されてますがPlay2.xにも対応済みで便利に使えます。) 私はNode.jsでexpressを使うときはpassportというライブラリを使うのですが、それと似たような使用感です。 以下、SecureSocialのドキュメントにある通りやったもの。 build.sbt build.sbtのresolverとlibraryDependenciesに以下のように追加。 resolvers += Resolver.url("sbt-plugin-releases", url("http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/"))(Resolver
機械学習/データマイニングのバックグラウンドにある数式をきちんと学んだら、実際にアルゴリズムをコードとして書いてみるととても力が着くと思います。便利なパッケージやツールも色々とありますが、ソフトウェアエンジニアだったら製品開発のために独自に実装できるようになりたいって思うものですよね? プロダクション利用を見越して、かつ、学べるソフトウェア環境として候補は以下かなと思います。 Python(Pandas+Scipy/Numpy/SkLrn) C++(RcppパッケージやJubutusプラグイン) Julia 全部試してみたいのですがとりあえず面白そうなJuliaで環境構築してみます。(すみません、私はWindows+UbuntuなユーザなのでMacや他のLinuxについてはもし参考になれば幸いです) IDE(統合開発環境) JuliaはShell+Emacsでも便利だと思いますがWindo
量子将棋、流行ってますね。 Haskellで思考ルーチンを作ってみようと思って書き始めてみました。 とりあえず、盤駒データ構造、駒のきき生成、指し手の処理など基本的なところは出来た。 https://gist.github.com/chiral/7295637 BitSetやIntMapを使って、繰り返し計算もなるべく少なくなるように工夫しましたが、Haskellは最初はそういう工夫はせずとりあえず効率悪くても動くモノを作ってしまうときに使うのが良いのかも、とか思いました。 続きはαβ法+反復深化法での探索と評価関数。WebのUIも(それはHaskellじゃない言語で)作りたいところ。
次のページ
このページを最初にブックマークしてみませんか?
『アドファイブ日記(ミラー版)』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く