Lisp

CLMLのランダムフォレストを試してみる

ランダムフォレストは決定木ベースの分類/回帰モデルで、ニューラルネットやSVMなどと同様に非線形モデルなので線形分離不可能な問題にも使える。SVMはデータ数に対して指数的に計算時間がかかる一方、ランダムフォレストはデータ数をnとしてn*log(n)のオー…

Common LispでかんたんWebスクレイピング

WebスクレイピングとはWebから情報を自動的に集めてくるクローラを実装するということである。これを実現するにはHTTPクライアントとHTMLパーサ、そしてパースされた木構造から必要な情報を探索、抽出するセレクタがあればいい。Common Lispにはそれぞれに複…

Common Lispが機械学習に向いていると考えるこれだけの理由

Lisp Advent Calendar 2016参加記事ここ数年ディープラーニングの出現をきっかけにAIが再び盛り上がっているので、いよいよLispの復権があるかと思いきや、ないので(泣)、多少なりともLispに興味を持ってもらえるように、LispとAIの関係について私見を述べ…

Common Lispで書かれた形態素解析器cl-igo / cl-mecabを使ってみた

cl-igo http://igo.osdn.jp/cl-igo.html cl-igoはCommon Lispから使える形態素解析器で、辞書にはmecab互換の辞書が使える。 roswellから入るようにgithubにミラーを作ったので、 ros install masatoi/charseq masatoi/cl-igoでインストールできる。SBCL推奨…

NumPy vs Common Lisp 実行時間のみの比較

NumPy vs Common Lisp NumPyとCommon Lispの速度比較記事。処理系の起動時間も測ってしまっているので処理自体にかかっている時間を測って比較してみる。 環境は Core i5 4670 3.40 GHz Ubuntu 14.04 LTS Python 3.4.3 + Numpy import numpy as np import ti…

インストール不要でブラウザ上からSchemeを試せるサイトscheme.contellas.comを作った

Common LispでWebアプリケーションを作る練習として、簡単なSchemeの開発環境的なものを作った。 http://scheme.contellas.com Javascript製のSchemeインタプリタBiwaschemeにエディタ(CodeMirror)をつけたもの HTML5の機能を使っているので対応したブラウザ…

Emacs+SLIMEでCommon Lispの開発をリモートでするまとめ

ディープラーニングなどの重い処理を含むプログラムを出先から開発したいというときがよくある。 そういうときまずやるのが、SSHでGPUを積んだ開発マシンにリモートログインしてターミナル上でEmacs/Vimで開発するというやり方だが、LTEで速くなったとはいえ…

Common Lispによる線形分類器ライブラリcl-online-learningを書いた

去年、オンライン機械学習本(クマ本)を読んで線形分類器を実装する記事を書いたり、それらのアルゴリズムをまとめてcl-online-learningというライブラリを作ってLispmeetupで紹介したりした。 https://github.com/masatoi/cl-online-learning 書籍「オンライ…

lem: Common Lispで書かれたEmacsライクなエディタlemを使ってみた

lem: https://github.com/cxxxr/lem lemはCommon Lispで書かれたEmacsライクなエディタで、拡張もCommon Lispで書ける。cl-charmsというncursesのCFFIラッパーを使っている。 特に何もしてなくても起動が速いが、lemをロードした状態で処理系のコアイメージ…

cl-libworld: 音声分析合成システムWORLDのCommon Lispラッパーを書いた

WORLDはいわゆるボコーダーというやつで、音声データから周波数スペクトルや基本周波数(F0)、非周期性指標といったパラメータを取り出したり、それらのパラメータから音声を再合成したりできる。例えばF0をいじれば音のピッチを変えられるので、歌声合成に使…

MGLによる2クラスロジスティック回帰

人工知能に関する断創録 - Kerasによる2クラスロジスティック回帰音声でもとても参考にさせていただいたこちらのブログで今度からKerasの連載をするらしく、まず最初に最もシンプルな例としてロジスティック回帰の例が紹介されていたので、これをMGLでもやっ…

MGLで回帰:多次元出力

