読者です 読者をやめる 読者になる 読者になる

キンサクプログラマー

お金儲けと技術のメモ

scikit-learnで3分間機械学習

ちょい前のrebuild fmでscikit-learnの話があったので、どんなものか触ってみることにした。
rebuild.fm


scikit-learn: machine learning in Python — scikit-learn 0.18.1 documentation
よく知らないライブラリに触れるとなると大抵一つのチュートリアルをやって心が折れることが多い(
(tensorflowなんかまさにそれ)が、scikit-learnはインストールしてちょっと使い方を読んで、サンプルを動かすまで3分もかからなかった。

>>> X = np.sort(5 * np.random.rand(40, 1), axis=0)
>>> y = np.sin(X).ravel()
>>> y[::5] += 3 * (0.5 - np.random.rand(8))
>>> svr_rbf = SVR(kernel='rbf', C=1e3, gamma=0.1)
>>> svr_lin = SVR(kernel='linear', C=1e3)
>>> svr_poly = SVR(kernel='poly', C=1e3, degree=2)
>>> y_rbf = svr_rbf.fit(X, y).predict(X)
>>> y_lin = svr_lin.fit(X, y).predict(X)
>>> y_poly = svr_poly.fit(X, y).predict(X)
>>> lw = 2
>>> plt.scatter(X, y, color='darkorange', label='data')
<matplotlib.collections.PathCollection object at 0x1007987b8>
>>> plt.hold('on')
>>> plt.plot(X, y_rbf, color='navy', lw=lw, label='RBF model')
[<matplotlib.lines.Line2D object at 0x100798f28>]
>>> plt.plot(X, y_lin, color='c', lw=lw, label='Linear model')
[<matplotlib.lines.Line2D object at 0x105bc2278>]
>>> plt.plot(X, y_poly, color='cornflowerblue', lw=lw, label='Polynomial model')
[<matplotlib.lines.Line2D object at 0x10079ec88>]
>>> plt.xlabel('data')
<matplotlib.text.Text object at 0x10aac9e48>
>>> plt.ylabel('target')
<matplotlib.text.Text object at 0x10ac0f860>
>>> plt.title('Support Vector Regression')
<matplotlib.text.Text object at 0x1007779b0>
>>> plt.legend()
<matplotlib.legend.Legend object at 0x10121db00>
>>> plt.show()

f:id:pikurusux:20170303080157p:plain
サンプルそのままだが、
単純なサポートベクターマシンの学習だったらデータ変えてすぐに使えそう。
svmの分類処理自体は

 y_poly = svr_poly.fit(X, y).predict(X)

だけ。すげぇ

androidアプリのサンプルでエラー

githubで公開されてるandroidのプロジェクトをもってきたらエラーが出た。

github.com

Error:Execution failed for task ':Application:processDebugManifest'.
> Manifest merger failed : uses-sdk:minSdkVersion 7 cannot be smaller than version 9 declared in library [com.android.support:gridlayout-v7:25.0.1] /home/android-RecyclerView-master/Application/build/intermediates/exploded-aar/com.android.support/gridlayout-v7/25.0.1/AndroidManifest.xml
  	Suggestion: use tools:overrideLibrary="android.support.v7.gridlayout" to force usage

全然理解せずに、

tools:overrideLibrary="android.support.v7.gridlayout" 

だけ追加しても、別のエラーがでた。

build.gradleの

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 25
    }

7を適当にあげたらビルドが通った。
そもそも、7で動くのか疑問。個人かいはつだったらtargetSdkVersionと同じで良いかも

減らせガチクソ無駄会議

 会議時間が多すぎる。
なんどか愚痴っているが、今年に入りさらに拍車がかかった。
取引先との打ち合わせならまだしも、すべて自部門の打ち合わせなので、やり方次第でいくらでも削れるはずなのに一向に減らない。

1週間の打ち合わせ時間を計算してみる

  • 勤務時間   8時間✖️5日=40時間(残業なしベース)
  • 朝会     1時間✖️5日= 5時間
  • 課の技術活動         4時間
  • 部の活動           2時間
  • 課の情報共有         1時間
  • 製品の情報共有      0.5時間
  • 部門の全体会       0.5時間(月2時間で1週換算)
  • 合計          13時間

ここまでが定例会議。
これに加えて、突発的な話し合いが週間に3件程度はあるので以下を追加。

  • 突発会議    1時間✖️3回=3時間

合計 15.5時間
16 / 40 = 0.4

多い人だとこれに加えて、定例会議が➕4時間程度増えるため、業務時間の半分を会議に費やすことになる。
これが課長とかリーダーであれば納得もいくが、末端の開発者がこの状態だと開発も進まない。

