静かなる名辞

pythonとプログラミングのこと


2018-03-01から1ヶ月間の記事一覧

cross_val_scoreはもうやめようね。一発で交差検証するにはcross_validateを使う

はじめに scikit-learnで交差検証を行い、評価指標を算出する方法としては、cross_val_scoreがよくオススメされています。実際、「sklearn 交差検証」みたいな検索キーワードでググるとこの関数がよく出てきます。しかし、この関数は複数の評価指標を算出す…

【python】複数の選択肢から確率で選ぶ

おみくじや福引きのようなもの、あるいは強化学習の実装などでタイトルのような「複数のものから確率で選ぶ」処理が必要になることがある。 これについては以前にもこのような記事を書いた。【python】一定の確率で違う選択をする - 静かなる名辞 この方法で…

【python】RandomTreesEmbeddingを試す(1)

RandomTreesEmbeddingはsklearnにたくさんある謎クラスの一つ*1。 たぶんスパースコーディングに決定木を使いましょうね~系の奴なんだと思う。 ドキュメントを読むと、なんとなく雰囲気はわかる。sklearn.ensemble.RandomTreesEmbedding — scikit-learn 0.2…

【python】sklearnのPCAでloading(主成分負荷量)を計算する

PCA(主成分分析)のloading*1がほしいときがあります。 sklearnでは一発では出ません。 ドキュメントはここ。 sklearn.decomposition.PCA — scikit-learn 0.21.2 documentation 目次 PCA.components_は確かにあるけど・・・ loadingを計算しよう 罠だった …

【python】sklearnで因子分析を試す

pythonで因子分析をやる人はあまりいないようだが、sklearnにはしっかりモデルが存在している。ついさっき気づいた。sklearn.decomposition.FactorAnalysis — scikit-learn 0.20.1 documentation 因子分析自体は前からどんなものなのか興味があり、かといっ…

【python】改行せずに代入文と等価のことをする

pythonワンライナーを書く上で障害になるのは、代入文の存在である。 代入は関数ではなく文なので、素直に書くと一行を消費してしまうし、lambdaやコレクション型の中にも入れられない。 よく知られた対策としては、グローバル変数テーブルを直接書き換える…

【python】defaultdictは使い方をミスると重くて遅い

defaultdictはpythonで使えるとても便利なコレクション型です。 しかし、使い方には注意が必要な場合があります。 目次 defaultdictの概要 問題点 解決策 まとめ defaultdictの概要 これはご存じない方向けの章なので、「知ってるよ」という方は読み飛ばして…

【python】pythonで主成分分析のバイプロット

