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
2018年1月18日 星期四
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
又或者說, 我又更了解了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
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等等
以後有更進一步的心得再上來分享,
也歡迎有神人們分享
基本上, 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等等
以後有更進一步的心得再上來分享,
也歡迎有神人們分享
訂閱:
文章 (Atom)
XGBoost (python3.5) (windows) (anaconda) plot_tree 修正
windows anaconda下載的XGBoost plot_tree default function畫出來只會顯示 f0, f1, f2......作為feature的切割 如上圖 參考了網路上的做法, 做了修正 1. 首先要建立一個fmap的文件 ...
-
http://10fastfingers.com/typing-test/traditional-chinese 是否大家跟我一樣,每次總是在104要填中打速度的時候亂填一通, 不如就來實際上測測看吧!! 我用舊注音的中打是每分鐘75~80個字 他還會統計告訴你比多...
-
這個標題又是下的有點Tizzy Bac風格, 話說起來我真的是愛Tizzy Bac愛的有點過頭了, 昨天跟家人一同去吃火鍋(鍋神創始店就在我家附近), 託鍋神太有名之福,我才有機會聽到這麼有趣的一段對話, 是一個家庭(一對父母與兩個小孩) 小孩A:我要吃蟹肉棒,金針菇...
