日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

自己动手写一个印钞机 第二章

發(fā)布時(shí)間:2025/3/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自己动手写一个印钞机 第二章 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

作者:阿布?

未經(jīng)本人允許禁止轉(zhuǎn)載

ipython notebook git版本

目錄章節(jié)地址: 自己動(dòng)手寫(xiě)一個(gè)印鈔機(jī) 第一章 自己動(dòng)手寫(xiě)一個(gè)印鈔機(jī) 第二章 自己動(dòng)手寫(xiě)一個(gè)印鈔機(jī) 第三章 自己動(dòng)手寫(xiě)一個(gè)印鈔機(jī) 第四章 自己動(dòng)手寫(xiě)一個(gè)印鈔機(jī) 第五章 自己動(dòng)手寫(xiě)一個(gè)印鈔機(jī) 第六章 自己動(dòng)手寫(xiě)一個(gè)印鈔機(jī) 第七章

簡(jiǎn)書(shū)目錄章節(jié)地址: 自己動(dòng)手寫(xiě)一個(gè)印鈔機(jī) 第一章 自己動(dòng)手寫(xiě)一個(gè)印鈔機(jī) 第二章 自己動(dòng)手寫(xiě)一個(gè)印鈔機(jī) 第三章 自己動(dòng)手寫(xiě)一個(gè)印鈔機(jī) 第四章 自己動(dòng)手寫(xiě)一個(gè)印鈔機(jī) 第五章 自己動(dòng)手寫(xiě)一個(gè)印鈔機(jī) 第六章 自己動(dòng)手寫(xiě)一個(gè)印鈔機(jī) 第七章 自己動(dòng)手寫(xiě)一個(gè)印鈔機(jī) 附錄章

股票量化專(zhuān)題地址,請(qǐng)關(guān)注,謝謝!


非均衡勝負(fù)收益帶來(lái)的必然非均衡勝負(fù)比例,目標(biāo)由因子的能力解決一部分,模式識(shí)別提升關(guān)鍵的一部分

本章開(kāi)始說(shuō)文章的核心了,模式識(shí)別提升關(guān)鍵的一部分?本章的內(nèi)容主要是通過(guò)機(jī)器學(xué)習(xí)如svm,隨機(jī)森林等對(duì)stock模式識(shí)別的初步探索,俗稱(chēng)罪惡的第一步,但還是要堅(jiān)定的賣(mài)出,畢竟目標(biāo)是印鈔機(jī)

下面運(yùn)行因子對(duì)多年數(shù)據(jù)進(jìn)行回測(cè),模式識(shí)別中基本的需求就是生成訓(xùn)練集數(shù)據(jù)與測(cè)試集數(shù)據(jù),對(duì)訓(xùn)練集的數(shù)據(jù)抽取特質(zhì),總結(jié)規(guī)律,在測(cè)試集上指導(dǎo)交易,與沒(méi)有指導(dǎo)交易的測(cè)試集進(jìn)行比對(duì),查看效果。

BuyGoldenFactor.g_enable_filter_ml = True # 回測(cè)因子的歷史且結(jié)果集加入機(jī)器學(xué)習(xí)需要的數(shù)據(jù) BuyGoldenFactor.g_enable_snap = True # 生成交易這一時(shí)刻60日?qǐng)D像,為深度學(xué)習(xí)準(zhǔn)備, 詳情見(jiàn)第四章 buy_factors = [{'XD': 42, 'class': BuyGoldenFactorClass, 'draw': True}]# n_folds: 6年數(shù)據(jù)回測(cè)生成五年單子 # train_test_split:回測(cè)時(shí)預(yù)留一份stock代碼表作為測(cè)試集,生成9份訓(xùn)練集,當(dāng)use_last_test為T(mén)rue 時(shí)只用一份測(cè)試stock代碼表進(jìn)行因子回測(cè) # ret_cnt_need = 0:回測(cè)所有stock out, orders_pd_train_snap = MetricsManger.make_metrics_rsc_mul_symbol_grid(buy_factors, n_folds=6, score_type=METRICSTYPE.SYSMBOL_R_SCORES_GOLDEN.value, ret_cnt_need=0, train_test_split=True, use_last_test=False, force_one_process=False)pd.options.display.max_columns = 40 orders_pd_train_snap.tail(2) # 看看添加了提供機(jī)器學(xué)習(xí)數(shù)據(jù)的pandas

