Python随机森林模型的基本原理和代码实现【附代码】

目录

1、随机森林模型的基本原理和代码实现

(1)集成模型简介

1、Bagging算法

1、Boosting算法

(2)随机森林模型的基本原理

2、量化金融 - 股票数据获取

(1)股票基本数据获取

(2)Tushare库的基本介绍

1、获得日线行情数据

2、想调取超过3年的日线级别数据

3、获得分钟级别的数据

4、获得分笔数据

5、获得指数信息

(3)股票衍生变量生成

1、生成股票基本数据

2、简单衍生变量的计算

3、移动平均线指标MA值

3、量化金融 - 股票涨跌预测模型搭建

(1)多因子模型搭建

1、引入需要用到的库

2、股票数据处理与衍生变量生成

3、特征变量和目标变量提取

4、训练集和测试集数据划分

5、模型搭建

(2)模型使用与评估

1、预测下一天的涨跌情况

2、分析数据特征的重要性

(3)参数调优

(4)收益回测曲线绘制


1、随机森林模型的基本原理和代码实现

(1)集成模型简介

       集成学习模型是机器学习非常重要的一部分。集成学习是使用一系列的弱学习器(或称之为基础模型)进行学习,并将各个弱学习器的结果进行整合从而获得比单个学习器更好的学习效果的一种机器学习方法。

       集成学习模型有两种常见的算法:

Bagging 算法 的典型机器学习模型为本章所讲的随机森林模型
Boosting 算法 的典型机器学习模型则为下两章会讲到的 AdaBoost GBDT XGBoost LightGBM 模型。
1、Bagging算法

       Bagging的想法是采用类似于“民主投票”的方式,即每一个基础模型都有一票,最终结果通过所有基础模型投票,少数服从多数的原则产生预测结果。

       原理:从原始训练数据中(假设共有10000条数据),随机有放回地抽取10000次数据构成一个新的数据集(因为是随机有放回抽样,所以可能出现某一条数据多次被抽中,也有可能某一条数据一次也没有被抽中),每次使用一个训练样本训练一个基础模型。这样进行有放回的随机抽取n次后,训练结束时我们就能获得n个由不同的数据集训练的基础模型,也称之为n个弱学习器,根据这n个弱学习器的结果,我们可以获得一个更加准确合理的结果。

1、Boosting算法

       Boosting算法的本质是将弱学习器提升为强学习器,它和Bagging的区别在于,Bagging对待所有的基础模型一视同仁。而Boosting则做到了对于基础模型的“区别对待”,通俗来讲,Boosting算法注重“培养精英”和“重视错误”。“培养精英”,即每一轮对于预测结果较为准确的基础模型,会给予它一个较大的权重,表现不好的基础模型则会降低它的权重。这样在最终预测时,“优秀模型”的权重是大的,相当于它可以投出多票,而“一般模型”只能在投票时投出一票或不能投票。“重视错误”,即在每一轮训练后改变训练数据的权值或概率分布,通过提高那些在前一轮被基础模型预测错误样例的权值,减小前一轮预测正确样例的权值,来使得分类器对误分的数据有较高的重视程度,从而提升模型的整体效果。

(2)随机森林模型的基本原理

       随机森林Random Forest)是一种经典的Bagging模型,其弱学习器为决策树模型。如下图所示,随机森林模型会在原始数据集中随机抽样,构成n个不同的样本数据集,然后根据这些数据集搭建n个不同的决策树模型,最后根据这些决策树模型的平均值(针对回归模型)或者投票(针对分类模型)情况来获取最终结果。

       随机森林分类模型代码演示如下所示:

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]]))

      随机森林分类模型代码演示如下所示:

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]]))

2、量化金融 - 股票数据获取

(1)股票基本数据获取

       想要搭建机器学习模型,首先得有合适的数据,我们这里首先来演示股票基本数据的获取与股票衍生变量生成。我们会使用:Tushare库,应为它是一个免费的财经数据接口包,通过它我们能够免费地调用历史行情数据来进行分析。其官方地址为:Tushare -财经数据接口包,如果是想查看股价行情数据,网址为:TuShare -财经数据接口包

Python安装Tushare库(可以使用PIP安装法来安装):

          1.通过win +R组合键调出运行框,

          2.输入cmd后回车,

          3.然后在弹出框中输入pip install tushare的方法来进行安装。

(2)Tushare库的基本介绍

1、获得日线行情数据

       使用tushare试着调用万科的历史数据:万科的股票代码为000002start的意思是开始日期,end是最终日期,具体代码如下(注意:如不写startendPython会从当天往前3年的数据):

import tushare as ts
df = ts.get_hist_data('000002', start='2018-01-01', end='2019-01-31')
df.head()

以下是Python中使用随机森林进行分类模型代码示例: ```python from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split # 创建随机森林分类器 forest = RandomForestClassifier() # 将数据集分为训练集测试集 x_train, x_test, y_train, y_test = train_test_split(features, labels, test_size=0.2, random_state=42) # 在训练集上拟合模型 forest.fit(x_train, y_train) # 模型评估 score = forest.score(x_test, y_test) print(score) # 这里的score代表精确率(accuracy) # 模型预测 predictions = forest.predict(x_test) print(predictions) # 输出预测结果 # 计算模型运行的时间 import time start = time.time() predictions = forest.predict(x_test) end = time.time() print("模型运行时间:", end - start) ``` 随机森林是一个包含多个决策树的分类器,其输出的类别由各个树输出的类别的众数决定。你可以使用Scikit-learn库提供的RandomizedSearchCV类进行随机搜索,以找到最佳的超参数组合。以下是一个例子: ```python from sklearn.ensemble import RandomForestRegressor from sklearn.model_selection import RandomizedSearchCV # 定义参数网格 param_grid = { "n_estimators": np.arange(100, 2000, step=100), "max_features": ["auto", "sqrt", "log2"], "max_depth": list(np.arange(10, 100, step=10)) + [None], "min_samples_split": np.arange(2, 10, step=2), "min_samples_leaf": [1, 2, 4], "bootstrap": [True, False] } # 创建随机森林回归器 forest = RandomForestRegressor() # 进行随机参数调优 random_cv = RandomizedSearchCV(forest, param_grid, n_iter=100, cv=3, scoring="r2", n_jobs=-1) random_cv.fit(X, y) # 输出最佳参数 print("Best params:\n") print(random_cv.best_params_) ``` 希望这些代码对你有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [python大数据之随机森林(回归与分类)](https://blog.csdn.net/suren_jun/article/details/127287470)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值