pythonをpyinstallerで実行ファイル化する際の試行錯誤
概要
統計検定の勉強以外の初投稿。
最近仕事でpythonのコードを実行ファイルで渡す必要が出てきたので調べたところ、pyinstallerというライブラリを知り、使ってみた。
いくつかエラーがでて試行錯誤したので記録に残しておく。
インストール
condaでインストールした。いくつかの記事を見たところ、condaで入れると容量が大きくなるらしいのでpipなどで入れたほうが良かったかも。
再起エラー
maximum recursion depth exceeded while calling a Python object
というエラーが出る。これは以下の方法で解消した。再帰の上限を勝手に設定しただけなので良いのか不明だが、一応動いた。
①specファイルを作成
pyinstaller hoge.py --onefile --windowed
を実行、これだけだとエラー、.specファイルができる。
②specファイルを修正してコンパイル
specファイルの一番上に下記のコードを追加
import sys
sys.setrecursionlimit(20000)
その後specファイルを指定してコンパイル
pyinstaller hoge.spec --onefile --windowed
動作も元のpythonコードと同様だった。ただ実行時間がpythonだと数秒、実行ファイルだと1分位とかなり長くなる。あと何故かトレンドマイクロのプロセスのCPU使用率が高くなる。
謎エラー
その後いくつかコードを修正し実行すると、以下のようなエラーが出た。
fatal error detected failed to execute script pyinstaller
これだけだと原因がよくわからないのでコードを変更してエラー箇所を確認すると、以下の部分を加えることでエラーが発生していた。
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
pyinstaller sklearn などのキーワードでググるといくつか関連記事を発見。以下の記事を参考に解決できた。
しかし別のエラーが発生。
this application failed to start because no qt platform plugin could be initialized
エラー文でググるといろいろ出てきて、以下の記事が参考になった。
最終的にやったこと
- conda install -c anaconda pyqt
- C:\Users\<username>\envs\<environmentname>\Library\plugins\platformsをexeの入ったフォルダの/dist以下にコピーする。
- C:\Users\<username>\Anaconda\lib\site-packages\PyQt5内のdllを/dist以下にコピーする。
所感
使う分には楽だけど、結構挙動が怪しい。一応今はコンパイル・実行で動作するけど、これ以降もなにか追加・修正したときに別の問題が起きそう。
実行にも時間かかるしなにか別の使いやすいものが出ると良いな~。
統計検定1級への道 検定と推定 その1
進捗
今回から検定と推定を学習していく。今日は点推定と区間推定、最尤法を学習。
このあたりはだいたい理解しているのでさらっと流す。正規分布の最尤法について導出を確認した。対数の微分を忘れていたのでちょっと導出に手間取った。
項目と進捗まとめ (1周目 2週目 3周目)
進捗 6/48(12.5%)
- 統計学における推定の考え方(点推定,区間推定)6/1
- 最尤法によるパラメータ推定の意味と具体例 6/1
- 統計学的仮説検定の考え方と手順
- 大数の法則の具体例と証明
- 二項分布の正規近似(ラプラスの定理)
- 不偏標本分散の意味とn-1で割ることの証明
- 分散共分散行列の定義と性質
- 母分散の推定,検定(正規分布)
- 正規分布の二乗和がカイ二乗分布に従うことの証明
- 大数の法則と中心極限定理の意味と関係
- スコア関数,フィッシャー情報量の定義と具体例
- 不偏分散と自由度n-1のカイ二乗分布
- p値の意味と具体例
- ケンドールの順位相関係数
- 偏相関係数の意味と式の導出
- 相関行列の定義と分散共分散行列との関係
9までは過去に勉強したことあるのでわからないところだけ学習していく。
6月中旬くらいには完了したいが多分6月末まで掛かりそう。
統計検定1級への道 その9
進捗
前回からは、以下の項目を学習。割と知っている話が多かったのでかなり進んだ。
速度論と待ち行列はそういう概念や分野があるんだ、という程度でOKとした。
進捗は94%、一通り完了とする。
- 歪度,尖度の定義と意味
- ベイズ推定の簡単な例と利点
- マルコフの不等式とその証明
- モンテカルロ法と円周率の近似計算
- 待ち行列理論(M/M/1モデル)の定理とその証明
- 確率空間の定義と具体例(サイコロ,コイン)
- 条件付き期待値,分散の意味と有名公式
- 指数型分布族の定義と例
あとはガンマ分布の復習をしたが、やはり確率密度関数の導出が理解できてない。似たような例について導出できなさそう。教科書を探してみるかな。
歪度と尖度
平行移動と定数倍に対して不変なことを導出。これは簡単。
マルコフの不等式とその証明
チェビシェフの不等式まで導出、分布の形をイメージできると理解しやすかった。確率分布自体を知らなくても上界を算出できるのはすごい、途中の式変形がかなり乱暴で笑った。
指数型分布族の定義と例
指数型分布族だと事前分布が存在する、未知パラメータを推定したいときは事前分布を仮定できる(計算が用意になる場合がある)
勾配を計算しやすくするために誤差関数を自乗誤差とか交差エントロピーにするのと似た感じで使えそう。
項目と進捗まとめ (1周目 2週目 3周目)
- 正規分布の基礎的なこと 4/14-15
- 正規分布の標準化の意味と証明 4/15-16
- 一様分布の平均,分散,特性関数など 4/16-17
- ポアソン分布の意味と平均・分散 4/20-22
- 多変量正規分布の確率密度関数の解説 4/21-22
- 指数分布の意味と具体例 4/21-27
- モーメント母関数の意味と具体的な計算例 4/24-27
- 最大値と最小値の分布(一般論と例)4/27-29
- ベータ分布の意味と平均・分散の導出 4/29-5/1
- 多項分布の意味と平均,分散,共分散などの計算 4/30-5/3
- コーシー分布とその期待値などについて 5/2-5
- ディリクレ分布の意味と正規化,平均などの計算 5/3-9
- 対数正規分布の例と平均,分散 5/5-9
- フォンミーゼスフィッシャー分布 5/8-9
- レイリー分布の期待値,分散,正規分布との関係 5/10
- 負の二項分布の意味と期待値,分散 5/11-21
- ガンマ分布の意味と期待値,分散 5/14-28
- 歪度,尖度の定義と意味 5/25-28
- ベイズ推定の簡単な例と利点 5/25
- マルコフの不等式とその証明 5/25-5/28
- モンテカルロ法と円周率の近似計算 5/25
- 待ち行列理論(M/M/1モデル)の定理とその証明 5/25
- 確率空間の定義と具体例(サイコロ,コイン) 5/25
- 条件付き期待値,分散の意味と有名公式 5/25
- 指数型分布族の定義と例 5/26
感覚としては1週目と2,3週目が同じくらいの時間がかかるので、1周目を1、2,3周目を0.5とする。ただ全部を必ずというわけではなく90%くらいできたら次に行く感じですすめる。
(25*1)+(22*0.5)+(22*0.5)→ 47/50(94%)
目標の90%をこえたので、次は一度統計検定の過去問を解いてみるor推定と検定の学習に移行予定。
統計検定1級への道 その8
進捗
前回からは、負の二項分布の復習とガンマ分布を勉強。全体の66%完了。
結構間が空いてしまった。もう少し毎日時間を取りたい。
ガンマ分布
平均λ(もしくは1/μ)の間隔で発生するイベントがn回発生するまでにかかる時間が従う確率分布、製品寿命やトラフィックの待ち時間の推定に利用される
確率密度関数の導出
あんまりわかりやすい記述が見つからなかった。下記が一番良かった。
http://www.fbs.osaka-u.ac.jp/labs/ishijima/gamma-02.html
各イベントをポアソン分布として、累積確率関数を微分して導出。途中の数式展開できれいに項が消える。階乗の部分をガンマ関数に変換することできれいに整理できる。
ポアソン分布、指数分布との関連が理解できればわかりやすい。
応用について要調査。
項目と進捗まとめ (1周目 2週目 3周目)
- 正規分布の基礎的なこと 4/14-15
- 正規分布の標準化の意味と証明 4/15-16
- 一様分布の平均,分散,特性関数など 4/16-17
- ポアソン分布の意味と平均・分散 4/20-22
- 多変量正規分布の確率密度関数の解説 4/21-22
- 指数分布の意味と具体例 4/21-27
- モーメント母関数の意味と具体的な計算例 4/24-27
- 最大値と最小値の分布(一般論と例)4/27-29
- ベータ分布の意味と平均・分散の導出 4/29-5/1
- 多項分布の意味と平均,分散,共分散などの計算 4/30-5/3
- コーシー分布とその期待値などについて 5/2-5
- ディリクレ分布の意味と正規化,平均などの計算 5/3-9
- 対数正規分布の例と平均,分散 5/5-9
- フォンミーゼスフィッシャー分布 5/8-9
- レイリー分布の期待値,分散,正規分布との関係 5/10
- 負の二項分布の意味と期待値,分散 5/11-21
- ガンマ分布の意味と期待値,分散 5/14-
- 歪度,尖度の定義と意味
- ベイズ推定の簡単な例と利点
- マルコフの不等式とその証明
- モンテカルロ法と円周率の近似計算
- 待ち行列理論(M/M/1モデル)の定理とその証明
- 確率空間の定義と具体例(サイコロ,コイン)
- 条件付き期待値,分散の意味と有名公式
- 指数型分布族の定義と例
感覚としては1週目と2,3週目が同じくらいの時間がかかるので、1周目を1、2,3周目を0.5とする。ただ全部を必ずというわけではなく90%くらいできたら次に行く感じですすめる。
(17*1)+(16*0.5)+(16*0.5)= 33 → 33/50(66%)
統計検定1級への道 その7
進捗
勉強開始約1ヶ月、60%完了。
前回からは、レイリー分布、負の二項分布を勉強。
レイリー分布
レイリー分布は電波強度などが従う分布
確率密度関数の導出、積分して1になることの確認、期待値、分散の導出までOK
基本的に正規分布のときと同じ処理で全部計算できる。
試験範囲外なので一旦完了とする。
負の二項分布
定義が2通り(厳密には同じだけど考え方として)あるのでややこしい。
https://stats.biopapyrus.jp/probability/negative-binomial.html
がわかりやすい
結局k回目成功するまでの試行回数の分布と捉えるか、失敗回数の分布と捉えるかの違い。上記の例だと試行回数xと、成功回数k+失敗回数yの和が同じなので変換すれば等価になる。
応用について考えてみる。
特定の発生回数までの全体の分布、y回成功するまでの失敗回数の分布って何に使えるのか??
http://lis.mslis.jp/pdf/LIS027055.pdf
図書の貸し出し頻度をモデル化→図書館の運営に利用(人員配置や業務量の予測に使う)
こういう話は確率分布の一般的な応用としてありそう、なにかの事象をモデル化してコストや人員の予測に使う。業務運営上の利用。すごく価値があるかと言われると微妙。結局モデル化誤差が乗るし、対象が一定なら最初は多めに予想して実情を見て減らせばいいから確率分布を用いることによる金額的なメリットがとても大きいというのはレアケースな気がする。
https://www.slideshare.net/simizu706/ss-50994149
・一定の割合の対象を所望の人数集めるために何人集めればよいか、95%の確率で達成できる人数を推定できる。
・ポアソン分布の過分散推定
https://qiita.com/qiita_kuru/items/d9782185652351c78aac
マーケティング分野で消費者行動予測
期待値、分散などの導出について
2つの考え方について、導出してみているが、失敗回数の確率分布とした場合について難航している。
試行回数の確率分布とした場合は、各成功が幾何分布に従うこと、期待値の線形性からかなり簡単に導出できる。
失敗回数の確率分布とした場合はモーメント母関数を使えば簡単に導出できるが、モーメント母関数の導出で躓く。期待値の定義通りの導出ではうまく変数を展開して総和が1になるようにくくって導出する方法だと思うが今日はここまで行かなかった。
多分下記のリンクの例1.14の形が楽だと思う。
http://www.math.kobe-u.ac.jp/HOME/higuchi/h24kogi/12prob1-4.pdf
勉強していた感じ二項定理、多項定理や級数の扱いが苦手なことがわかってきたのでこのあたり復習したい。
項目と進捗まとめ (1周目 2週目 3周目)
- 正規分布の基礎的なこと 4/14-15
- 正規分布の標準化の意味と証明 4/15-16
- 一様分布の平均,分散,特性関数など 4/16-17
- ポアソン分布の意味と平均・分散 4/20-22
- 多変量正規分布の確率密度関数の解説 4/21-22
- 指数分布の意味と具体例 4/21-27
- モーメント母関数の意味と具体的な計算例 4/24-27
- 最大値と最小値の分布(一般論と例)4/27-29
- ベータ分布の意味と平均・分散の導出 4/29-5/1
- 多項分布の意味と平均,分散,共分散などの計算 4/30-5/3
- コーシー分布とその期待値などについて 5/2-5
- ディリクレ分布の意味と正規化,平均などの計算 5/3-9
- 対数正規分布の例と平均,分散 5/5-9
- フォンミーゼスフィッシャー分布 5/8-9
- レイリー分布の期待値,分散,正規分布との関係
- 負の二項分布の意味と期待値,分散
- ガンマ分布の意味と期待値,分散
- 歪度,尖度の定義と意味
- ベイズ推定の簡単な例と利点
- マルコフの不等式とその証明
- モンテカルロ法と円周率の近似計算
- 待ち行列理論(M/M/1モデル)の定理とその証明
- 確率空間の定義と具体例(サイコロ,コイン)
- 条件付き期待値,分散の意味と有名公式
- 指数型分布族の定義と例
感覚としては1週目と2,3週目が同じくらいの時間がかかるので、1周目を1、2,3周目を0.5とする。ただ全部を必ずというわけではなく90%くらいできたら次に行く感じですすめる。
(15*1)+(15*0.5)+(15*0.5)= 30 → 30/50(60%)
統計検定1級への道 その6
進捗
勉強開始25日目、56%完了。
ディリクレ分布、対数正規分布の確率密度関数、期待値、分散、共分散の導出を復習。
ディリクレ分布の期待値導出は 参考による方法とPRMLの課題2.8の回答例による方法の2つがある。前者は積分公式による方法で、後者は確率密度関数の積分が1になることを利用する方法。後者の方が自分としては理解しやすいが、前者の方が計算量が少ないので、試験では前者を採用する。
積分公式という用語が、この分野で一般的に通じる表現なのかよくわからない。
対数正規分布は確率密度関数の導出がやや不安。ここが理解しやすかった。期待値などの導出は計算量が多くちょっと面倒だが流れは一定なので案外楽。
フォンミーゼスフィッシャー分布は方向に関する確率分布で、今回の勉強で初めて知った。ユニークな確率分布で面白そうだけど、応用先があまり想像できない。調べたところGANやクラスタリングでの応用があった。確かに潜在空間が平面ではなく多次元の球体だと仮定したほうが表現しやすい場合ありそう。
Mroueh, Youssef, et al. "Sobolev gan." arXiv preprint arXiv:1711.04894 (2017).
Hasnat, Md, et al. "von mises-fisher mixture model-based deep learning: Application to face verification." arXiv preprint arXiv:1706.04264 (2017).
色相みたいに循環している対象に関しても使えそうな気がする。
この確率分布面白そうだけど統計検定1級の範囲ではないので一旦完了とする。
項目と進捗まとめ (1周目 2週目 3周目)
- 正規分布の基礎的なこと 4/14-15
- 正規分布の標準化の意味と証明 4/15-16
- 一様分布の平均,分散,特性関数など 4/16-17
- ポアソン分布の意味と平均・分散 4/20-22
- 多変量正規分布の確率密度関数の解説 4/21-22
- 指数分布の意味と具体例 4/21-27
- モーメント母関数の意味と具体的な計算例 4/24-27
- 最大値と最小値の分布(一般論と例)4/27-29
- ベータ分布の意味と平均・分散の導出 4/29-5/1
- 多項分布の意味と平均,分散,共分散などの計算 4/30-5/3
- コーシー分布とその期待値などについて 5/2-5
- ディリクレ分布の意味と正規化,平均などの計算 5/3-9
- 対数正規分布の例と平均,分散 5/5-9
- フォンミーゼスフィッシャー分布 5/8-9
- レイリー分布の期待値,分散,正規分布との関係
- 負の二項分布の意味と期待値,分散
- ガンマ分布の意味と期待値,分散
- 歪度,尖度の定義と意味
- ベイズ推定の簡単な例と利点
- マルコフの不等式とその証明
- モンテカルロ法と円周率の近似計算
- 待ち行列理論(M/M/1モデル)の定理とその証明
- 確率空間の定義と具体例(サイコロ,コイン)
- 条件付き期待値,分散の意味と有名公式
- 指数型分布族の定義と例
感覚としては1週目と2,3週目が同じくらいの時間がかかるので、1周目を1、2,3周目を0.5とする。ただ全部を必ずというわけではなく90%くらいできたら次に行く感じですすめる。
(14*1)+(14*0.5)+(14*0.5)= 28 → 28/50(56%)
統計検定1級への道 その5
進捗
勉強開始22日目、46%完了。
相変わらずディリクレ分布の規格化の部分が理解できず苦労している。 参考によるとヤコビアンがとなるはずなのだが導出できない。。。
ここで悩んで止まってしまい、GW中は思ったよりも進まなかった。
余談だが、はてなで上記のように指数部を複数文字で表現したい場合、以下のように中括弧でくくるとうまく表示してくれた。少括弧ではだめだった。
対数正規分布については以下のページが参考になった。
https://nishiru3.hatenablog.com/entry/2018/06/23/000119
http://bme.sakura.ne.jp/sblo_files/worktips/image/20151004_LND.pdf
平方完成で積分に関係ない部分をくくるのはパターンなので覚えておきたい。
項目と進捗まとめ (1周目 2週目 3周目)
- 正規分布の基礎的なこと 4/14-15
- 正規分布の標準化の意味と証明 4/15-16
- 一様分布の平均,分散,特性関数など 4/16-17
- ポアソン分布の意味と平均・分散 4/20-22
- 多変量正規分布の確率密度関数の解説 4/21-22
- 指数分布の意味と具体例 4/21-27
- モーメント母関数の意味と具体的な計算例 4/24-27
- 最大値と最小値の分布(一般論と例)4/27-29
- ベータ分布の意味と平均・分散の導出 4/29-5/1
- 多項分布の意味と平均,分散,共分散などの計算 4/30-
- コーシー分布とその期待値などについて
- ディリクレ分布の意味と正規化,平均などの計算
- 対数正規分布の例と平均,分散
- フォンミーゼスフィッシャー分布
- レイリー分布の期待値,分散,正規分布との関係
- 負の二項分布の意味と期待値,分散
- ガンマ分布の意味と期待値,分散
- 歪度,尖度の定義と意味
- ベイズ推定の簡単な例と利点
- マルコフの不等式とその証明
- モンテカルロ法と円周率の近似計算
- 待ち行列理論(M/M/1モデル)の定理とその証明
- 確率空間の定義と具体例(サイコロ,コイン)
- 条件付き期待値,分散の意味と有名公式
- 指数型分布族の定義と例
感覚としては1週目と2,3週目が同じくらいの時間がかかるので、1周目を1、2,3周目を0.5とする。ただ全部を必ずというわけではなく90%くらいできたら次に行く感じですすめる。
(13*1)+(10*0.5)+(10*0.5)= 23 → 23/50(46%)