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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

机器学习【系列】之第六章随机森林模型

發布時間:2023/12/9 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习【系列】之第六章随机森林模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

機器學習【系列】之第六章隨機森林模型

第六章隨機森林模型


隨機森林模型

  • 機器學習【系列】之第六章隨機森林模型
  • 前言
  • 一、隨機森林模型的原理和代碼實現
    • 1.集成模型簡介
    • 2.隨機森林模型的基本原理
    • 3.隨機森林模型的代碼實現
  • 二、案例實戰:股票漲跌預測模型
    • 1.股票基本數據獲取
    • 2. 股票衍生變量生成
    • 3.多因子模型搭建
      • 1.引入需要用到的庫
      • 2.獲取數據
      • 3.提取特征變量和目標變量
      • 4.劃分訓練集和測試集
      • 5.搭建模型
    • 4.模型使用與評估
      • 1.預測下一天股價的漲跌情況
      • 2.模型準確度評估
      • 3.分析特征變量的特征重要性
    • 5.收益回測曲線繪制
  • 總結


前言

本章將介紹集成學習模型,集成學習采用的其實就是這一思想:將多個模型組合在一起,從而產生更強大的模型。本章要講解一個非常典型的集成學習模型-----隨機森林模型,并通過一個金融領域的應用----股票漲跌預測模型來鞏固所學知識。


提示:以下是本篇文章正文內容,下面案例可供參考

一、隨機森林模型的原理和代碼實現

1.集成模型簡介

集成學習模型使用一系列弱學習器(也稱基礎模型或基模型)進行學習,并將各個弱學習器的結果進行整合,從而獲得比單個學習器更好的學習效果。集成學習模型的常見算法有Bagging算法和Boosting算法。Bagging算法的典型機器學習模型為本章要講的隨機森林模型,而Boosting算法的典型機器學習模型則為下次要講到的AdaBoost,GBDT、XGBoost和LightGBM模型。

  • (1)Bagging算法

Bagging 算法的原理類似投票,每一個弱學習器都有一票,最終根據所有弱學習的投票,按照“少數服從多數”的原則產生最終的預測結果。具體來說,在分類問題中是用n個弱學習器投票的方式獲取最終的預測結果,在回歸問題中則是取n個弱學習器的平均值作為最終結果。

  • (2)Boosting算法
    Boosting算法的本質是將弱學習器提升為強學習器,它和Bagging算法的區別在于:Bagging算法對待所有的弱學習器都是一視同仁;而Boosting算法則會對弱學習器“區別對待”,通俗來講就是注重“培養精英”和“重視錯誤”。
    培養精英”就是每一輪訓練后對預測結果較為準確的弱學習器給予較大的權重,對表現不好的弱學習器則降低權重。這樣在最終預測時,“優秀模型”的權重是大的,相當于它可以投出多票,而“一般模型”只能投出一票或不能投票。
    重視錯誤”就是在每一輪訓練后改變訓練集的權重或概率分布,通過提高在前一輪被弱學習器預測錯誤的樣例的權值,降低前一輪被弱學習器預測正確的權值,來提高弱學習器對預測錯誤的數據的重視程度,從而提升模型的整體預測效果。

2.隨機森林模型的基本原理

隨機森林是(Random Forest)一種經典的Bagging模型,其若學習器為決策樹模型。隨機森林會在原始數據集中隨機抽樣,構成n個不同的樣本數據集,然后根據這些數據集搭建n個不同的決策樹模型,最后根據這些樣本數據集,然后根據這些數據集搭建n個不同的決策樹模型,最后根據這些決策樹模型的平均值(針對回歸模型)或者投票情況(針對分類模型)來獲取最終結果。為了保證模型的泛化能力(或者說通用能力),隨機森林模型在建立每棵樹時,往往會遵循“數據隨機”和“特征隨機”這兩個基本原則。

  • 數據隨機:從所有數據中有放回地隨機抽取數據作為其中一個決策樹模型的訓練數據。例如:有1000個原始數據,有放回地抽取1000次,構成一組新的數據,用于訓練一個決策樹模型。
  • 特征隨機:如果每個樣本的特征維度為M,指定一個常數k<M,隨機地從M個特征中選取k個特征。在使用Python構造隨機森林模型時,默認選取特征的個數k為 根號M。

