2017年12月3日 星期日

Tensorflow document 研讀 (不斷更新 2017/12/3)

參考英文版的tensorflow document
https://www.tensorflow.org/programmers_guide/graphs

在github以issue的方式呈現
https://github.com/killelder/tensorflownote/issues

目前看到了Variables,
中間有些地方不熟或暫時沒興趣的部分會跳過
如果有錯誤歡迎指教訂正

2017年9月22日 星期五

Machine Learning on TWSE -- vol.1

在Study了許多文件以後, 發現Deep Learning跟我一開始想的不完全一樣,
又或者說, 我又更了解了Deep Learning一點
在這塊領域上面, 台灣是落後的,
當然, 我更是一個半途出家的研究者,
不敢說自己有多專業, 更多的是希望拋磚引玉,
引進更多志同道合的夥伴們一起成長,

在vol.0作出一個初步的結果以後, 遲遲沒有拿出來,
因為在實作之前有一個更重要的問題,

如何確定未來數據會重現我訓練出來的行為?  
如何確定這個model是general的

先說個我一開始認為的謬誤
我認為的Neural Network是不管我餵甚麼數據給他,
他總是能依靠著電腦強大的運算能力, 去找出相關性,
然而, 事情並不像傻人想的那麼簡單,
如果單純把開高低收成交量送進去計算,
相當高的機率是學不到任何東西的,

所以這時候我採用以某一天的開盤價作為基礎, 將開高低收轉變為1左右的數字
這樣既可以解決個股票之間, 價格高低水位不同的問題

也可以一併解決learning rate的問題,
相信大家在學machine learning的時候,
都聽過要做normalization, 但可能都不知道為什麼
先扯到一個machine learning的超參數 "learning rate"
(超參數意指非machine learning會學習的變數, 只能由人在外面調適, 每次學習的時候這個超參數是固定的)
就我所認為的應該是因為每個神經元每個input在學習的時候, 會根據作learning rate大小的shift, 以去求gradient找最適化參數,
然而如果input data每次不一樣, 甚至同一個minibatch輸入進去的input data不一樣,
那麼每個神經元學習的速度會不一樣, 這時可能會導致本來該學會的東西,
反而學不會,
至於成交量我還沒想到一個比較好的做法,
因此目前先採用開高低收作input data,

因為想要學習一個general的方法
下一篇可能會講解如何random選股票送進去當training data






2017年9月16日 星期六

Machine Learning on TWSE -- vol.0

研究了數日以後,
從原先想研究的RL方向,
先轉換成現在較成熟的DNN,
開高低收成交量加入了data preprocess, normalize
訓練了2~3天, 有一個初步的結果是train loss跟test loss會同步下降,
這通常表示著我們找到了一個gerneral的規則, 能夠提升我們的勝率(預測),


至於其他詳細的detail,  等我訓練到滿意以後, 應該會一次釋出
目前初步預估, 是可以用來做交易的model,
如果考慮100元的股票 手續費86 + 300證交稅 = 0.00386
加上買賣各讓一個點差 = 0.01
每次交易成本如果設定在0.01386
目前每次交易平均獲利是在0.03x
如果有機會把平均交易獲利提升到0.05的話或許已經是一個相當不錯的model

當然data並不是那麼完美, 尤其遇到增減資, 每年的股利發放, 可能會造成誤判,
但對於目前50萬筆的日資料, 或許例外狀況是可以忽略不計的

2017年9月13日 星期三

初入 - Machine Learning

在自己胡亂摸索了 ML兩個多月以後,
在Deep Reinforcement Learning上面碰壁以後,
決定更加深入這門學問,



其中中國有一個莫凡老師,
做了許多python 以及機器學習的教學影片, 文字, source code
https://morvanzhou.github.io/tutorials/
簡潔易懂, 可以做為入門的參考

目標是能夠學會DNN, CNN, RNN, DRL等等
在甚麼情況應該用甚麼model, 用甚麼演算法, 用甚麼方法來學習

進階的可以參考機器人學習大神
http://ufal.mff.cuni.cz/~straka/courses/npfl114/2016/sutton-bookdraft2016sep.pdf
Richard S. Sutton的Reinforcement Learning : An Introduction

----------------------------------------------------------------------------------------------------

首先先科普一下

Machine Learning主要分三(四)大類:
Supervised : 每一組data會對應一組答案, 讓機器來學習
Unsupervised : data沒有對應任何答案, 主要讓機器自己學著把data分類
Reinforcement Learing : 機器在邊跟environment 互動中, 藉由reward學習

(進化學習) : 這塊我還不熟悉






2017年5月30日 星期二

python 變聲器 (調整pitch) - St.1


