rootと同じ仮想環境を作る話、vispyの"PyQt5"がimportできない問題と一時的解決策
rootと同じ仮想環境を作る最も簡単な方法:
conda create --name 新しく作る仮想環境の名前 --clone base
これをターミナルで実行すればいい
【問題】 「作って動かすALife」で、以下のコードを実行しようとしたら以下のようになってしまった。
import vispy vispy.use('PyQt5') # => RuntimeError: Could not import backend "PyQt5": # => No module named 'PyQt5'
【(根本ではない)解決策】
仮想環境をやめ、色々入っているroot環境でvispyをインストールしたらできた
でもroot環境は汚したくないから↑の方法でrootを別名でまた作ればok
XXが原因で年間〇〇人が死亡
https://www3.nhk.or.jp/news/html/20180922/k10011640041000.html
これって何が悪いのだろうか?
もちろん銃や自動車など無関係の他人にまで被害が及ぶものはわかる
しかしなぜタバコやアルコールもここまで悪く言われなければいけないのか?
今さらタバコ・アルコールの害を知らずに吸ってる人なんていないし、副流煙の問題などは分煙をすべきかの話であってタバコを規制する理由にはならない。そもそも副流煙の健康被害は科学的にわかっていない
人が酒タバコをやめて平均寿命が5年伸びたら人類は幸せになるのか?
社会のお荷物になる高齢者が増えるだけなのでは?
(anaconda) module 'tensorflow' has no attribute '***'の解決方法
<問題>
こんな感じでtensorflowがうまく使えなかった。
module 'tensorflow' has no attribute 'Graph'と出てしまっている。
<解決策>
正しい環境でインストールし直した
<詳細>
conda環境なのにpipでインストールしてしまっていた
tf.***の***がバージョン変更によって使えなくなっているのか、tf自体が***というのを持っていないのかを見分けるためには以下のコードを実行されたい:
import tensorflow as tf for x in dir(tf): print(x)
これでズラーッと関数が出てこなかったらtensorflowがうまくインストールされていない可能性が高い。
ズラーッと出てきたならtensorflowのバージョンアップでその関数名をちょっと変える必要がある。
参考:
qiita.com
ズラーっと出てこなかった人向け:
もしanacondaを使っているなら
pip uninstall tensorflow conda install -c conda-forge tensorflow
の2行を実行してみて欲しい。
それ以外の対処法はぐぐったら出てくるので省略
(拡大/縮小)ではなくMacでフォントサイズを大きくするショートカットキー
問題:↓のボタンのショートカットを探したかった。文字拡大、文字縮小をキーボード入力で実現したい
結論:
"cmd"+"shift"+"<"でフォントを小さく
"cmd"+"shift"+">"でフォントを大きくできる。
これを調べようとしてもググラビリティーが低すぎて、ページを拡大する、("cmd"+"shift"+"+")のショートカットしか引っかからず、結局英語で調べることになった。
だからこんな記事を書いてもネットの海の中で検索に引っかからない気がする。日本語でどんなキーワードで検索すればよかったのだろうか。
numpy.clipとinvalid value encountered in double_scalars
(参考:numpy.clip — NumPy v1.14 Manual)
機械学習でsigmoid関数の計算をしていたら
RuntimeWarning: invalid value encountered in double_scalars
RuntimeWarning: divide by zero encountered in log
この2つのエラーが出てきた
解決策:
numpy.clipをして極端な値の出現を抑える。
つまりsigmoidの式を
def sigmoid(x): return 1.0 / (1.0 + np.exp(-(np.clip(x, -10, 10))))
こんな感じにすれば解決した。
何が起こっていたか:
そもそも下の式で表せられるシグモイド関数はxにどんな値を入れようがyは0,または1にはならない。
しかし、pythonでは最大桁数が定められているので、sigmoidの式xの値に大きかったり(10000とか)、小さかったりする値を入れてしまうと(本当は0.99999とか、0.00000001とかいう値が欲しいのにもかかわらず)本来は帰ってくるはずのない1.0とか、0.0とかいう値が帰ってきてしまう。
1.0 / (1.0 + np.exp(-50)) # 1.0
これはnumpy.clipで防げる。例えば、xに10という上限、-10という下限を設ければいい。
numpy.clip(114514, -10, 10) # => 10 numpy.clip(-810931, -10, 10) # => -10 1.0 / (1.0 + numpy.exp(-810)) # => 1.0 <= 良くない! 1.0 / (1.0 + numpy.exp(-(numpy.clip(810, -10, 10)))) # => 0.9999546 <= 嬉しい!
カテゴリー分類/クラス分けアルゴリズム比較 (Do we Need Hundreds of Classifiers to Solve Real World Classification Problems?)
http://jmlr.org/papers/volume15/delgado14a/delgado14a.pdf
この論文より要約
179ものアルゴリズムを比較したすごい論文
結論はランダムフォレストが一番いいパフォーマンスを出す、とのことらしい
比較したアルゴリズム(大きいカテゴリー):
- Discriminant Analysis (判別分析)
- ベイズ系
- ナイーブベイズ等
- ニューラルネットワーク系
- extreme learning machine等
- SVM系(サポートベクターマシン)
- 決定木系(Decision Trees)
- C4.5等
- ルールベース
- 決定木と似てる
- Boosting
- Generalized Linear Models
- 近傍法(Nearest neighbor methods)
- Logistic and multinomial regression
ニューラルネットワークなどある中、なんだかんだランダムフォレストが良い
時点で良いのはSVM