2018年1月18日 星期四

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

windows anaconda下載的XGBoost
plot_tree default function畫出來只會顯示
f0, f1, f2......作為feature的切割
如上圖



參考了網路上的做法, 做了修正


1. 首先要建立一個fmap的文件

def ceate_feature_map(features):
    outfile = open('xgb.fmap', 'w')
    i = 0
    for feat in features:
        outfile.write('{0}\t{1}\tq\n'.format(i, feat))
        i = i + 1
    outfile.close()

ceate_feature_map(features_name)

這個features_name也就是你input data的title

2. 改寫plot_tree

原先的
plot_tree(xgbmodel, rankdir='LR')
後來的plot_tree多加一個引數
plot_tree(xgbmodel, rankdir='LR', fmap='xgb.fmap')

在網路上google到的大致上是這樣, 一般都說更新到最新版就有支援fmap這個功能
但是我這樣用了, 而且xgboost也是6.0版本
仍然不能使用
於是進去裡面看plot_tree裡面到底有沒有吃到fmap這個參數
最後

3. 改寫plotting裡面的to_graphviz function

原先的
tree = booster.get_dump()[num_trees]
完全沒有吃到fmap這個參數
建議可以改成這樣
if "fmap" in kwargs:
        tree = booster.get_dump(kwargs["fmap"])[num_trees]
    else:
        tree = booster.get_dump()[num_trees]

這樣畫出來的tree就能夠含有feature name的information了


其餘XGBoost入門詳解, 我認為這篇蠻值得參考的
https://hk.saowen.com/a/24b56c2fdf62f1a70dfa8e2f00917904097a9425225daf98526ea3d6293370db

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倍行高*/
}

2016年7月4日 星期一

Kalpha sample code -- 原型

因為twitch的聊天室是使用irc chat room,
基本上, twitch的聊天室好玩, 以及這麼多花樣的原因,
就是因為irc chat room非常好連接並獲取data,
所以這篇主要是介紹利用python socket連接irc chat room,
讓大家都可以基本的獲取聊天室的訊息, 並做出自己想要的robot,


sample code:

import socket

botnick    = "e4e2e7343"  #自己的名字
bufsize    = 2048
channel    = "#e4e2e7343"  #欲加入channel的名字
port       = 6667
server     = "irc.twitch.tv"
PASS = "oauth:*************" # your Twitch OAuth token
master     = "e4e2e7343"   #自己的名字
uname      = "e4e2e7343"   #自己的名字
realname   = "e4e2e7343"   #自己的名字

def JoinChan (chan):
    global ircsock
    ircsock.send ("JOIN "+ chan +"\n")

def Main():
    global ircsock
    
    #presetting, socket連線前的前置作業    
    ircsock = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
    ircsock.connect ((server, port))
    ircsock.send ("PASS {}\r\n".format(PASS).encode("utf-8"))
    ircsock.send ("USER " + uname + " 2 3 " + realname + "\n")
    ircsock.send ("NICK "+ botnick + "\n")
    
    #利用uname的帳號, 連線上channel
    JoinChan (channel)          

    #主要迴圈
    while True: 
        #接聽訊息
        ircmsg = ircsock.recv (bufsize)
        ircmsg = ircmsg.strip ('\n\r')

        #如果沒有收到訊息, Ping socket
        if ircmsg.find ("PING :") != -1:
            ping()
        else:
            #else這裡就是主要處理ircmsg的地方
            #一般需要做的事情就是先將user name與message分開, 在進行想要的處理
            print ircmsg

裡面大多沒甚麼問題, oauth token應該也都能google的到,
如果有不清楚地歡迎在底下留言,
希望大家都能做出自己理想的機器人,
其實還有很多需要處理的,
例如thread, exception等等
以後有更進一步的心得再上來分享,
也歡迎有神人們分享

2016年6月13日 星期一

[遊玩評論] 人中之龍0 -- 100分 (無可挑剔的動作劇情大作)

畫面     :   85
娛樂性 :   95
操作性 :   90
音樂     :   90
挑戰度 :   90
角色     :   100
題材     :   95






支線之龍 :  100
AV        :  100
甲甲     :   100





