静かなる名辞

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

numpy

【python】TF-IDFで重要語を抽出してみる

概要 すでに語り尽くされた感のあるネタですが、TF-IDFで文書の重要な単語(重要語、あるいは特徴語)を抽出してみます。 numpyとsklearnを使うと、10行程度のコードで実現できるので簡単です。 コードの書き方 とりあえず、対象データとしては20newsgroups…

【python】べき乗とべき根の計算

べき乗は、べき根はです。2乗とかsqrtくらいはわかっても、n乗根あたりになるとすぐ出てこないという人も多いのでは? 目次 組み込み関数powを使う方法 べき乗演算子を使う方法 numpyに頼る方法 n乗根について どれが速いの? まとめ 組み込み関数powを使う…

【python】numpyでの等比数列の作り方

等比数列がほしくなった。作り方をメモしておく。 目次 比が決まっている場合 範囲とnが決まっている場合 比が決まっている場合 たとえば、3倍ずつ増えていく等比数列がほしいとしよう。 これは次のように簡単に作れる。 >>> import numpy as np >>> rates =…

【python】numpyで乱数のseedを設定する方法

「seed(種)」とか「random state」とか呼ばれる奴の設定方法。これを設定することで、乱数の処理に再現性を与えることができる。 方法 np.random.seed()を呼ぶと、とりあえずseedが引数でリセットされる。numpy.random.seed — NumPy v1.14 Manual やってみ…

【python】np.matrixの速度を測る

numpyで行列演算を行う方法としては、普通のnumpy配列に行列演算系の関数を適用していく方法と、あまり知られていないがnp.matrix型やnp.mat型を使う方法がある。 速度が違ったりするのだろうか? 仮に違うと困る(というか場面によって適切な方を選ぶ必要が…

【python】np.meshgridの基本的な使い方まとめ

meshgridはなんとなく苦手な感じなので、操作をまとめておく。 目次 とりあえずmeshgirdを作ってみる 計算する plotしてみる x,y,z座標の配列に変換する まとめ 参考にしたサイト とりあえずmeshgirdを作ってみる meshgrid自体はこのように何の変哲もないも…

【python】numpyで二次元配列を結合して三次元配列にする方法

複数の二次元配列を結合して三次元配列に変換する方法について。 np.dstack そのものずばりのnp.dstackという関数がある。numpy.dstack — NumPy v1.14 Manual >>> a = np.array([[1,2,3],[4,5,6]]) >>> b = np.array([[7,8,9],[10,11,12]]) >>> a array([[1,…

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

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

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

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

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

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

【python】numpyで楕円形のデータを生成する

楕円形のデータを生成したいと思った。 理論 楕円の式は、基本的に次の定義でいく。 で、が楕円のパラメタである(長半径と短半径)。 よって、適当なスパンでのデータを生成して定義通りxy座標を求めれば良い。簡単そう。 データを生成する観点からは色々な…

【python】numpyで行ごと・列ごとに計算

行ごと、列ごとに一括で加減乗除する方法をずっと探していた。こう書くとなんじゃそりゃと思われるかもしれないが、n行m列の行列に対してn次元の縦ベクトルを持ってきて、まとめて計算する感じ。 ずっとやり方がわからなかったのだが、このほど試してみたら…

【python】スタッキング(stacking)分類器を実装して理解する

最終更新:2018-04-02 はじめに スタッキング(stacking)といえば、複数の分類器を組み合わせて強い分類器を作る系の手法である。単なるvotingやsoft votingより強い。 誤解を恐れずにざっくり言ってしまうと、分類器の出力(複数)と真の出力の関係を機械…

【python】95%信頼楕円/確率楕円を描画する

「ライブラリあるやろw」と思ったら、なくて顔面蒼白になった。 しょうがないから調べて実装した。 理論的なもの ちゃんと数式を書いて説明する気概がないので、言葉で。 適当な二次元正規分布のデータがあるとする。PCAと同じ要領で分散共分散行列を対角化…

【python】numpyで複数行・列の抜き出し

numpyで複数の行や列を抜き出して使いたいときがある。たとえば機械学習で特徴ベクトルのデータがあって、変数重要度の高い次元だけ取りたい・・・みたいなシチュエーション。 これには実はやり方があって、簡単にできる。ただし、これを知らないととても不…

【python】numpyのmatrix・matの使い方

numpyにはみんな大好きndarrayと、普段あまり目にしないmatrixがある*1。matrixは行列演算が行いやすいようにデザインされており、それはそれで良いんだけどndarrayとは微妙に使い勝手が異なるせいで慣れるまでは微妙に戸惑う可能性がある。 たとえば、対話…

【python】numpyで最小二乗法を実装(線形、多項式、正則化など)

最小二乗法をnumpyで実装してみた。 理論背景についてはこちらを参照。 mathtrain.jp PRMLの線形回帰モデル(線形基底関数モデル) from Yasunori Ozaki www.slideshare.net qiita.com やるべきこと 最小二乗法(正確には線形基底関数モデルによる回帰)は目…

【python】pythonでボゴソートしてみる

みんな大好きボゴソート。愚直に実装するならそんなに面倒なことはない。 import random def bogo(lst): while True: random.shuffle(lst) xb = lst[0] flag = True for x in lst[1:]: if xb > x: flag = False break xb = x if flag: return None 色々イケ…

【python】numpyの型の違いによる計算速度差を見てみる

前回の記事で「なんとなくnp.float32が速い気がする」とか書いたので、実際に測ってみる。 予め断っておくと、計算速度なんて環境によって違うし、どの型が速いかもCPUのアーキテクチャに依存する。numpyはバリバリにSIMD命令を使って最適化する(と、思う)…