シンプルな例で多次元出力ができるかテスト (ql:quickload :mgl-user) (ql:quickload :clgplot) (in-package :mgl-user) ;;; 入力1次元、出力2次元のデータ (defparameter sin-cos-data (let* ((data-size 10000) (data (make-array data-size))) (loop for …

スプライン補間

急遽必要になったのでCommon Lispでスプライン補間の実装がないか調べたが、どうもないので以下のPDFを見ながら適当に実装してみる。 補間法(ラグランジュ補間とスプライン補間) - yamamo10.jp (PDF) 効率とかは知らぬ。途中、三重対角行列の逆行列を計算し…

Common LispからCの機能を利用する

先日、Common Lisp RecipesのPDF版を$17.76で安売りしていたので買ってみた。この本の19章がLispから外部機能を利用する話で、これがCFFIの簡潔なチュートリアルになっている。この辺を見ながら色々実験してみたのでまとめてみる。Common Lispでは外部機能へ…

Common Lispによる深層学習ライブラリMGL(2): 回帰問題の場合

前回はMNISTの分類問題を解いたが、今回は回帰問題の場合。 コード https://github.com/masatoi/mgl-user/blob/master/src/regression.lisp データ点の表現とそれをまとめてモデルに設定する部分 分類と回帰で何が違うかというと、まず教師信号がラベルでな…

Common Lispによる深層学習ライブラリMGL

昨今の機械学習界隈では何故かPythonやRのライブラリが多いのだが、Common Lispも高速なネイティブコンパイラを持ち、C/C++のライブラリも呼べるので、機械学習にも問題なく使える。 実際にCommon Lispで実装された深層学習を可能とするライブラリにMGLがあ…

rosスクリプト練習: PDFをPNG画像で出力

元々の動機:impressで作ったスライドを1920x1080ピクセルでまとめて画像保存したい。 impressからPDFに出力して、xpdfに付属するコマンドpdftoppmで画像のセットに変換した後、image-magickのconvertでppmからpngに変換する。 #!/bin/sh #|-*- mode:lisp -*…

Common LispからGnuplotでグラフ表示するライブラリを作った: clgplot

オレオレユーティリティ集からプロット周りを切り出したのでgithubに置いてみる。 https://github.com/masatoi/clgplot なおGnuplot4を必要とする。macで動くかは分からない。昔に書いたものなのでUIOPじゃなくてexternal-programを使っているところがアレで…

Common Lispで行列演算(2): MGL-MATを使う

前回LLAによるCPUを使った行列演算の話をしたので、今回はGPUを使った行列演算の話。そもそものやりたいこととしては、機械学習ライブラリのMGLをインストールしたいのだが、Quicklispから入るMGLはバージョンが古く、cl-cudaに依存する最新版を入れるにはい…

Common Lispで行列演算: LLA(Lisp Linear Algebra)を使う

Common LispでCPUを使った行列演算を高速にやりたいときは、BLASやLAPACKといった、専用に書かれた外部ライブラリを呼ぶことになる。そのためのラッパーライブラリとして、LLA (Lisp Linear Algebra)がある。 LLAでは、普通のReference BLAS以外にもOpenBLAS…

Lispbox for Windows (x86) バイナリ配布 2016年版

2014年版の内容もそろそろ古くなってきたかと思いアップデートした。Windows10 (64bit)で動作確認済み。 ダウンロード先 (Google drive) https://docs.google.com/uc?id=0B7XOFa0fMx7YM1otb3lQT2RYZTA&export=download 内容 NTEmacs / Emacs for Windows 24.…

構造体のcopy-関数は中身までコピーしてくれない

構造体のcopy-関数で中身のベクタもコピーされると思ったら大間違いという話。 (defstruct s (vec #(0000) :type simple-array)) (defparameter s1 (make-s)) (defparameter s2 (copy-s s1)) (eq s1 s2) ; => NIL (eq (s-vec s1) (s-vec s2)) ; => T copy-s…

Common Lispで多層ニューラルネットを実装してみる

去年買ってはいたが積読状態だったこのディープラーニングの青い本。深層学習 (機械学習プロフェッショナルシリーズ)作者: 岡谷貴之出版社/メーカー: 講談社発売日: 2015/04/08メディア: 単行本(ソフトカバー)この商品を含むブログ (13件) を見る正月ヒマ…

Common Lispで書く2個体分散遺伝的アルゴリズム

この記事はLisp Advent Calendar 2015 の25日目として書かれました。遺伝的アルゴリズム(以下GA)は汎用的に使えるので、問題についての前提知識が何もないときにはとりあえずGAでやってみるということがよくある。 しかしCommon Lispのライブラリとしては以…

ポール・グレアム Lispの起源 (The Roots of Lisp)

この記事はLisp Advent Calendar 2015 の10日目として書かれました。ハッカーと画家 コンピュータ時代の創造者たち作者: ポールグレアム,Paul Graham,川合史朗出版社/メーカー: オーム社発売日: 2005/01/01メディア: 単行本購入: 109人 クリック: 4,884回こ…

書籍「オンライン機械学習」を買ったのでCommon Lispで実装してみた。(AROW編)

前回の記事ではパーセプトロンと線形SVMを実装したが、より高度な手法として、CW、AROW、SCWといったものがあるらしい。 パーセプトロン等では重みベクトルを直接更新していたのに対して、CWでは重みベクトルが正規分布に従って分布していると仮定して、その…

書籍「オンライン機械学習」を買ったのでCommon Lispで実装してみた。

オンライン機械学習を買ったので、書いてあるアルゴリズムから線形識別器をいくつか試してみた。オンライン学習とは、データを一括処理するバッチ学習に対して、個々のデータを逐次処理する学習手法のこと。オンライン学習だと以下のようなうれしいことがあ…

ClackのミドルウェアでOAuth認証: Twitterログインしてみる

Clackのチュートリアル を読んだところ、アプリケーション本体に前処理と後処理をかぶせるミドルウェアという仕組みがあるらしい。ミドルウェアにはセッション管理やロガーなどが用意されていて、自分で書くこともできる。 ミドルウェアの中に、CLACK.MIDDLE…

clml-svmの紹介

(LISP Library 365参加記事)この記事ではclml-svmを紹介する。SVMそのものの解説はしない。CLML (Common Lisp Machine Learning)は、数理システムからgithubに公開されているCommon Lisp用の機械学習ライブラリである。以前は売り物であったらしい。当初はラ…

Lispbox for Windowsバイナリ配布

2016/1/21追記:最新版を公開しました http://d.hatena.ne.jp/masatoi/20160121/1453379153Windows版のLispboxが色々古くなってたので更新したものを公開します。 内容は以下の通り。 emacs 24.3 slime 2014-1-10 ccl 1.9 quicklisp 2014-1-30 CCLとの通信は…