老K是第一次遊玩人中之龍系列,
以下是新手人龍評論, 請老手們手下留情

所有影片紀錄都在
http://ppt.cc/MB8vs


以下是不暴雷評論,
看了很多次其他實況主的實況以後,
覺得人龍0劇情支線等等都相當不錯,
人龍總共17章,
章章劇情環環相扣,
從頭鋪梗到最後,
如果沒事先看過劇情的人,
絕對會對於劇情的起承轉合發展大呼一驚,
精心巧妙的安排......在最後結局的時候讓你眼淚爆眶而出

再加上動作畫面與戰鬥音樂,
從頭到尾絕無冷場,

支線的部分充分發揮日本KUSO的精神,
如果要是主線劇情部分在差一點點,
我絕對會認為這支線才是人龍的本體,
保齡球, 棒球, SEGA懷舊大型電玩, 經營, Disco, KTV......等等等等的

最後我在觀眾的幫助下, 把支線都過完了
還挑戰了亞門,
不管在主線, 支線, 小遊戲, 打王上面都感到了滿足,
堪稱老K目前玩到最滿意的遊戲,
總共花了92小時



以下是堂島之龍Lv.1 難度Hard 快攻手打倒亞門創的影片

https://youtu.be/nWpT5sk_jKI

為了遊戲性, 以及挑戰自我, 老k決定只把傳說Lv.1點滿就挑戰亞門創

個人認為, 亞門創相對於亞門丈是比較好打的,
在他第一階段先拉遠距離, 有兩個優點,
1. 比較不容易被散砲彈打中, 有空間與反應可以閃
2. 遠距離他會放死光炮射你, 放死光砲的時候, 然後再使用快攻手快速進身揍他幾拳

第二階段也是快攻手有好處, 動作比較敏捷,
可以比他快吃到地上的藥瓶,

亞門丈......個人覺得我沒甚麼好展現的
因為找不到破綻,
只好用武器戰把它搞死 (遮臉)

2016年6月11日 星期六

[遊玩評論] Youtubers Life -- 80分 (跟得上時代的新經營類型遊戲)

畫面     :   65
娛樂性 :   85
操作性 :   85
音樂     :   60
挑戰度 :   70
角色     :   50
題材     :   90


BUG度 :  100
亂叫音量 :  100
打擊實況主信心:   100


老K在5月的時候就看到Youtubers Life覺得很新奇,
尤其身為一個實況主, 對於這種相同類型的經營遊戲更為好奇,
但是玩到一半發現, 其實這遊戲是做影片上傳, 並不是我們所謂的實況主

在結束人龍0之後, 就在6/10實況了這款遊戲, 以下為當天實況內容
https://www.twitch.tv/e4e2e7343/v/71586612
懶得看那麼長的話, 可以看看我們影片取名字的精華
(結果取名字是我覺得最好玩的)
https://www.youtube.com/watch?v=_HLXrCy3Dqo
(但......以上不代表本台立場.....只是為了增加遊戲性www)

這款遊戲有繁中介面, 對於英文不好的人相當和善,

其實這個遊戲並不難, 經過以前各種經營遊戲的訓練過後
(模擬城市, 便利商店, 夢幻西餐廳.....好啦我知道我很老)
了解了各個介面的使用方式以後, 應該可以上手
(其實都是觀眾教我的wwwww, 我常說 觀眾總是臥虎藏龍啊)

其實單就經營角度, 以及題材新穎度,
我個人蠻喜歡這款遊戲的, 399的價格也不算太貴,
不過大概就是個10~20小時可以玩完的遊戲,
變化性略低, 尤其是突發事件竟然有正確答案可以選,
但是隨著等級往上提升, 複雜度也跟著提升,
有更多事情等著處理, 是我喜歡這款遊戲的一個因素,

雖然很多人詬病他的畫面與人物常常鬼叫,
還有無止盡的bug, (畢竟還在開發階段嘛)
但是我覺得瑕不掩瑜,
我還是在關台之後默默創一隻腳色完到了凌晨5點


喜歡經營類的不妨試試看,
不過出DLC我不會買, 因為大概經營方式會差不多

對了, 建議實況主不要玩這款遊戲,
會嚴重打擊你的信心     GG




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

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