3.隨機森林模型的代碼實現

# 隨機森林分類模型,弱學習器是分類決策樹模型 from sklearn.ensemble import RandomForestClassifier X = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]] y = [0, 0, 0, 1, 1] model = RandomForestClassifier(n_estimators=10, random_state=123) model.fit(X, y) print(model.predict([[5, 5]]))# 隨機森林回歸模型,弱學習器是回歸決策樹模型 from sklearn.ensemble import RandomForestRegressor X = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]] y = [1, 2, 3, 4, 5] model = RandomForestRegressor(n_estimators=10, random_state=123) model.fit(X, y) print(model.predict([[5, 5]]))

二、案例實戰:股票漲跌預測模型

1.股票基本數據獲取

#!/usr/bin/env python # -*- coding:utf-8 -*-import tushare as ts # 1.獲取日線行情數據 df = ts.get_hist_data("000002",start='2018-01-01',end="2019-01-31") # print(df.head())# 2.獲取分鐘級別的數據 df = ts.get_hist_data("000002",ktype='5') # print(df.head())# 3.獲取實時行情數據 df = ts.get_realtime_quotes("000002") # print(df.head()) df = df[["code","name","price","bid","ask","volume","amount","time"]] # print(df)# 4.獲取分筆數據 # 獲取歷史分筆數據,即每筆成交的數據 df = ts.get_tick_data("000002",date="2018-12-12",src="tt") # print(df) # 獲取當日每筆數據 df = ts.get_today_ticks("000002"); # print(df) # 獲取指數數據 df = ts.get_index() # print(df.head())

2. 股票衍生變量生成

# 1.獲取股票基本數據 df = ts.get_k_data("000002",start='2015-01-01',end="2019-12-31") df = df.set_index('date') # print(df.head())# 2.生成簡單衍生變量 df["close-open"] = (df["close"] - df["open"]) / df["open"] df["high-low"] = (df["high"] - df["low"]) / df["low"] df["pre_close"] = df["close"].shift(1) df["price_change"] = df["close"] - df["pre_close"] df["p_change"] = (df["close"]-df["pre_close"]) / df["pre_close"]*100 # print(df.head())# 3.生成移動平均指標MA值 df["MA5"]=df["close"].rolling(5).mean() df["MA10"]=df["close"].rolling(10).mean()df.dropna(inplace=True) # 刪除空值行,也可以寫成df = df.dropna() df["MA5"] = df["close"].sort_index().rolling(5).mean() # print(df.head())# 4.股票衍生變量生成庫TA_lib的安裝 import talib# 5.用TA—lib庫生成相對強弱指標RSI值 df["RSI"] = talib.RSI(df["close"],timeperiod=12)

RSI值能反映短期內股價漲勢相對于跌勢的強弱,幫助我們更更好地判斷股價的漲跌趨勢。RSI值越大,漲勢相對于跌勢越強,反之則漲勢相對于跌勢越弱。

# 6.用TA-lib庫生成動量指標MOM值 df["MoM"] = talib.MOM(df["close"],timeperiod=5) # MOM反映了一段時間內股價的漲跌速度# 7.用TA-lib庫生成指數移動平均值EMA df["EMA12"] = talib.EMA(df["close"],timeperiod=12) # 12日指數移動平均值 df["EMA26"] = talib.EMA(df["close"],timeperiod=26) # 26日指數移動平均值 # EMA和移動平均指標MA值有點類型,不過計算公式更復雜。EMA是一種趨勢指標。# 8.用TA-lib庫生成異同移動平均線MACD值 df["MACD"],df["MACDsignal"],df["MACDhist"] = talib.MACD(df["close"],fastperiod=6,slowperiod=12,signalperiod=9) #MACD是股票是市場上常用指標,它是基于EMA值得衍生變量。# 生成所有衍生變量數據并刪除空值后,打印tail()查看表格的最后5行。 print(df.tail())

3.多因子模型搭建

