FC2ブログ
10«1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.»12

たまひびとらの絵本の実

読書好きな姉妹と弟と父母の読んだ本

Pythonで始めるスクラッチからのブロックチェーン開発入門 

Pythonで始めるスクラッチからのブロックチェーン開発入門
Pythonで始めるスクラッチからのブロックチェーン開発入門

このトピックに興味ある人にはおすすめ。ただしノンプログラマーにとってこの方の話・コーディングは速いね。pycharm もハードルある(複数のパイソンプログラムを同時に扱い、実行にはコンフィギュレーション設定が必要)。

ブロックチェーンでは、各ブロックの情報(そのときの時間、そのブロック時間内での取引の記録、ナンス値、前ハッシュ値)が記録される。そのブロック情報に計算をした結果が、先頭に0が続くハッシュ値になるように「ナンス値」を求めるのがマイニング。このナンス値探しはハッシュ値の性質から(ちょっとでも違うと全然違うハッシュ値が出てくるのでとにかく試すしかないという意味で)総当たり法でひたすらマシンパワーを使って行われる。まずゼロを試し、だめなら1、というように試し続け、成功する(先頭に0が並ぶ)まで続けられる。成功したときの値が、正しいナンス値としてブロック情報の1つとなる。つまりマイニングがないと、ブロックができないから、ブロックのチェーンもできない。ハッシュ値の計算も楕円曲線の取り扱いもPythonのライブラリーでできる。たとえばこんな感じ。

import hashlib
key = 'making hash'
hash = hashlib.sha256(key.encode()).hexdigest() #16進数表示
print(hash)

後半flask以後は実装できなかった。http://0.0.0.0:5000/ にアクセスできず、local IP addressを入れてやったり127.0.0.1を使ったりしたけどギブアップ。ブロックチェーンの基礎は理解できたので十分満足。

スポンサーサイト



category: プログラム

cm 0   tb 0   page top

Python for Financial Analysis and Algorithmic Trading  

Python for Financial Analysis and Algorithmic Trading
Python for Financial Analysis and Algorithmic Trading

これもいいコースだった。特によかったのは
① タイムシリーズの扱いのところ。やり方は説明されるけど、ロジックまでは説明されない。
EWMA = exponentially-weighted moving average: より最近のデータにより重みを与えてローリング平均を計算。直近のデータの重みを1/3とすれば、前日の平均(それまでのデータすべてから計算された値)に2/3の重みを与える。つまり等比数列重みがヒストリカルデータにかかる。
ARIMA model: タイムシリーズでの最大のイシューは自己相関の処理らしい
p autoregression 何期分前に対する自己相関を見るか
d integration 差分の階数
q moving average ローリング平均の期間の長さ

② Quantopian のところ。Quantopian はウェブで登録すれば、python / jupyter notebook 形式のコーディングでアルゴリズムが組めてします。しかもタダ。米国株のデータベース、モーニングスター情報が手に入り、バックテストなども可能。コーディングのイメージとしては、そのルールを当てはめる周期(たとえば毎週)などの初期設定を行い、どんな条件を満たす株を売買それぞれの対象とするかをpipelineとして決定し、アルゴリズム取引(rebalance)を実行。日本でも QuantX というのがあるらしい。

パイソンの主要ライブラリーであるpandas は Cliff Asness の AQR が一般公開を認めて今に至るのか。さすがだよ、最先端の人たち。

category: プログラム

cm 0   tb 0   page top

Image recognition opencv  

opencv を使ってみたのでメモ残す。

まずAnaconda にインストール。インストールがうまくいかない場合は管理者権限で入ってインストール。

既に学習済みのプログラムが用意されているので、それを使えば簡単に画像認識ができる。
ただし、cv2.CascadeClassifier('haarcascade_frontalface_default.xml')やcv2.imread('画像認識したい写真ファイル.jpg')のカッコ内は、このサンプルのような形でなく、フルパスを示す必要がある。フルパス内の\がエスケープと読み違えられるので、rを頭につけて(r"C:\Users\---")のようにする。

