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 '***'の解決方法

<問題>

f:id:bnbnp:20180821225925p:plain

こんな感じで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でフォントサイズを大きくするショートカットキー

問題:↓のボタンのショートカットを探したかった。文字拡大、文字縮小をキーボード入力で実現したい

f:id:bnbnp:20180808162712p:plain

 

結論:

"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にはならない。

 { \displaystyle y = \frac{1}{1 + e^{-ax}}}

f:id:bnbnp:20180715165220p:plain

しかし、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ものアルゴリズムを比較したすごい論文

結論はランダムフォレストが一番いいパフォーマンスを出す、とのことらしい

比較したアルゴリズム(大きいカテゴリー):

  1. Discriminant Analysis (判別分析)
  2. ベイズ
  3. ニューラルネットワーク
    • extreme learning machine等
  4. SVM系(サポートベクターマシン)
  5. 決定木系(Decision Trees)
    • C4.5等
  6. ルールベース
    • 決定木と似てる
  7. Boosting
  8. Generalized Linear Models
  9. 近傍法(Nearest neighbor methods)
  10. Logistic and multinomial regression

ニューラルネットワークなどある中、なんだかんだランダムフォレストが良い

時点で良いのはSVM