要做出變聲器以前,
預計一步一步實現的流程是這樣,
1. 能夠讀取音擋的頻譜 (最好能畫圖, 以做直觀上面的分析)
2. 將已有的聲紋, 套用其他頻譜
終極目標是利用google 小姐的音檔自動產生不同人聲的效果

打算利用 pyaudio與matplotlib實現第一步驟
(PS 因為2.7的pyaudio好像有少插件, 所以以下採用3.5開發)

第一個會遇到的問題是
pyaudio似乎只能對wav檔產生反應
如果是mp3格式的話,
可以安裝pydub

對mp3做以下轉換
from pydub import AudioSegment
sound = AudioSegment.from_mp3("XXX.mp3")
sound.export("XXX.wav", format="wav")

----------------------------------------------------------------

結果發現做fourier transform 根本不用pyaudio
只需要wave就可以了與numpy中的fft轉換就可以了

----------------------------------------------------------------

https://github.com/NCNU-OpenSource/Voice-Changing
從NCNU, 楊佳儒, 郭亞蓁, 余美儒三位的作品裡面目前可以看到
可以針對pitch做更改 (整個shift一個音調)
直接使用他們的code確實可以實現變聲器的功用

http://mirlab.org/jang/books/audioSignalProcessing/audioBasicFeature.asp?title=3-2%20Basic%20Acoustic%20Features%20(%B0%F2%A5%BB%C1n%BE%C7%AFS%BCx)&language=all

基本聲學有三大特徵
如果不理會音量的話,
音色是我後續想要調整的效果

如果有人對這部分有研究 或是有想法的話, 歡迎與我聯繫, 指教



2017年3月10日 星期五

20170309 -- OBS Classic擷取聊天室方法

因為Classic CLR都沒再更新

nightdev聊天擷取的方式很早以前就死去了

最近streamlab的chatbox也有問題

所以我從最根本的方式去解決

用CLR  直接擷取twitch的聊天室  更動CSS樣式

以下感謝Seakas的協助  完成Classic CLR也可以擷取的方式

1.

打開你自己的twitch頻道

http://imgur.com/a/zLL5K


點聊天室的齒輪(不要點我齒輪  拜託QQ)
會看到跳出視窗  如同圖片中的紅框顯示

2.

http://imgur.com/a/SXmkw


跳出的視窗上方會有網址

複製下來

3.

http://imgur.com/a/9hDKE

貼到CLR裡面的URL裡面

4.

進到下面我分享的css檔案  複製貼上CSS就可以使用了

https://drive.google.com/file/d/0B8Kf9Oy7K9sDakJCaTlkV2NaOXc/view?usp=sharin

<3 p="">或是直接複製以下的文字
::-webkit-scrollbar, .chat-interface{
  visibility: hidden;
}
 
/*背景透明, 字型設定, 字體加粗(關閉), 字體顏色(最適合老K的粉紅), 八向陰影(文字邊框)*/
body {
  background: rgba(0, 0, 0, 0) !important;
  /*font-family: 微軟正白體 !important;*/ /*聊天室文字字型*/
  /*font-family: 微軟正黑體 !important;  */
  /*font-weight: bold !important;*/
  font-weight: 700 !important; /*聊天室文字粗細,900為最粗*/
  color:#ffffff !important;
  text-shadow: 1px 0 0 #444, -1px 0 0 #444, 0 1px 0 #444, 0 -1px 0 #444, 1px 1px #444, -1px -1px 0 #444, 1px -1px 0 #444, -1px 1px 0 #444; !important;
}

.pinned-cheer__top-bar { display:none !important; } 

/* 隱藏功能與對話區塊 */
.chat-header, .chat-interface .tse-scrollbar{
  display:none !important;
}
 
/* 底色透明化 */
.chat-container, .ember-chat-container{
  background: rgba(0, 0, 0, 0) !important;
}

/* 訊息欄:最小寬度, 至頂, 至底, 文字大小 */
.ember-chat, .chat-room, .chat-messages, .chat-line{
  min-width: 100px !important;
  top: 0px !important;
  bottom: 0px !important;
  font-size: 14px !important;
  padding: 3px 6px !important;
  /*line-height: 1.30em !important;*/ /*聊天室文字行高,1.05倍行高*/
  /*padding: .05em .05em !important;*/ /*聊天室文字與前後段距離,0.05倍行高*/
}

XGBoost (python3.5) (windows) (anaconda) plot_tree 修正

windows anaconda下載的XGBoost plot_tree default function畫出來只會顯示 f0, f1, f2......作為feature的切割 如上圖 參考了網路上的做法, 做了修正 1. 首先要建立一個fmap的文件 ...