唯物是真 @Scaled_Wurm

プログラミング(主にPython2.7)とか機械学習とか

python

大量のテキストからランダムに少数の行を抽出したい - Reservoir Sampling

前に以下のような記事を書きましたが、大量のテキストではうまくいかなかったので新たに書きました ファイルからランダムにN行取り出す(shufコマンド) - 唯物是真 @Scaled_Wurm 上の記事ではテキストをランダムに\(k\)行取り出したい時"shuf -n k"コマンドで…

Pythonの演算子オーバーロードに触ってみた

四則演算(+-*/)などの演算子について、クラスに独自の振る舞いを定義することができます これは演算子オーバーロードと呼ばれます Pythonではよくある演算子だけでなく"len()"や"del"などの様々な演算子(?)に対してもオーバーロードができます日本語だと以…

TopCoder SRM 601 Div2 oox 1191->1224

131st, 690.96pts, +2/-2 challenge Volatility ?->295久しぶりに青くなりました レートも全然上がらないし、参加時間を捻出するのもつらいのでやめようかと…… たまにはPythonで参加しようかと思って見つけた以下のプラグイン(Greed)で参戦(いつもはEclipseC…

PythonでpaizaオンラインハッカソンVol.1に挑戦した #paizahack_01

新人女子プログラマの書いたコードを直すだけの簡単なお仕事です!|paizaオンラインハッカソンVol.1 一応解けたけど、Twitterを見てるとPythonでテストケース3を0.3秒台とかで解いている人がいて、どんな解き方をしているのか気になります 問題設定 \(N\)個…

Twitterの投稿時間で類似度を計算してみた - 確率分布の類似度

以前集合やベクトルの類似度の記事を書いたんですが、確率分布の類似度には触れていなかったのでついでに書きました ツイート時間分布の類似度を求める 今回はツイート時間ごとの頻度を正規化して、確率分布とみなして類似度を計算してみます 私のアカウント…

続Pythonでsubprocessを使って複数のコマンドをパイプでつなぐ

以前Pythonのライブラリのsubprocessを使って、パイプでつないで複数のコマンドを実行するという内容の記事を書きました Pythonでsubprocessを使って複数のコマンドをパイプでつなぐ - 唯物是真 @Scaled_Wurm しかしsubprocessのドキュメントなどに書かれて…

Orthogonal Procrustes problem

前に読んだ論文で出てきたのでメモ Orthogonal Procrustes problem - Wikipedia, the free encyclopedia 同じ形の行列\(A, B\)が与えられた時に\(||AX - B||_F\)を最小化する行列\(X\)を求める(\(A\)を\(B\)にできるだけ近く変換する行列を求める ただし\(X^…

はてなブログのAPIが公開されたらしいので簡単に触ってみた(Python)

はてなブログAtomPub APIを公開しました。サードパーティのブログ投稿ツールを利用・作成できます - はてなブログ開発ブログ とのことで触ってみた はてなのAPIを扱うのは初めて。Python以外の言語のサンプルを見るとAtomを扱えるライブラリがあれば簡単に書…

Lossy Countingの変種を実装してみた

前に以下の記事でLossy Countingを実装しましたが、より省メモリな変種があるらしいのでそちらも書いてみました Lossy Countingを実装してみた - 省メモリな頻度計測 - 唯物是真 @Scaled_Wurm 以下の論文のAlgorithm 2の擬似コードそのままです。 "Methods f…

Lossy Countingを実装してみた - 省メモリな頻度計測

大規模データで頻度を数えると、欲しいのはよく登場するアイテムの情報なのに、ほとんど出現しないアイテムの種類数が非常に多くて、それらがメモリを大量に必要としてしまうという問題があるこれに対してアイテムの種類数の最大値に制限を加えたり、頻度に…

matplotlibで積み上げ棒グラフ

積み上げ棒グラフ(stacked bar chart)は、棒グラフを積み重ねた以下のような形のグラフです matplotlibのbar関数ではオフセットを指定できるので、オフセットを足しながら棒グラフをかいていけば積み上げ棒グラフができます from pylab import * def bar_sta…

python 2.7でPython 3風に書きたい

Python 3以降との違いを調べていたときのメモ Python 2.7でも試せるもの 以下にPython 2.7でimportをすればPython 3風に書けるものを列挙しておきます from __future__ import division Python 2.7では割り算「/」の結果は切り捨てでしたが、Python 3以降で…

LIBSVMの特徴量の重みを見る - LIBSVMのモデルの読み方

以前LIBSVMで特徴量の重みを見る方法について記事でURLを紹介したのですが、リンク先の記事とコードがなくなっているみたいなので、改めて記事にしておきます。 SVMでの特徴量の重み 非常に単純化して説明すると、線形カーネルのSVMは次のような式の符号の正…

matplotlibで日本語入りのグラフを書く

pythonではmatplotlibがグラフの描画によく使われます。 しかし、デフォルトの設定では以下のように豆腐みたいに文字化けしてしまいます from pylab import * text(0.2, 0.4, u'日本語', size=100) show() この問題を回避するには以下のように直接日本語フォ…

pythonの機械学習ライブラリscikit-learnの紹介

scikit-learn(sklearn)の日本語の入門記事があんまりないなーと思って書きました。 どちらかっていうとよく使う機能の紹介的な感じです。 英語が読める方は公式のチュートリアルがおすすめです。 scikit-learnとは? scikit-learnはオープンソースの機械学習…

IPythonを使い始めました

今更ながらIPythonを使い始めました。 IPythonはPython用のインタラクティブシェルで、標準のものとは違って補完機能や自動インデント、シェルコマンドの実行などの色々と便利な機能がついています。 並列処理にも使えるみたいですが、その辺りはまだ調べて…

Pythonスクリプト実行後に対話的に操作したい

以下のように'-i'を指定するだけでできるみたいです。 こんな簡単なのを知らなかったとは……やはりドキュメントはちゃんと読まないといけませんね。 python -i ファイル名あるいは対話モードの時にexecfile関数を実行すれば同様のことができるみたいです。最…

単語などをIDにマッピングする

異なる要素ごとに別々の数値をIDとして割り振って管理したいってことがよくあります。Twitterで以下のようなツイートを見かけました。 Pythonでwids = defaultdict(lambda: len(wids))だけで単語を単語IDにマッピングする辞書を作れることに気づいた。Python…

小説家になろうのランキングをトピックモデルで解析(gensim)

小説家になろうというWeb小説投稿サイトがあります。 いわゆるライトノベル的な作品が多いのですが、近年書籍化される作品が多く出ていて注目を集めています。 続々と「小説家になろう」から書籍化作品が登場! - フラン☆Skin はてな支店 小説を読もう! || …

特徴量(素性)を作るときのメモ + scikit-learnにちょっと触る

機械学習のデータとして特徴量を作るときの注意点や悩むことなどをメモっておきました。間違いなどが含まれているかもしれません。 基本的な内容ですので調べればもっと適切なやり方があると思います。 カテゴリカル・データ カテゴリカル・データというのは…

Python で疎行列(SciPy)

疎行列とは 疎行列は成分のほとんどがゼロである行列のことです。 たとえば、文書に登場する単語の頻度を数えたりするとこういった行列になります。 他にも疎なグラフの隣接行列は疎行列になります。 こういった行列は通常の行列(密行列)を使うよりも、少な…

numpyで縦ベクトル

numpyで縦ベクトルを使いたいときにどうやればいいのか困ったのでメモ。一次元のベクトルだと横と縦の区別がないので、二次元にする必要があります。 numpy.newaxis import numpy as np array = np.arange(5) print array[:, np.newaxis] 一度行列などにして…

numpyでcsvを読み込む / scikit-learnでsvmlight(libsvm)形式のファイルを読み込む

前までRを使っていたのですが、せっかくPythonを使っているのだから全部移行したいなーと思って色々勉強してます。 numpyでcsvを読み込む numpy.genfromtxt関数、numpy.loadtxt関数を使えば簡単に読み込めるみたいです。 import numpy as np data = np.genfr…

Codeforces Round #162 (Div. 2) C・D問題

昨日の記事で解けていなかった問題を終わってから思いついたので書いとく。 C問題 Problem - C - Codeforces ある範囲にリスがいて、入力文字列に従ってそれが左半分か右半分に移動する(どんどん範囲は狭くなる)。 このときリスがi番目の入力でいた位置に対…

Pythonで再帰が深すぎる時

Pythonで関数の再帰を使った時にたまに以下のようなエラーが出ます "RuntimeError: maximum recursion depth exceeded in cmp"このエラーは再帰の数が深すぎると出るらしいです。 以下の関数を実行すると再帰の最大数を調べることができて、私の環境では1000…

Pythonで文字列から一部の文字を削除するときの速度比較(replaceとsubとtranslate)

Pythonでの文字列置換をマスターする - じっくりコトコト煮込んだみかん 上の記事を読んでtranslate関数で文字の削除ができるというのを初めて知りました。 replace関数やtranslate関数の速度の違いが気になったので適当に実験してみました。'ABCDEFGHIJKLMN…

Pythonでの数値とビット文字列の変換方法

メモ程度の内容。 ビット文字列から数値 >>> int('0011', 2) 3 >>> int('0b0011', 2) 3 数値からビット文字列 >>> bin(10) '0b1010' 注意点は'1010'ではなく'0b1010'になること。 負の値 数値の符号がマイナスの場合には以下のようになる。 2の補数にはなら…

Pythonのlistとnumpy.arrayとかの速度比較

導入 Pythonの数値計算ライブラリNumPyのarrayを使って、標準のlistを単純に置き換えてみると遅くなることが多いです。 実際どれぐらい速度に差があるのかlist, array, numpy.arrayで比較してみました。 処理時間の計測 Pythonに含まれるライブラリのtimeit…

集合とかベクトルの類似度の計算のメモ

Pythonで実装する類似度計算 - Screaming Loud #1283. 共起性の計算法 ↑この辺りの記事を見て、集合とかベクトルの類似度の計算の記事を下書きのまま放置していたことを思い出したので書き上げた。類似度の計算のコードを書いたのでそれを載せるだけにしよう…

DigitalArts プログラミングコンテスト2012 に参加した

Welcome to DigitalArts プログラミングコンテスト2012 - DigitalArts プログラミングコンテスト2012 | AtCoder A、B問題は解けたけどC問題は解けず、52位(弱い 終了後にC問題の愚直な実装を試したら当然TLEでしたorz A: C-Filter - DigitalArts プログラミ…