face_recognition_sample.jpg

category: プログラム

cm 0   tb 0   page top

10 Puzzle  

日本で電車に乗るとこどもは切符の4桁の数字で10ができるかをやっている。それをプログラムで解けるのかとこどもに聞かれ、作ってみた。なお、近いプログラムをネットで参考にさせていただいた。

from itertools import permutations, product

problem = input('Input 4 digits (for example, 1234)')
print("Problem is ", problem)
print('Solving...')

flag = False
Brackets = ['%s%s%s%s%s%s%s', '(%s%s%s)%s%s%s%s', '(%s%s%s%s%s)%s%s', '%s%s(%s%s%s)%s%s',
'(%s%s%s)%s(%s%s%s)', '%s%s(%s%s(%s%s%s))']
Operator = ['+', '-', '*', '/']

for OP1, OP2, OP3 in product(Operator, Operator, Operator):
for a, b, c, d in permutations(problem):
for pattern in Brackets:
f = pattern % (a, OP1, b, OP2, c, OP3, d)
try:
result = eval(f)
except ZeroDivisionError:
continue
print(f, ' = ', result)
if abs(result-10) < 0.001:
print('You got a solution!')
flag = True
break
if flag:
break
if flag:
break

if flag==False:
print('There is no solution.')

category: プログラム

cm 0   tb 0   page top

Unity 2D game  

unity_2D_20190815.png

This is the longest 2D game I've ever made in Unity. Thanks to Alex' youtube videos.

Tora

category: プログラム

cm 0   tb 0   page top

数独ソルバー、DJI Tello 操縦 

1. 数独ソルバー。これは自分で作ろうとしたけど、力不足でできませんでした。ウェブにあるbacktracking のコードを解読したのがせいぜい。バックトラッキングは入れ子構造になっている。リー・シェンロンは自分で作ったっていうもんなー。

2. DJI Ryze Tello を Python で飛ばす。なかなか動かなかった理由が、Tello の firmware の問題。Tello app を使いアップデートした。あとは比較的単純。import socket して、tello と local を設定してつなぐ。そして takeoff, land などのコマンドをsock.sendto でtello に送ればOK.

import socket

tello = ("192.168.10.1", 8889)
local = ("", 9000)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(local)

while True: # continue loop until break because it's True'
try:
msg = input("")
msg = msg.encode(encoding="utf-8")
sent = sock.sendto(msg, tello)
except:
break

category: プログラム

cm 0   tb 0   page top

keras 練習 from 新しい機械学習の教科書 

今年読んだ本で最も書き込みが多かったあたらしい機械学習の教科書。当時はプログラムを読むので四苦八苦だった。Pythonに慣れてきたし、kerasの理解も不足しているので、Chapter 7を再読。

そもそもの作り
入力層: 2次元上の座標X、ダミー(定数用)
中間層入力: B = WX
中間層出力: Z = Sigmoid(B)、ダミー(定数用)
出力層入力: A = VZ
出力層出力: Y = Softmax(A)
機械学習で求めるのはB, Z, A, Y
数値微分または解析微分値でバックプロパゲーションして(損失関数値の最小化を目指して)、W, V の値をチューニング

kerasだとほぼ全部すっ飛ばして計算結果が出る。でもやっぱりブラックボックス。中間層の数はいくつとなるべきなのか、ニューロンの数はいくつとなるべきなのか、まったくわからない。とりあえず教科書プログラムに変更を加えて、中間層ニューロン数の変化による正答率を見てみたら、なんとニューロン数が倍になってもほとんど改善なし。えー。

KerasDec006.jpg
KerasDec0007.jpg
KerasDec0008.jpg
KerasDec0009.jpg
KerasDec0010.jpg


category: プログラム

cm 0   tb 0   page top

【キカガク流】脱ブラックボックス講座の中級編 