由于簡(jiǎn)書(shū)不支持html的表格,完整表格請(qǐng)查閱git上完整版ipython notebook


這些特征都是什么比如deg_windowPd就是買(mǎi)入stock這一天前42天k線圖的線性擬合斜率,deg_hisWindowPd是252天k線圖的線性擬合斜率,它們代表了買(mǎi)入前stock的一種狀態(tài)也就能代表一種特征,你可以理解為這些特征都是發(fā)生交易前的一些狀態(tài)的量化值特征,暫時(shí)沒(méi)有必要全部深入了解,知道是特征就行。

下面生成測(cè)試集數(shù)據(jù)

BuyGoldenFactor.g_enable_fiter = False BuyGoldenFactor.g_enable_snap = True buy_factors = [{'XD': 42, 'class': BuyGoldenFactorClass, 'draw': True}] out, orders_pd_test = MetricsManger.make_metrics_rsc_mul_symbol_grid(buy_factors, n_folds=6, score_type=METRICSTYPE.SYSMBOL_R_SCORES_GOLDEN.value, ret_cnt_need=0, train_test_split=False, use_last_test=True, force_one_process=False)
orders_pd_train_snap.shape, orders_pd_test_snap.shape# out((44412, 32), (4956, 32))

對(duì)訓(xùn)練集及測(cè)試集的結(jié)果進(jìn)行大體的度量:主要就是看看非均衡勝負(fù)收益帶來(lái)的必然非均衡勝負(fù)比例,目標(biāo)由因子的能力解決一部分效果怎么樣

train_ump = UmpMainClass(orders_pd_train_snap, MlFiterGoldenPdClass) train_ump.show_general()# outall fit order = (41225, 32)win rate = 0.493559733172profit_cg.sum() = 281.687935222win mean = 0.0770327160087 loss_mean = -0.061738192442

test_ump = UmpMainClass(orders_pd_test_snap, MlFiterGoldenPdClass) test_ump.show_general()# outall fit order = (4612, 32)win rate = 0.5profit_cg.sum() = 37.4002795407win mean = 0.076550446692 loss_mean = -0.0605681543452

顯示在所有有結(jié)果的單子中勝率可以接近一半,且每次贏的0.07比沒(méi)次輸?shù)?.06多, 但是貪婪的我仍然認(rèn)為有優(yōu)化空間,這個(gè)空間就是利用這個(gè)因子產(chǎn)生的輸出數(shù)據(jù) 作為特征識(shí)別基礎(chǔ),提煉特征,指導(dǎo)交易,

模式識(shí)別提升關(guān)鍵的一部分

下面我們看看如何做到的呢

首先確認(rèn)ml封裝庫(kù)是否能正常運(yùn)行

test_fiter_more = MlFiterClass.create_test_more_fiter()

學(xué)習(xí)曲線

test_fiter_more.estimator.logistic_regression() test_fiter_more.plot_learning_curve()

特征權(quán)重

test_fiter.importances_coef_pd()

樹(shù)邏輯圖

test_fiter.plot_graphviz_tree()

混淆矩陣

test_fiter_more.plot_confusion_matrices()# out[[453 96][100 242]]

roc

test_fiter_more.plot_roc_estimator()

特征選擇

test_fiter_more.feature_selection()# outRFE selectionranking supportSibSp 1 TrueParch 1 TrueCabin_No 1 TrueCabin_Yes 6 FalseEmbarked_C 2 FalseEmbarked_Q 5 FalseEmbarked_S 3 FalseSex_female 8 FalseSex_male 1 TruePclass_1 4 FalsePclass_2 7 FalsePclass_3 1 TrueAge_scaled 1 TrueFare_scaled 1 TrueRFECV selectionranking supportSibSp 1 TrueParch 2 FalseCabin_No 1 TrueCabin_Yes 7 FalseEmbarked_C 3 FalseEmbarked_Q 8 FalseEmbarked_S 4 FalseSex_female 1 TrueSex_male 9 FalsePclass_1 5 FalsePclass_2 6 FalsePclass_3 1 TrueAge_scaled 1 TrueFare_scaled 1 True