有了合適的數據之后,就可以進行模型的搭建了。本案例中的模型是根據多個特征進行搭建的,在量化金融領域稱為多因子模型。股票數據是時間序列數據,與之相關的一些數據處理工作和之前所講的模型稍有不同。下面先進行一些簡單的數據處理工作,再進行模型搭建。

1.引入需要用到的庫

import tushare as ts # 引入股票基本數據相關庫 import numpy as np # 引入科學計算相關庫 import pandas as pd # 引入科學計算相關庫 import talib # 引入股票衍生變量數據相關庫 import matplotlib.pyplot as plt # 引入繪圖相關庫 from sklearn.ensemble import RandomForestClassifier # 引入分類決策樹模型 from sklearn.metrics import accuracy_score # 引入預測準確度評分函數

2.獲取數據

# 1.股票基本數據獲取 df = ts.get_k_data("000002",start='2015-01-01',end='2020-11-14') df = df.set_index("date")# 2.簡單衍生變量數據構造 df["close-open"] = (df["close"] - df["open"]) / df["open"] df["high-low"] = (df["high"] - df["low"]) / df["low"] df["pre_close"] = df["close"].shift(1) df["price_change"] = df["close"] - df["pre_close"] df["p_change"] = (df["close"]-df["pre_close"]) / df["pre_close"]*100# 3.移動平均線相關數據構造 df["MA5"] = df["close"].rolling(5).mean() df["MA10"] = df["close"].rolling(10).mean() df.dropna(inplace=True)# 4.通過TA_lib庫構造衍生變量數據 df["RSI"] = talib.RSI(df["close"],timeperiod=12) df["MoM"] = talib.MOM(df["close"],timeperiod=5) df["EMA12"] = talib.EMA(df["close"],timeperiod=12) # 12日指數移動平均值 df["EMA26"] = talib.EMA(df["close"],timeperiod=26) # 26日指數移動平均值 df["MACD"],df["MACDsignal"],df["MACDhist"] = talib.MACD(df["close"],fastperiod=6,slowperiod=12,signalperiod=9) df.dropna(inplace=True)

3.提取特征變量和目標變量

X = df[["close","volume","close-open","MA5","MA10","high-low","RSI","MoM","EMA12","MACD","MACDsignal","MACDhist"]] y = np.where(df["price_change"].shift(-1)>0,1,-1)

4.劃分訓練集和測試集

X_length = X.shape[0] split = int(X_length * 0.5) X_train,X_test = X[:split],X[split:] y_train,y_test = y[:split],y[split:]

5.搭建模型

model = RandomForestClassifier(max_depth=3,n_estimators=10,min_samples_leaf=10,random_state=1) model.fit(X_train,y_train)

4.模型使用與評估

1.預測下一天股價的漲跌情況

y_pred = model.predict(X_test) a = pd.DataFrame() a["預測值"] = list(y_pred) a["實際值"] = list(y_test)# 用predict_proba()函數可以預測屬于各個分類的概率 y_pred_proba = model.predict_proba(X_test)

2.模型準確度評估

from sklearn.metrics import accuracy_score score = accuracy_score(y_pred,y_test)model.score(X_test,y_test)

3.分析特征變量的特征重要性

features = X.columns importances = model.feature_importances_ a = pd.DataFrame() a["特征"] = features a["特征重要性"] = importances a = a.sort_values("特征重要性",ascending=False) print(a)

5.收益回測曲線繪制

這里主要用到了累乘函數cumprod()

X_test["prediction"] = model.predict(X_test) X_test["p_change"] = (X_test["close"] - X_test["close"].shift(1)) / X_test["close"].shift(1) X_test["origin"] = (X_test["p_change"]+1).cumprod() X_test["strategy"] = (X_test["prediction"].shift(1) * X_test["p_change"]+1).cumprod()X_test[["strategy","origin"]].dropna().plot() plt.gcf().autofmt_xdate() plt.show()

總結

參考書籍:《Python大數據分析與機器學習商業案例實戰》

總結

以上是生活随笔為你收集整理的机器学习【系列】之第六章随机森林模型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。