python
はじめに Pythonを始めてからしばらく時間が経って、ある程度自力で複雑なプログラムを書くようになると、タイトルのようなエラーに遭遇することが多いと思います。 このエラーが出たときは、たいていはロジックに問題があります。一概に通用する対処法がな…
はじめに sklearnでは様々な方法で決定木を可視化できるのですが、これまでの方法ではそのためにはgraphvizを介する必要がありました。これは面倒くさく、トラブルの原因にもなりやすいものでした。 scikit-learn 0.21以降ではmatplotlibでプロットしてくれ…
はじめに ランダムフォレストは分類にも回帰にも使えます。今回は回帰を取り扱います。 ランダムフォレストの厄介なところは、決定木なので油断すると過学習しまくるところです。これは分類でも問題になりますが、回帰の場合は更に問題です。ということで、…
はじめに train_test_splitはsklearnをはじめて学んだ頃からよくお世話になっています。しかし、stratifyを指定しないとまずいことが起こり得ると最近気づきました。 stratifyって何? 層化という言葉を聞いたことがある方が一定数いると思いますが、それで…
はじめに 表題の通りなのですが、サンプル数が多いデータに対してランダムフォレストを使うと思いの外メモリを食います。 また、ストレージにダンプしようとすると、ストレージ容量も消費します。 現象 なにはともあれやってみましょう。 import pickle from…
はじめに よく分類器の性質などを把握するために、2次元で可視化している図があります。 特に予測確率なんかを平面的に出せるとかっこいいですよね。つまり、こういうのです。Classifier comparison — scikit-learn 0.21.3 documentation以前の記事より君はK…
はじめに ランダムフォレストは決定木のアンサンブル学習なので、何も考えずに使うと過学習します。過学習対策はいろいろあるので(木の深さだったり、ノードあたりのサンプル数による制御だったり)、やってみます。 まあ、その過学習した状態の方が性能良…
はじめに KNNといえば機械学習入門書の最初の方に載っている、わかりやすいけど性能はいまいちな初心者向けの手法という認識の人も多いと思います。 しかし、本当はけっこう優秀なのです。 2次元で予測させてみる 予測させます。コードは軽く読み流して結果…
はじめに 分類器の特性を把握するために2次元データで分離境界を見るということが行われがちですが、高次元空間における分離器の特性を正確に表している訳ではありません。 ということがずっと気になっていたので、なんとか高次元空間で分類させて2次元で見…
概要 デフォルト設定だとタイトルに書いた通りの現象が起こります。網目模様が出て図が汚くなります。 実験 こんな単純なコード。 import numpy as np import matplotlib.pyplot as plt def main(): xx, yy = np.meshgrid(np.arange(0, 10, 0.1), np.arange(…
statsmodelsは統計処理に特化したPythonのライブラリです。statsmodelsを使うと、t検定を簡単に行うことができます。この記事ではその方法を説明します。
setに対して積集合・和集合を計算したいときがあると思うのですが、うっかりand, orを使ってしまうとひどい目に遭います。Pythonでは集合の演算にはビット演算子の&, |などを使用します。
t検定の中でもよく使われるのが2群の標本の平均に差異があるかどうかの検定です。t検定はscipyを使うと簡単に実施することができます。その方法を紹介します。
概要 emacsライトユーザーの私が、新規環境にemacs25を導入してpythonを書くにあたってやった設定を書いておきます。目的はpythonを書くことだけです。 前提として、以下の記事のように環境を作っています(読まなくてもなんとかなります)。Ubuntu 18.04 LT…
はじめに ずっと放置していたシリーズですが、その後新たに得られた知見が出てきたので、更新しておこうと思います。 得られた知見 いろいろ勉強した結果、以下のような考えに至りました。 そもそもデータ数が多いので、高級な分類器であればあるほど速度的…
はじめに 非負値行列因子分解は負の値が出現しないような行列に対して行える分解で、主成分分析とか因子分析に似ています。 参考: 非負値行列因子分解(NMF)をふわっと理解する - Qiita 上の記事によると、いいところとしては、 非負なので現実のデータに…
nanをイコールで比較しようとしてもうまくいきません。nanはなにと比較しても(自分同士の比較でも)Falseになるような性質を持っているからです。 >>> import numpy as np >>> np.nan == np.nan False pythonに限らず、おそらく大半のプログラミング言語で…
はじめに sklearnのモデルには疎行列を取れるものもたくさんありますが、この場合速度差があったりするのでしょうか。 いろいろなデータとモデルで検証を行ってみました。 目次 はじめに 実験1:digitsを分類させてみる 実験2:多項ナイーブベイズについても…
概要 むしゃくしゃして書いた。冷静に考えたら疲れてた。 問題点 >>> exit Use exit() or Ctrl-Z plus Return to exit ウザい! exitで落ちるようにしたい! 実装 簡単に書けます。5行くらい。 import sys class Exit: def __repr__(self): sys.exit() exit …
概要 まっさらなパソコンを開発環境として立ち上げることになり、表題の通りのことをやる必要があったのでまとめておきます。 venvを使うつもりなので、作業量としては少ないはずです。 Python3.7の導入 Ubuntu 18.04はデフォルトでpython2が導入されていま…
はじめに 気軽にDataFrameをデータベーステーブルに変換できそうなto_sqlなるものがあるので、試してみます。pandas.DataFrame.to_sql — pandas 0.23.4 documentation sqliteを使いたかった ドキュメントではSQLAlchemyを使ってSQLiteを叩いているようですが…
numpy配列に文字列を格納した場合、どう扱われるのか知らなかったので、調査してみました。 まず基本。 >>> import numpy as np >>> a = np.array(["a", "b"]) >>> a array(['a', 'b'], dtype='<U1') >>> type(a[0]) <class 'numpy.str_'> 配列そのものは「</class></u1')>
pythonのスレッド活用というと、こんなコードがすぐに思い浮かびます。 # エンターされるまでは数字を更新して、 # エンターされたら終了する(つもり) import time import threading flag = True def th(): i = 0 while flag: print("\r{}:".format(i), en…
AdaBoost(アダブースト、もしくはエイダブースト)は代表的なアンサンブル学習アルゴリズムとしてよく取り上げられるものですが、実用的に使っている事例はあまり見かけません。ランダムフォレストでいいじゃんとなっていることが多いのではないでしょうか…
はじめに sklearnのAdaBoostを使う機会がありましたが、デフォルトパラメータのまま使ってみたら性能が悪すぎて驚きました。 対策を書きます。 症状 とりあえずデフォルトパラメータで動かしてみて、様子を見るというシチュエーションはたくさんあると思いま…
はじめに mecab-pythonで以下のようなコードを書くことがよくあると思います。 import MeCab s = "吾輩は猫である。" tagger = MeCab.Tagger("") tagger.parse("") node = tagger.parseToNode(s) while node: print(node.surface, node.feature) node = node…
あまり知られていませんが、組み込みのmapは実は複数のiterableを引数に取れるように定義されています。 追加の iterable 引数が渡されたなら、 function はその数だけの引数を取らなければならず、全てのイテラブルから並行して取られた要素に適用されます…
概要 __slots__を使うとメモリをケチれるという話はよく見かけますが、属性アクセスの速度については話を聞かないので調べてみました。 実験コード import timeit class A_slots: __slots__ = ["a"] def __init__(self): self.a = 42 class A_attr: def __in…
概要 複数の値を一つのキーにまとめて、結果と対応させたいというケースがあります。 >>> d = {1,2:"hoge", 3,4:"fuga"} # こんな感じ? 残念ながらこれはエラーになります。 File "<stdin>", line 1 d = {1,2:"hoge", 3,4:"fuga"} ^ SyntaxError: invalid syntax </stdin>…
はじめに 遅まきながら、sklearn 0.20でclassification_reportの仕様が変わったことに気づきました。 基本的な使い方は変わりませんが、それなりに大きな変化になります。 変更点 まず0.19の引数と出力のフォーマット。 sklearn.metrics.classification_repo…