バイプロット(Biplot)という主成分分析(PCA)の結果の可視化方法があります。 すごく大雑把に言うと、PCAによる写像の前の空間の各特徴(軸)が写像先の空間のどこに向いているかを可視化する方法です。 具体的には、主成分ベクトル(因子負荷量などを使…

【python】numpyで主成分分析を実装してみた

numpyでPCA(principal component analysis:主成分分析)を実装してみました。自分の理解を深めるためです。 sklearnに実装されているものと同じ結果を出すことを目標にしました。最終的には上手く行きました。 目次 概要 実装 結果 まとめ 概要 主成分分析…

【python】カーネル主成分分析を試してみる

カーネル主成分分析(Kernel PCA)はカーネル法と主成分分析を組み合わせて用い、データを非線形次元圧縮する方法です(こんな説明で良いのか・・・)。 カーネル法のことは勉強中・・・というか正直勉強しようとしてもよくわからないで跳ね返されるのをこれ…

【python】SelectKBestのscore_funcによる速度差を比較

SelectKBestはsklearnの簡単に特徴選択ができるクラスです。ざっくりと特徴選択したいときに、とても便利です。sklearn.feature_selection.SelectKBest — scikit-learn 0.20.1 documentation ところで、このSelectKBestにはscore_funcというパラメータを指定…

【python】sklearnのPCAで相関行列を使う

主成分分析には共分散行列を用いる方法、相関行列を使う方法がある。 sklearnのPCAを見ると、これに対応するオプションは存在しない。sklearn.decomposition.PCA — scikit-learn 0.20.1 documentation ずっと不思議に思っていたが、ググってたらこんなものを…

【python】sklearnのfetch_20newsgroupsで文書分類を試す(4)

前回は性能を追い求めると次元がでかくなりすぎて・・・というところで終わっていた。今回はもうちょっと頑張って次元を減らしてみる。 目次 ストップワードの除去 PCA(主成分分析)とLDA(線形判別分析) 分類 ソースコード 結果とまとめ 次回 過去の回 ス…

【python】collections.ChainMapの使い方を理解する

pythonで複数の辞書をマージするにはどうしたらいいのでしょうか。forループ? 辞書内包表記を使う? updateメソッド? 実は、ChainMapというものもあります。実は、ChainMapというものもあります。実は、ChainMapというものもあります。その使い方について…

【python】外部プロセスと標準入出力で通信する

pythonで外部プロセス(subprocess)と、標準入出力を介したやりとりをしたいときがある。 目次 やってみること 簡単な方法 とりあえずやる 解説 応用:複数回入出力を送りつけたい まとめ やってみること 今回は問題例として、形態素解析器MeCabをpythonか…

【python】nltkで英語のStemmingとLemmatization

Stemming(ステミング)は単語の語幹を取り出したいとき、Lemmatization(レンマ化、敢えてカタカナ表記するとレンマタイゼーション)はカテゴリごとにグルーピングしたりしたいときに使う。 公式ドキュメントはここ。 nltk.stem package — NLTK 3.4 documen…

【python】matplotlibで3次元データを描画し、回転アニメーションにする

3次元くらいのデータを描画したいときがある。簡単に散布図にできると便利。 データの用意 sklearnのload_irisなどで取得できるデータセットを入力にする前提の次のような関数を作った。 from sklearn.decomposition import PCA def gen_3d_data(dataset): p…

【python】flymakeのエラー

次のようなエラーを吐かれた。 Flymake: Configuration error has occurred while running(***/flymakes ***.py).Flymake will be switched OFF 原因 色々あるらしいけど、今回は文字コード指定をタイポした瞬間エラーが出た。 # coding: UTF-9 たぶん、これ…

【python】関数オブジェクトは辞書のキーに使える!

「まさかできねーだろw」と思ってやったらできたのでびっくりしたよ! >>> def hoge(): ... return None ... >>> {hoge:1} {<function hoge at 0x7f025f18cf28>: 1} ||< えぇ…。 lambdaでもできる。 >|python| >>> fuga = lambda:None >>> {fuga:2} {<function <lambda> at 0x7f0243880510>: 2} hogeとfugaは関</function></function>…

【python】cabochaのpythonバインディングの変な挙動

環境 ubuntu 14.04 cabocha 0.69 cabocha-python 0.69 問題の概要 変な挙動だった。というか率直に言ってバグなのでは? >>> import CaboCha >>> cparser = CaboCha.Parser() >>> tree1 = cparser.parse("吾輩は猫である。") >>> print(tree1.toString(CaboC…

【python】区切り文字を含めてsplitする

正規表現によるsplitで区切り文字(あるいは区切り文字列)を含めたいときがある。デフォルトでは区切り文字は消える。 たとえば、文を句点で分割する場合。 >>> import re >>> string = "吾輩は猫である。名前はまだない。" >>> re.split("。", string) ['…

日本語モダリティ解析器 Zundaを試す

日本語のモダリティを解析できるらしい。「文中のイベント(動詞や形容詞など)に対して、その真偽判断(イベントが起こったかどうか)、仮想性(仮定の話かどうか)などを解析します」とのこと。 公式ページはたぶんここ。jmizuno.github.io 環境 ubuntu14.…

【python】nltkで英語の形態素解析

形態素解析、いわゆるPOS taggingと呼ばれるようなタスクをnltkを使うと簡単に行なえます。日本語の解析ではmecabやjumanを使うと思いますが、英語だとnltkに入っているものが使えるので(インストールとかが)楽です。

【python】文字列を一文字ずつのリストにする

文字列はそもそもiterableなので、これが必要なことは滅多にないんだけど・・・。 >>> for c in "hogehoge": # そのままfor文に渡してオッケー。 ... print(c) ... h o g e h o g e この前必要になったので(ライブラリの引数でlist型を要求された)考えてみ…

【python】scipy.statsのzscoreで警告が出るときの対策

概要 z得点を計算しようとしたとき、このような警告を見かけることがあります。 RuntimeWarning: invalid value encountered in true_divide これが出た場合、結果にはnanが含まれています。なので後段の分析で落ちたりします。 >>> import numpy as np >>> …

【python】numpyでデータをランダムサンプリング

機械学習に使うデータをランダムサンプリングしたいときがある。簡単そうなのにやり方が見つからないから自分で書く。 目次 実装方針 重複ありランダムサンプリング 重複なしランダムサンプリング 実装と結果 そもそもなにに使いたかったの? 裏技 ※追記(参…

【python】LDA(線形判別分析)で次元削減

一般によく使われる次元削減手法としてはPCA(主成分分析)がありますが、他にLDA(Linear Discriminant Analysis:線形判別分析)を使う方法もあります。 これは本来は分類に使われる判別分析という古典的なアルゴリズムで、データが一番分離しやすくなる軸…

【python】sklearnのPCAでsvd_solverによる速度差を比較

sklearnのPCA(主成分分析)がやたら遅くて腹が立ちました。計算コストを下げるために次元削減してるのに、次元削減で計算コスト食ったら意味がありません。 とにかくこのPCAを高速化したかったので、svd_solverを変えてどうなるか試しました。なお、腹が立…

【python】tfidfは分類精度を向上させるのか?→向上しなかった

目次 はじめに――長年の疑問 検証 結果 tf-idfは死んだのか? まとめ はじめに――長年の疑問 自然言語処理でテキスト分類などに、よくtf-idfが使われます(最近はそうでもないのかもしれないが)。一般には、tf-idfを使うことで分類精度の向上効果があると認識…

ランダムフォレストとSVMの使い分け

はじめに ランダムフォレスト(RandomForest)とSVM(Support Vector Machine)はよく比較される分類器です。でも、様々なシチュエーションで、けっきょくどちらを使うべきなのか、という指針はあまり見かけません。 私は研究などで*1両者を使ってきて、それな…