決策邊界

test_fiter.plot_decision_function()

train test score

test_fiter_more.cross_val_accuracy_score()# outaccuracy mean: 0.776812507093array([ 0.75555556, 0.72222222, 0.73033708, 0.75280899, 0.83146067,0.78651685, 0.80898876, 0.71910112, 0.82022472, 0.84090909])

切換使用其它學(xué)習(xí)方法

test_fiter_more.estimator.adaboost_classifier() test_fiter_more.cross_val_accuracy_score()# outaccuracy mean: 0.810433548973array([ 0.78888889, 0.78888889, 0.78651685, 0.80898876, 0.84269663,0.78651685, 0.82022472, 0.82022472, 0.79775281, 0.86363636])

可以證明封裝庫(kù)沒(méi)有問(wèn)題,可以放心使用,下一步上真正的stock數(shù)據(jù)

由252,60, 42天組成的走勢(shì)數(shù)劇作為特質(zhì)開(kāi)始

from MlFiterDegPd import MlFiterDegPdClass deg = MlFiterDegPdClass(orderPd=orders_pd_train_snap) deg.df.head()

deg().estimator.svc() deg().cross_val_accuracy_score()# outaccuracy mean: 0.491279520472array([ 0.48920689, 0.51758428, 0.49987873, 0.49551298, 0.48168809,0.4887218 , 0.47610963, 0.47355653, 0.4853191 , 0.50521718])

0.49的準(zhǔn)確率,相當(dāng)于是亂猜 是不是特征選擇的不好呢,換一些特征試試

from MlFiterMainPd import MlFiterMainPdClass main = MlFiterMainPdClass(orderPd=orders_pd_train_snap) main.df.head()

main().cross_val_accuracy_score()# outaccuracy mean: 0.493608245706array([ 0.5008489 , 0.49890856, 0.49793839, 0.48678147, 0.50303177,0.47125879, 0.49648314, 0.49369238, 0.49332686, 0.49381218])

0.49的準(zhǔn)確率,還是亂猜 是不是特征太少了,構(gòu)建一個(gè)特征多的試試

from MlFiter import MlFiterClass order_has_ret = orders_pd_train_snap[(orders_pd_train_snap.result <> 0)]all_pd = order_has_ret.filter(['result', 'deg_hisWindowPd', 'deg_windowPd', 'deg_60WindowPd', 'atr_std', 'jump_power', 'diff_days', 'wave_score1', 'wave_score2', 'wave_score23']) train_np = all_pd.as_matrix() y = train_np[:, 0] x = train_np[:, 1:] all_filter = MlFiterClass(x, y, all_pd) all_pd.head()

# 這回使用隨機(jī)森林 all_filter.estimator.random_forest_classifier() all_filter.cross_val_accuracy_score()# outaccuracy mean: 0.505349477658array([ 0.48678147, 0.50788261, 0.53019646, 0.50497211, 0.51297599,0.46058695, 0.51564395, 0.50994663, 0.4942975 , 0.53021111])

0.50的準(zhǔn)確率,這算是有所提升嗎??

下面把數(shù)據(jù)離散化后,換種分類(lèi)器測(cè)試

deg = MlFiterDegPdClass(orderPd=orders_pd_train_snap, dummies=True, invoke_hmm=False,invoke_pca=False) deg.df.head()

由于簡(jiǎn)書(shū)不支持html的表格,完整表格請(qǐng)查閱git上完整版ipython notebook


上邊封住好了的,在離散值的選擇上不是瞎來(lái)的,會(huì)通過(guò)可視化來(lái)選擇離散值bins,通過(guò)數(shù)據(jù)來(lái)指導(dǎo)數(shù)據(jù)最終指導(dǎo)交易

deg().estimator.random_forest_classifier() deg().cross_val_accuracy_score()# outaccuracy mean: 0.487590577522array([ 0.48217317, 0.51564395, 0.4962406 , 0.49890856, 0.49745331,0.48338588, 0.49527043, 0.45414847, 0.44479495, 0.50788644])

結(jié)果還是亂猜