【キカガク流】脱ブラックボックス講座の中級編
【キカガク流】脱ブラックボックス講座の中級編

概ね簡単ではあるんだけど、自分がこれまでやっててわかってなかったこととか、sklearnの使い方とかわかってよかった。

category: プログラム

cm 0   tb 0   page top

【PythonとStanで学ぶ】仕組みが分かるベイズ統計学入門 

【PythonとStanで学ぶ】仕組みが分かるベイズ統計学入門
【PythonとStanで学ぶ】仕組みが分かるベイズ統計学入門

これだけベイズの本を読んでいて超恥ずかしいんだけど、本コースでベイズ推定の根本的考えがやっとわかった気がする。ベイズの解説だと、サンプリング手法の説明が多いんだけど、重要なのはサンプリング以前のコンセプトなのだ。ベイズ推定では、想定する分布のパラメータ(たとえば平均、分散)を確率的に求める。事後分布は、尤度関数(知っているもしくは自分が想定する確率密度関数にデータを入れて積をとったもの)と事前分布(わかれば)があれば、計算できる。下の例では、4点のデータを基に、パラメータ(正規分布の平均値)がどこかを区間ずっと調べて行って(b)、どのあたりがよりありそうな値か計算できる(パラメータの分布が見える)。この例では、尤度だけがあって、事前分布がない。しかし、事前分布がわからなければ一様分布(つまり定数)となるので、実質的には何も変わらない。以前に作ったこの②でも同じことをやっている。データが増えれば、尤度関数の値が変わるので、ベイズが更新されることとなる。
normal mu estimate
こうやって、どの点がありそうなのかを調べるんだけど(ありそうな値を1つづつ試すプロセスがサンプリング)、次元数(調べるパラメータの数)が増えると膨大な計算が必要になる。そこで、効率的なサンプリング(どこをどう調べるか)、という考えがでてくる。サンプリング手法として、本コースでは、MH-algo, Gibbs sampler, Hamiltonian MC が説明される。詳細つり合い条件もやっと理解できたし(2つの状態があって、双方から他方へ流れがあるとき、状態の量が増減して、結果的に2つの流れが完全に相殺しあうとき、流れは終わって定常状態になる)、Gibbs sampler では、2個のパラメータのありそうな値を探すのに、1つを固定してもう1つを探すという手続きを交互にやることがわかった。ハミルトニアンの説明もすばらしい。

もう1つ例を作ってみた。表裏の確率が0.7/0.3のコイントス。事前分布は表裏確率0.5の正規分布(分散は適当)。尤度関数は正規分布じゃないのかもしれない(上限下限のある分布を使うべきなのかも)。まあ細かいことは気にせずに、試行回数10回、20回、30回と事後分布が更新されることがわかる。試行回数0回のときは事前分布ということになる。繰り返しになるけど、尤度関数は想定された分布でのデータごとの確率密度(積)。
p(μ|X) ∝ {Πp(xn|μ)} p(μ) ということ。
cointossnoshrink.jpg



category: プログラム

cm 0   tb 0   page top

ゼロから作るニューラルネットワーク 

ゼロから作るニューラルネットワーク
ゼロから作るニューラルネットワーク

これやってみました。この先生の教え方はめちゃくちゃわかりやすい。おすすめ。内容的には、機械学習本のシンプルバージョン。ただし、最後の課題はいきなり難しい。keras でやってみようとしたら失敗。うまく予測してくれない。悔しいのでこちらの本で習った tensorflow session で作ったら一応ワークした。とはいっても、日付データの扱いがわからないのでinstant列で代用、カテゴリデータを別扱いするのかもよくわからなかった。でも苦しんでやってみたことには価値がある(と思う)。学習率の設定とか難しいね。まだ安定しないので以下はうまくいった例。

bikesharing tf 0001
bikesharing tf 0002
bikesharing tf 0003
bikesharing tf 0004

category: プログラム

cm 0   tb 0   page top

訪問者数

カテゴリ

最新記事

最新コメント

最新トラックバック