前回(2010/5/2)のハードマージンSVMでは、データに重なりがある場合、下のようにちゃんと分類境界を求められませんでした。今回は、重なりのあるクラス分布に対応できるように拡張してみます。このようなSVMはハードマージンSVMに対してソフトマージンSVMと呼ばれます。別名としてC-SVMとも呼ばれるようです。 PRMLの7.1.1にあるように、データの誤分類を許すようにSVMを修正します。ハードマージンSVMでは、データ点がマージン内(-1 < y < 1)に絶対に入らないことを前提にしていましたが、ソフトマージンSVMでは「入ってしまったものは仕方ない、だがペナルティを与える!」と少し条件を緩めます。 まず、スラック変数ζ(ゼータ)をデータごとに導入します。スラック変数は、データが正しく分類されかつマージン境界上または外側にある場合は0、正しく分類されているがマージン内に侵入してしま
さて、前回は交差検証の説明で終わってしまいましたが、今回はちゃんと SVM のチューニングの話をします。 チューニングの手順としては、 グリッドサーチで大雑把に検索する。 最適なパラメータがありそうなところを絞って再びグリッドサーチを行う。 という2段階のグリッドサーチを行います。 1段階目:グリッドサーチで大雑把に検索する SVM のチューニングは tune.svm() という関数を用いて行います。 チューニングのやり方は、単純にグリッドサーチを行っているだけです。 パラメータの値をいろいろ変えてみて、正答率の一番いい値をベストパラメータとして出力します。 プログラムは下記のようになります。 gammaRange = 10^(-5:5) costRange = 10^(-2:2) t <- tune.svm(Species ~ ., data = iris, gamma=gammaRan
SVM のチューニング SVM(Support Vector Machine) はみなさん御存じ機械学習の手法です。 SVM はデフォルト設定でモデルを作ってもしょうがないです。gamma と cost というパラメータがあるので、これらの値に最適値を設定しなければなりません。R の SVM の Help にもこう書いてあります。 Parameters of SVM-models usually must be tuned to yield sensible results! (訳) SVM でいい結果出したかったらチューニングしろよな! というわけで、SVM のチューニングのしかたについて説明したいと思います。 交差検証 おっと、その前に、交差検証の話をしなければなりません。 SVM モデルをチューニングする際、二つのパラメータでグリッドサーチをします。 すなわち、パラメータをいろいろ変
Machine Learning Advent Calendar 2012 の 21 日目の記事です。 私は普段は受託のデータ解析を仕事にしてます。過去に何度か実務でRandomForestを利用する機会がありましたので今日は以前顧客にプレゼンをした時に、質問された内容とその回答を紹介したいと思います。普段は機械学習・データマイニングを実務の立場利用しており、手法そのものの専門家ではないので、間違いなどが有りましたらご指摘ください。 さてRandomForestは有名なアルゴリズムですので、ご存じの方も多いとは思いますが、CARTの開発者でもある、Leo Breimanが2001年に提案した決定木を用いた集団学習アルゴリズムの1つです。一言で言えば、大量の決定木を作成して、それぞれの決定木が出した答えを多数決し、最も支持の多かったクラスに分類する手法です。(回帰の場合は平均を返します) R
私は情報収集にはてなブックマークを多用しており、暇な時は結構な割合ではてなブックマークで記事を探してます。しかし、はてなブックマークは最新の記事を探すのは便利ですが、過去の記事を探すにはいまいち使えません。個人的には多少過去の記事でも自分が興味を持っている分野に関しては、レコメンドして欲しいと感じてます。 ありがたいことにはてなはAPIを公開しており、はてなブックマークの情報を比較的簡単に取得できます。そこでこのAPIを利用して自分に合った記事を見つけるようなレコメンド機能をRとPythonで作成してみたいと思います。 利用するデータは、はてなAPIを使って収集します。具体的には、はてなブックマークフィードを利用して自分のブックマークしているURLを取得し、そのURLをブックマークしているユーザをエントリー情報取得APIを用いて抽出し、そのユーザのブックマークしているURLを収集します。こ
vimでPython用の設定を行ったのでまとめておきます。 何ができる? 大まかに言うと次の5つが行えます。 コード補完 pep8チェック Pyflakesチェック McCabe複雑度チェック pep8用インデント 前提 vimプラグインの管理にNeoBundleを使っています。 NeoBundleの使い方は省略しています。 コード補完 : jedi × jedi-vim インストール jedi : Pypi - jedi pip install jedi vimプラグイン : jedi-vim NeoBundle 'davidhalter/jedi-vim' cd ~/.vim/bundle/jedi-vim git submodule update --init 設定 カスタマイズしない場合は、~/.vimrcに設定する必要はありません。 カスタマイズする場合は、davidhalter
はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28
みんなのIoT/みんなのPythonの著者。二子玉近く160平米の庭付き一戸建てに嫁/息子/娘/わんこと暮らしてます。月間1000万PV/150万UUのWebサービス運営中。 免責事項 プライバシーポリシー Pythonのようなスクリプト言語の特徴の一つとして,データをソースコードに直接埋め込みやすい,というものがあると思います。実際,Pythonのコードを見ると文字列,リストや辞書といった高機能で使い回しのしやすいデータ型が,リテラルとしてソースコードに埋め込んであるのをよく目にします。時には変数に代入されたり,時には関数やメソッドの引数部分に埋め込まれたり。 いちいち離れた場所にあるデータを見に行ったり,オブジェクトを作るための宣言をする必要がなく,処理をしたい場所の間近にデータを埋め込めるので,とても便利なのですが,欠点もあります。無造作にデータ型のリテラルを埋め込んでいると,ソース
pythonのプログラムを書いているとき、pep8とpyflakesはかけておきたいと思うことがあります。 pep8はあくまで形式を規格化したものだけど、これを守れというモヒカンはけっこう多いようです。 pyflakesは使っていない変数とかインポートを検出して指摘してくれるので割と実用的です。 それで、vimにプラグインがあることは知っていたけど、今まで面倒くさがっていれていなかったので、今日入れてみました。 pep8用のプラグイン: vim-pep8 githubにあります。 GitHub - nvie/vim-pep8: This project is superseded by vim-flake8! 導入はこんな感じでやりました。 $ cd ~/.vim $ git clone https://github.com/nvie/vim-pep8.git $ mkdir ftplug
そういえば、4月に転職しました。 新しい会社は前の会社と色々ちがって楽しいです。環境的に、みんなmacで開発言語もpythonがメインだったりします。なので、Mac で Pythonを始めるときにやっておいた方がよさそうな事を思い出しながら残してみるテスト。 1. homebrew で Pythonのインストール 最近のマカーのオサレは、homebrewらしいので、brewコマンドでpythonをインストールしませう。 brew install python HomebrewやらMacportsのアンインストールやらはこちらを参考にしました。 http://d.hatena.ne.jp/ruedap/20110217/mac_install_homebrew_uninstall_macports python がインストールされると、下記のようにシンボリックリンクが張られると思います。 /
Pythonでシリアライズに使えるライブラリは標準でもpickleやjsonなどがありますが,研究室でMessagePackというものを使っている人がいたので試してみました. MessagePackはバイナリ形式に保存するタイプのもので高速かつ軽量とのこと. Python以外にも様々な言語でライブラリが配布されています. インストール "pip install msgpack-python"がなぜか失敗したので"pip install msgpack-pure"をしました. 実験 シリアライズ前後でリストからタプルに形式が変わってしまうなどの注意点はありますが,簡単に使えそうです. >import msgpack_pure as msgpack >serialized = msgpack.packb([1,2,3]) >print msgpack.unpackb(serialized) (
トリビアルな例だが、元の関数(func)をデコレート・ラップするmydecoratorというデコレータを書いた時、下のように単純にinnerを返すと、 def mydecorator(func): def inner(*args, **kwds): print "Hi, I'm inner!" return func(*args, **kwds) return inner @mydecorator def hello(to): """ Say hello to somebody """ print "Hello, %s!" % to if __name__ == '__main__': print repr(hello) print hello.__doc__ 結果として、 None のように、デコレートされた元の関数(hello)の関数名やドキュメント文字列が失われてしまう。デコレータを
一部で最強と呼ばれているPythonには, virtualenvやipythonのような絶対入れる超定番以外にも, あると便利なライブラリというものがあります. ここではラッキーセブン, 7つご紹介しましょう. なお, furl以外は3.xに対応しています. requests 覚えやすいWebリクエスト(urllib.request.urlopenの代替) furl URLの扱いをもっとシンプルに(urllib.parse.urlparseの代替) PyQuery jQueryのスクレイピング力をPythonに(html.parser.HTTPParser, lxml, BeautifulSoupの代替) Send2Trash/Send2Trash3k クロスプラットフォームな「ごみ箱へ送る」 Windows向けPythonランチャー 2.xと3.xを切り替える PySide/PyQt4
[python]format使用時の波括弧のエスケープ >>> "{0} {1} {0}".format('Spam', 'Ham') 'Spam Ham Spam' >>> "{food1} {food2} {food1}".format(food1='Spam', food2='Ham') 'Spam Ham Spam' from Python 3.0 Hacks:第6回 Pythonicな文字列フォーマットformat()メソッド|gihyo.jp … 技術評論社 http://gihyo.jp/dev/serial/01/pythonhacks/0006 %sのプレースホルダの代わりにformatメソッドが導入されてより分かりやすくなっているのだが、波かっこ{}をどうやってエスケープするかに悩んだ。\ではエスケープされないし。答え:波かっこを重ねる({{や}}のようにする)ことでト
Pythonで一番有名で普及しているライブラリと言っても過言ではない「Numpy」の覚書きです。かなり多機能な数値計算ライブラリで、内部はC言語で記述されているため超高速に動作します。 ベクトル ベクトルの長さ&正規化 import numpy a = numpy.array([[2,2]]) #ベクトルの長さ length = numpy.linalg.norm(a) #length=>2.8284271247461903 #ベクトルの正規化 a / numpy.linalg.norm(a) #=>array([[ 0.70710678, 0.70710678]]) 内積&外積 import numpy v1 = numpy.array((1,0,0)) v2 = numpy.array((0,1,0)) #内積 numpy.dot(v1,v2) #=> 0 #外積 numpy.cros
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く