用其它等等方式仍然是胡猜,自己寫(xiě)的類(lèi)似adaboost依然效果很差, 通過(guò)非均衡概率降低假陽(yáng),提高假陰的方式,最后統(tǒng)計(jì)所有測(cè)試集樣本的判別概率發(fā)現(xiàn)其實(shí)還瞎猜

提高分類(lèi)數(shù)量,設(shè)置閥值,提高準(zhǔn)確率的方案

通過(guò)將profit cg qcut 100份分類(lèi)

orders_pd_train_snap.profit_cg.fillna(0, inplace=True) order_has_ret = orders_pd_train_snap[(orders_pd_train_snap.result <> 0)] n_class = 100 order_has_ret['class'] = pd.qcut(order_has_ret.profit_cg, n_class, labels=range(0, n_class)) order_has_ret['class'] = order_has_ret['class'].astype(int) ZLog.info(np.unique(order_has_ret['class']))deg_pd = order_has_ret.filter(['class', 'result', 'deg_hisWindowPd', 'deg_windowPd', 'deg_60WindowPd']) train_np = deg_pd.as_matrix() y = train_np[:, 0] x = train_np[:, 1:] deg = MlFiterClass(x, y, deg_pd, force_clf=True) deg_pd.head()

  • y為class train_test_split進(jìn)行分類(lèi)

  • 使用cv數(shù)據(jù)集的 predict < class閥值 使用result==0的情況查看概率

    from sklearn.cross_validation import train_test_split from sklearn.metrics import accuracy_score from sklearn.metrics import classification_report

    deg.estimator.random_forest_classifier()

    train_df, cv_df = train_test_split(deg.df, test_size=0.1, random_state=0)

    fiter = deg.get_fiter() fiter.fit(train_df.as_matrix()[:, 2:], train_df.as_matrix()[:, 0])

    predictions = fiter.predict(cv_df.as_matrix()[:, 2:])

    cv_df['predict'] = predictions cv_df.head()

cv_df['predict'].value_counts().sort_index().head(10)# out0.0 561.0 502.0 433.0 474.0 445.0 456.0 477.0 308.0 469.0 39Name: predict, dtype: int64
for threshold in np.arange(0, 10):ppv = cv_df[cv_df['predict'] <= threshold].result.value_counts()ZLog.info('threshold: {}, ppv: {}'.format(threshold, float(ppv[-1])/ppv.sum()))# outthreshold: 0, ppv: 0.607142857143threshold: 1, ppv: 0.632075471698threshold: 2, ppv: 0.58389261745threshold: 3, ppv: 0.586734693878threshold: 4, ppv: 0.579166666667threshold: 5, ppv: 0.571929824561threshold: 6, ppv: 0.551204819277threshold: 7, ppv: 0.541436464088threshold: 8, ppv: 0.526960784314threshold: 9, ppv: 0.523489932886

threshold: 0,1,達(dá)到0.6了 但是數(shù)量上只有100多個(gè),之后會(huì)有使用gmm-hmm的方式繼續(xù)擴(kuò)展這種思路,提高收益

只能說(shuō)最后一種的這個(gè)思想可以作為擴(kuò)展使用,實(shí)際中由于 '非均衡勝負(fù)收益' 很難帶來(lái)質(zhì)的好轉(zhuǎn),突然想到阿西莫夫的小說(shuō)基地,對(duì)心理史學(xué)的最開(kāi)始的評(píng)估,‘可能但是不可行’,我們的印鈔機(jī)之路是否也是這樣呢,下一章開(kāi)始就是真正的印鈔機(jī)之路了,一個(gè)即可能又可行之路!!! 下一章開(kāi)始將使用深度學(xué)習(xí)方法來(lái)訓(xùn)練數(shù)據(jù),提高勝率主要是卷機(jī)神經(jīng)網(wǎng)絡(luò)的使用


下一章地址 自己動(dòng)手寫(xiě)一個(gè)印鈔機(jī) 第三章


感謝?您能有耐心看到這里

如果有什么問(wèn)題可以加阿布的微信

微信號(hào):aaaabbbuu

轉(zhuǎn)載于:https://my.oschina.net/u/577691/blog/776216

總結(jié)

以上是生活随笔為你收集整理的自己动手写一个印钞机 第二章的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。