会議が増える理由

業務時間を奪っている感覚がない

諸悪の根源は「残業して仕事すれば良いや」の考えだと思う。
業務量に対して作業時間が足りない場合、無駄な時間を削減するしかないので、無駄な会議が削られるべきだ。しかし、うちの職場ではそこそこ自由に残業ができてしまうせいで、そうはならない。なんだったら、残業時間に定例会議をしていたりする。

定例化しすぎ

「この話し合いは重要なので、定例化しましょう」というセリフをよく聞く。
メイン業務でないと、どっかで進捗を確認しないと仕事が進まないのは理解できるが、
いかんせん定例化しすぎ。

2者以上の意思決定ができない

関係者が4人を超えてくると、個人での決定ができなくなるのは理解できるが、
もう少しメールなり、なんなりで決定してほしい。

関係者が近くにいない

業務上密接な関係がある相手なのに、フロアが離れていたりする。周りにいれば関係者数人で朝の数分で会話すれば良いものを、わざわざ枠をとって集まる。

進捗報告しすぎ

会議のせいで進捗が進んでいないのに、その進捗の進んでなさをまた会議で報告するという負のスパイラル。

まとめ

会議時間そのものにとどまらず、資料作成時間、移動時間、議事録の作成・送付、などなどその他の時間も無駄になる。脊髄反射で会議を開いている人は罪の深さを自覚してほしい。

kerasのRNNで雑な為替予測(ディープラーニング)

ディープラーニングで相場に勝つのは誰しもが夢見ることだとは思います。
chainer,tensorflow,keras,theanoいろいろ扱いやすいライブラリも増えているので僕もやってみようかと思います。

登場人物


現段階では、正弦波のデータをRNNで学習しているサイトがあったので、そちらのモデルを拝借して1次元データの学習をさせてみました。
qiita.com

学習させるデータはUSD/JPYの日足データ、2000くらい(少な)。
計算も収束していないし、学習の結果も全然だめだめでした。
f:id:pikurusux:20170214201035p:plain
モデル選定ミスというよりも、ハイパーパラメータの設定がそのまま過ぎたので、適切な値に調整して再度調整したいと思います。
f:id:pikurusux:20170214201039p:plain

データサイエンティスト必須 jupiter notebookって知ってるか

%matplotlib inlineとかいう謎の記述

kerasを動かすためにサンプルをおもむろにコピペしていたところ遭遇。
python上で動かす、matlabみたいなツールらしい。
その他の特徴としては、

python以外の複数の言語にも対応しており、
ブラウザ上でソースコードを変更し、リアルタイムでグラフに反映するようなこともできる
f:id:pikurusux:20170214132850p:plain

データ分析の結果を即時確認することができるので、機械学習や統計をやっている人におすすめ。
まだ、あまり使えていないけどこれを使いながら機械学習を勉強していきたい

プレミアムフライデーという税金の無駄遣い

f:id:pikurusux:20150602011633j:plain
金曜の勤務時間を15時までにする、プレミアムフライデーが2月末に始まろうとしている。
にもかかわらず、導入企業(導入予定含む)は2.2%。
そもそも、導入したところで企業側にメリットがない。

プレミアムフライデーの現状と将来

経済産業省
↓ 消費増えたらうれしいよね?。協力してよ
経団連(消費増えたら嬉しいわ。 やろう!)
↓ 15時終わりにして消費伸ばそうよ
企業 : メリットないから導入はしないわ。プレミアムフライデーに合わせたキャンペーンはやるけどね。
公務員: 国の施策だからやりましょう。

将来的には

導入企業 (うち以外どこもやってないし、勤務時間が合わないからやりづらい! やめよう)
公務員   国の施策だし続けましょう

ってことになったらもう最悪。
すでにロゴ、ホームページ、推進キャンペーン、もろもろの会議とかで数億円〜数十奥円失われていそうな上に、
公務員の労働時間だけ短縮されしまうのだろうか。
不条理だ。

draw.ioマジすごい

まったく別の記事を書いていたけれど、その記事に載せる図を作成するために使ったdraw.ioが素晴らしかったので、
記事を書くのを中断した。

Flowchart Maker & Online Diagram Software

アイコンが豊富

一番の理由はアイコンの種類。
UMLやらクラウドの概念図に使われるような一般的なものから、AWSAndroidiOSなどのアイコンまである。
しかも綺麗

登録なし

類似サービスのCacooとかは登録が必要だが、draw.ioは登録の必要がない。
こんな感じでいきなり作図ができちゃう。
f:id:pikurusux:20170208053124p:plain

パワポとかキーノートとかで無理に頑張って作図してる人は、draw.ioを使うことをお勧めする。