精华内容
下载资源
问答
  • 随机森林模型

    2021-03-21 22:32:51
    随机森林模型集成模型简介Bagging算法Boosting算法随机森林模型1、基本原理1、数据随机2、特征随机随机森林的代码实现 集成模型简介 集成学习模型使用一系列弱学习器(基础模型或者基模型)进行学习。将各个弱学习器...

    集成模型简介

    集成学习模型使用一系列弱学习器(基础模型或者基模型)进行学习。将各个弱学习器的结果进行整合,从而达到比单个学习器更好的学习效果。常见的算法有bagging算法和boosting算法。随机森林就是典型的bagging算法,而boosting算法的典型学习模型有Adaboost、GBDT、XGBoost、LightGBM。

    Bagging算法

    bagging算法原理类似投票,每次使用一个训练集训练一个弱学习器,有放回地随机抽取n次后,根据不同的训练集训练出n个弱学习器。对于分类问题,根据所有的弱学习器的投票,进行“少数服从多数”的原则进行最终预测结果。对于回归问题,采取所有学习器的平均值作为最终结果。

    Boosting算法

    Boosting算法本质是将弱学习器提升至强学习器。它和bagging算法区别在于,bagging算法对待所有的弱学习器一视同仁,而boosting算法则对弱学习器区别对待,改变弱学习器的权重。具体表现在:1、在每一论训练后对预测结果较准确的弱学习器给予较大权重,对不好的弱学习器降低权重。2、在每一轮训练后改变训练集的权值或概率分布。通过提高前一轮被弱学习器预测错误的样例的权值,降低前一轮被弱学习器预测正确的样例权值。提高若学器对预测错误的数据的重视程度。

    随机森林模型

    1、基本原理

    随机森林(random forest)是一种经典的bagging模型,其弱学习器为决策树模型。为了保证模型的泛化能力,在建立每棵树时,遵循“数据随机”和“特征随机”两个基本原则。

    1、数据随机

    从所有数据中有放回地随机抽取数据作为其中一个决策树模型的训练数据。

    2、特征随机

    假设每个样本的维度为M,指定一个常数k<M,随机地从M个特征中选取k个特征,在使用python构造随机森林模型,默认选取特征的个数k为√M。

    随机森林的代码实现

    随机森林分类模型的弱学习器是分类决策树模型,随机森林回归模型的弱学习器是回归决策树模型。

    ####随机森林0-1分类模型
    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]]))
    

    n_estimators:若学习器的数量
    random_state:随机种子,

    ###随机森林回归模型
    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、引入所需要的库

    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  # 引入准确度评分函数
    import warnings
    warnings.filterwarnings("ignore") # 忽略警告信息,警告非报错,不影响代码执行
    

    2、获取数据

    # 1.股票基本数据获取
    df = ts.get_k_data('000002',start='2015-01-01',end='2019-12-31')
    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=12, slowperiod=26, signalperiod=9)  # MACD值
    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]  # shape属性获取X的行数和列数,shape[0]即表示行数 
    split = int(X_length * 0.9)
    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)
    

    完整的RandomForestClassifier参数

    RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None,
                           criterion='gini', max_depth=3, max_features='auto',
                           max_leaf_nodes=None, max_samples=None,
                           min_impurity_decrease=0.0, min_impurity_split=None,
                           min_samples_leaf=10, min_samples_split=2,
                           min_weight_fraction_leaf=0.0, n_estimators=10,
                           n_jobs=None, oob_score=False, random_state=1, verbose=0,
                           warm_start=False)
    

    6、预测

    y_pred = model.predict(X_test)
    a = pd.DataFrame()  # 创建一个空DataFrame 
    a['预测值'] = list(y_pred)
    a['实际值'] = list(y_test)
    

    在这里插入图片描述
    用pridict_paoba()函数科研预测各个分类的概率

    # 查看预测概率
    y_pred_proba = model.predict_proba(X_test)
    y_pred_proba[0:5]
    

    7、模型准确度评估

    from sklearn.metrics import accuracy_score
    score = accuracy_score(y_pred, y_test)
    # 此外,我们还可以通过模型自带的score()函数记性打分,代码如下:
    model.score(X_test, y_test)
    

    8、分析特征变量的特征重要性

    model.feature_importances_
    # 通过如下代码可以更好的展示特征及其特征重要性:
    features = X.columns  
    importances = model.feature_importances_
    a = pd.DataFrame()
    a['特征'] = features
    a['特征重要性'] = importances
    a = a.sort_values('特征重要性', ascending=False)
    

    在这里插入图片描述

    参数调优

    from sklearn.model_selection import GridSearchCV  # 网格搜索合适的超参数
    # 指定分类器中参数的范围
    parameters = {'n_estimators':[5, 10, 20], 'max_depth':[2, 3, 4, 5], 'min_samples_leaf':[5, 10, 20, 30]}
    new_model = RandomForestClassifier(random_state=1)  # 构建分类器
    grid_search = GridSearchCV(new_model, parameters, cv=6, scoring='accuracy')  # cv=6表示交叉验证6次,scoring='roc_auc'表示以ROC曲线的AUC评分作为模型评价准则, 默认为'accuracy', 即按准确度评分,设置成'roc_auc'表示以ROC曲线的auc值作为评估标准
    grid_search.fit(X_train, y_train)  # 传入数据
    grid_search.best_params_  # 输出参数的最优值
    

    参数调优的最终结果
    9、 收益回测曲线绘制

    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']].tail()
    

    在这里插入图片描述

    # 通过如下代码将收益情况删除空值后可视化,并设置X轴刻度自动倾斜:
    X_test[['strategy', 'origin']].dropna().plot()
    plt.gcf().autofmt_xdate()
    plt.show()
    

    在这里插入图片描述

    展开全文
  • 随机森林模型解释_随机森林解释

    千次阅读 2020-10-12 11:16:33
    随机森林模型解释In this post, we will explain what a Random Forest model is, see its strengths, how it is built, and what it can be used for.在这篇文章中,我们将解释什么是随机森林模型,了解其优势,...

    随机森林模型解释

    In this post, we will explain what a Random Forest model is, see its strengths, how it is built, and what it can be used for.

    在这篇文章中,我们将解释什么是随机森林模型,了解其优势,如何构建以及可用于什么。

    We will go through the theory and intuition of Random Forest, seeing the minimum amount of maths necessary to understand how everything works, without diving into the most complex details.

    我们将通过“随机森林”的理论和直觉,了解在不深入了解最复杂细节的情况下了解所有工作原理所需的最少数学量。

    Let’s get to it!

    让我们开始吧!

    1.简介 (1. Introduction)

    In the Machine Learning world, Random Forest models are a kind of non parametric models that can be used both for regression and classification. They are one of the most popular ensemble methods, belonging to the specific category of Bagging methods.

    在机器学习世界中,随机森林模型是一种参数模型,可用于回归和分类。 它们是最流行的合奏方法之一,属于Bagging方法的特定类别。

    Ensemble methods involve using many learners to enhance the performance of any single one of them individually. These methods can be described as techniques that use a group of weak learners (those who on average achieve only slightly better results than a random model) together, in order to create a stronger, aggregated one.

    集成方法涉及使用许多学习者来分别提高其中任何一个学习者的表现。 这些方法可以描述为一种技术,它使用一组弱势学习者(那些学习者平均仅比随机模型获得更好的结果),以创建一个更强大的汇总者

    In our case, Random Forests are an ensemble of many individual Decision Trees. If you are not familiar with Decision Trees, you can learn all about them here:

    在我们的案例中,随机森林是许多单独的决策树的集合。 如果您不熟悉决策树,则可以在这里了解所有有关决策树的信息:

    One of the main drawbacks of Decision Trees is that they are very prone to over-fitting: they do well on training data, but are not so flexible for making predictions on unseen samples. While there are workarounds for this, like pruning the trees, this reduces their predictive power. Generally they are models with medium bias and high variance, but they are simple and easy to interpret.

    决策树的主要缺点之一是它们很容易过度拟合:它们在训练数据上表现出色,但是对于对看不见的样本进行预测并不那么灵活。 尽管有一些解决方法,例如修剪树木,但这会降低其预测能力。 通常,它们是具有中等偏差和高方差的模型,但是它们简单易懂。

    If you are not very confident with the difference between bias and variance, check out the following post:

    如果您对偏差和方差之间的差异不是很有把握,请查看以下文章:

    Random Forest models combine the simplicity of Decision Trees with the flexibility and power of an ensemble model. In a forest of trees, we forget about the high variance of an specific tree, and are less concerned about each individual element, so we can grow nicer, larger trees that have more predictive power than a pruned one.

    随机森林模型将决策树简单性与集成模型的灵活性和强大功能相结合。 在一片森林中,我们会忘记一棵特定树木的高变异性,而不必担心每个元素,因此我们可以种植更好的,更大的树木,比修剪的树木具有更大的预测能力。

    Al tough Random Forest models don’t offer as much interpret ability as a single tree, their performance is a lot better, and we don’t have to worry so much about perfectly tuning the parameters of the forest as we do with individual trees.

    严格的随机森林模型没有提供像单棵树那么多的解释能力,它们的性能要好得多,而且我们不必像单独树一样担心完美调整森林的参数。

    Okay, I get it, a Random Forest is a collection of individual trees. But why the name Random? Where is the Randomness? Lets find out by learning how a Random Forest model is built.

    好的,我明白了,随机森林是单个树木的集合。 但是为什么命名为Random? 随机性在哪里? 通过学习如何建立随机森林模型来找出答案。

    2.训练和建立随机森林 (2. Training and Building a Random Forest)

    Building a random Forest has 3 main phases. We will break down each of them and clarify each of the concepts and steps. Lets go!

    建立随机森林有3个主要阶段。 我们将分解每个概念,并阐明每个概念和步骤。 我们走吧!

    2.1为每棵树创建一个引导数据集 (2.1 Creating a Bootstrapped Data Set for each tree)

    When we build an individual decision tree, we use a training data set and all of the observations. This means that if we are not careful, the tree can adjust very well to this training data, and generalise badly to new, unseen observations. To solve this issue, we stop the tree from growing very large, usually at the cost of reducing its performance.

    当我们建立一个单独的决策树时,我们使用训练数据集和所有观察值。 这意味着,如果我们不小心,则树可以很好地适应此训练数据,并严重地推广到新的,看不见的观测结果。 为了解决此问题,我们通常以降低其性能为代价,阻止树变得很大。

    To build a Random Forest we have to train N decision trees. Do we train the trees using the same data all the time? Do we use the whole data set? Nope.

    要建立一个随机森林,我们必须训练N个决策树。 我们是否一直使用相同的数据训练树木? 我们是否使用整个数据集? 不。

    This is where the first random feature comes in. To train each individual tree, we pick a random sample of the entire Data set, like shown in the following figure.

    这是第一个随机特征出现的地方。要训练每棵树,我们选择整个数据集的随机样本,如下图所示。

    From looking at this figure, various things can be deduced. First of all, the size of the data used to train each individual tree does not have to be the size of the whole data set. Also, a data point can be present more than once in the data used to train a single tree (like in tree nº two).

    从这个数字看,可以得出各种结论。 首先,用于训练每棵单独的树的数据的大小不必一定是整个数据集的大小。 同样,一个数据点可以在用于训练单棵树的数据中不止一次出现(例如在第二棵树中)。

    This is called Sampling with Replacement or Bootstrapping: each data point is picked randomly from the whole data set, and a data point can be picked more than once.

    这称为替换或自举抽样:从整个数据集中随机抽取每个数据点,并且一个数据点可以被多次抽取。

    By using different samples of data to train each individual tree we reduce one of the main problems that they have: they are very fond of their training data. If we train a forest with a lot of trees and each of them has been trained with different data, we solve this problem. They are all very fond of their training data, but the forest is not fond of any specific data point. This allows us to grow larger individual trees, as we do not care so much anymore for an individual tree overfitting.

    通过使用不同的数据样本来训练每棵树,我们减少了它们的主要问题之一:他们非常喜欢他们的训练数据。 如果我们用许多树木训练一个森林,并且每个树木都接受了不同的数据训练,那么我们可以解决这个问题。 他们都很喜欢他们的训练数据,但是森林并不喜欢任何特定的数据点。 这使我们可以生长更大的单棵树,因为我们不再关心单个树的过度拟合。

    If we use a very small portion of the whole data set to train each individual tree, we increase the randomness of the forest (reducing over-fitting) but usually at the cost of a lower performance.

    如果我们使用整个数据集的一小部分来训练每棵树,则会增加森林的随机性(减少过度拟合),但通常以降低性能为代价。

    In practice, by default most Random Forest implementations (like the one from Scikit-Learn) pick the sample of the training data used for each tree to be the same size as the original data set (however it is not the same data set, remember that we are picking random samples).

    实际上,默认情况下,大多数随机森林实现(例如Scikit-Learn的实现)都会选择用于每棵树的训练数据的样本,使其大小与原始数据集的大小相同(但请注意,它不是同一数据集)我们正在挑选随机样本)。

    This generally provides a good bias-variance compromise.

    通常,这提供了良好的偏差方差折衷。

    2.2使用这些随机数据集训练树木,并通过特征选择增加一些随机性 (2.2 Train a forest of trees using these random data sets, and add a little more randomness with the feature selection)

    If you remember well, for building an individual decision tree, at each node we evaluated a certain metric (like the Gini index, or Information Gain) and picked the feature or variable of the data to go in the node that minimised/maximised this metric.

    如果您没记错的话,为了构建单独的决策树,我们在每个节点上评估了某个指标(如Gini索引或Information Gain),并选择了数据的特征或变量放入将指标最小化/最大化的节点中。

    This worked decently well when training only one tree, but now we want a whole forest of them! How do we do it? Ensemble models, like Random Forest work best if the individual models (individual trees in our case) are uncorrelated. In Random Forest this is achieved by randomly selecting certain features to evaluate at each node.

    仅训练一棵树时,这种方法效果很好,但是现在我们需要一整棵树! 我们该怎么做呢? 如果各个模型(在本例中为单个树)不相关,则像随机森林这样的集成模型最有效。 在随机森林中,这是通过随机选择某些要在每个节点上进行评估的特征来实现的。

    As you can see from the previous image, at each node we evaluate only a subset of all the initial features. For the root node we take into account E, A and F (and F wins). In Node 1 we consider C, G and D (and G wins). Lastly, in Node 2 we consider only A, B, and G (and A wins). We would carry on doing this until we built the whole tree.

    从上一张图像可以看到,在每个节点处,我们仅评估所有初始特征的一个子集。 对于根节点,我们考虑E,A和F(以及F获胜)。 在节点1中,我们考虑C,G和D(以及G获胜)。 最后,在节点2中,我们仅考虑A,B和G(而A获胜)。 我们将继续执行此操作,直到我们构建完整的树为止。

    By doing this, we avoid including features that have a very high predictive power in every tree, while creating many un-correlated trees. This is the second sweep of randomness. We do not only use random data, but also random features when building each tree. The greater the tree diversity, the better: we reduce the variance, and get a better performing model.

    通过这样做,我们避免在每棵树中包含具有很高预测能力的要素,同时创建许多不相关的树。 这是随机性的第二次扫描。 构建每棵树时,我们不仅使用随机数据,还使用随机特征。 树的多样性越大,越好:我们减少方差,并获得性能更好的模型。

    2.3对N棵树重复此操作,以创建我们的令人敬畏的森林。 (2.3 Repeat this for the N trees to create our awesome forest.)

    Awesome, we have learned how to build a single decision tree. Now, we would repeat this for the N trees, randomly selecting on each node of each of the trees which variables enter the contest for being picked as the feature to split on.

    太棒了,我们已经学习了如何构建单个决策树。 现在,我们将对N棵树重复此操作,在每棵树的每个节点上随机选择哪些变量进入竞赛以被选为分割要素。

    In conclusion, the whole process goes as follows:

    总之,整个过程如下:

    1. Create a bootstrapped data set for each tree.

      为每棵树创建一个引导数据集。
    2. Create a decision tree using its corresponding data set, but at each node use a random sub sample of variables or features to split on.

      使用其对应的数据集创建决策树,但在每个节点上使用随机的子变量或特征子样本进行分解。
    3. Repeat all these three steps hundreds of times to build a massive forest with a wide variety of trees. This variety is what makes a Random Forest way better than a single decision tree.

      重复执行所有这三个步骤数百次,以构建具有各种各样树木的大型森林。 这种多样性使“随机森林”方法比单个决策树更好。

    Once we have built our forest, we are ready to use it to make awesome predictions. Lets see how!

    建立森林后,我们就可以使用它做出令人敬畏的预测。 让我们看看如何!

    3.使用随机森林进行预测 (3. Making predictions using a Random Forest)

    Making predictions with a Random Forest is very easy. We just have to take each of our individual trees, pass the observation for which we want to make a prediction through them, get a prediction from every tree (summing up to N predictions) and then obtain an overall, aggregated prediction.

    使用随机森林进行预测非常容易。 我们只需要获取我们每棵单独的树,通过我们想要对其进行预测的观测值,从每棵树中获取一个预测(总计N个预测),然后获得总体的,汇总的预测。

    Bootstrapping the data and then using an aggregate to make a prediction is called Bagging, and how this prediction is made depends on the kind of problem we are facing.

    引导数据,然后使用聚合进行预测称为Bagging,如何进行此预测取决于我们面临的问题类型。

    For regression problems, the aggregate decision is the average of the decisions of every single decision tree. For classification problems, the final prediction is the most frequent prediction done by the forest.

    对于回归问题,总决策是每个决策树的决策的平均值。 对于分类问题,最终预测是森林所做的最频繁的预测。

    The previous image illustrates this very simple procedure. For the classification problem we want to predict if a certain patient is sick or healthy. For this we pass his medical record and other information through each tree of the random forest, and obtain N predictions (400 in our case). In our example 355 of the trees say that the patient is healthy and 45 say that the patient is sick, therefore the forest decides that the patient is healthy.

    上一张图片说明了此非常简单的过程。 对于分类问题,我们要预测某个患者是否生病或健康。 为此,我们通过随机森林的每棵树传递他的病历和其他信息,并获得N个预测(本例中为400个)。 在我们的示例中,有355棵树表示患者健康,而45棵树表示患者生病,因此森林确定该患者健康。

    For the regression problem we want to predict the price of a certain house. We pass the characteristics of this new house through our N trees, getting a numerical prediction from each of them. Then, we calculate the average of these predictions and get the final value of 322.750$.

    对于回归问题,我们要预测某个房屋的价格。 我们通过N棵树传递这栋新房子的特征,并从每棵树中获得数值预测。 然后,我们计算这些预测的平均值,得到最终值322.750 $。

    Simple right? We make a prediction with every individual tree and then aggregate these predictions using the mean (average) or the mode (most frequent value).

    简单吧? 我们对每棵树进行预测,然后使用均值(平均值)或众数(最频繁值)汇总这些预测。

    4.结论和其他资源 (4. Conclusion and other resources)

    In this post we have seen what a Random Forest is, how it overcomes the main issues of Decision Trees, how they are trained, and used to make predictions. They are very flexible and powerful Machine Learning models that are highly used in commercial and industrial applications, along with Boosting models and Artificial Neural Networks.

    在这篇文章中,我们了解了什么是随机森林,如何克服决策树的主要问题,如何训练决策树以及如何进行预测。 它们是非常灵活且功能强大的机器学习模型,与Boosting模型和人工神经网络一起广泛用于商业和工业应用中。

    On future posts we will explore tips and tricks of Random Forests and how they can be used for feature selection. Also, if you want to see precisely how they are built, check out the following video by StatQuest, its great:

    在以后的文章中,我们将探讨随机森林的技巧和窍门,以及如何将其用于特征选择。 另外,如果您想确切地了解它们的构建方式,请观看StatQuest的以下视频,它很棒:

    That is it! As always, I hope you enjoyed the post. If you did feel free to follow me on Twitter at @jaimezorno. Also, you can take a look at my other posts on Data Science and Machine Learning here, and subscribe to my newsletter to get awesome goodies and notifications on new posts!

    这就对了! 一如既往,希望您喜欢这个职位。 如果您愿意在Twitter上关注我,请访问@jaimezorno 此外,您还可以看看我的关于数据科学和机器学习等职位这里,和订阅我的通讯,以获得新的职位真棒糖果和通知!

    For further resources on Machine Learning and Data Science check out the following repository: How to Learn Machine Learning!

    有关机器学习和数据科学的更多资源,请查看以下存储库:如何学习机器学习

    翻译自: https://towardsdatascience.com/random-forest-explained-7eae084f3ebe

    随机森林模型解释

    展开全文
  • 随机森林模型的原理

    千次阅读 2019-01-01 14:46:09
    随机森林模型是集成模型的一种,它是由众多决策树集成得到的。 背景 当我们使用决策树模型的时候,会很容易发现它是易于过拟合的,对于决策树的过拟合有很多处理方法,譬如各种剪枝技术,而集成技术同样能够处理这...

    随机森林模型是集成模型的一种,它是由众多决策树集成得到的。

    背景

    当我们使用决策树模型的时候,会很容易发现它是易于过拟合的,对于决策树的过拟合有很多处理方法,譬如各种剪枝技术,而集成技术同样能够处理这一问题。我们通过集成技术生成各种不同的决策树,并综合考虑它们的预测结果,这样能够减少过拟合的出现机率。所以我认为训练随机森林模型的关键就在于如何产生不同形态的决策树

     

    Bootstrap采样

    为了产生多种多样的决策树模型,我们会对数据进行采样,这样我们选用了Bootstrap采样技术,假设有n个样本可供训练,我们通过bootstrap技术对训练集进行n次采样,每次都从训练集中选择一个样本记录下索引并放回到训练集,这样我们最终得到的训练单颗决策树的模型也有n个样本,但是可能会有重复的样本存在,这样就保证了训练每颗决策树的数据集是不同的,从而产生不同形态的决策树。

     

    Max_features

    在训练时我们通过控制max_features参数来指定决策树只能选定部分特征进行划分数据集,

    max_features = 1: 在每一层划分节点都是随机选择一个特征进行划分,这样就会生成很复杂的决策树,同时会使得各个决策树是不同的;

    max_features = n_features: 在每一层划分节点时都是对所有的特征计算划分指标然后选择最好的一个特征进行划分,这样是不利于随机森林模型的,因为生成的多颗决策树形态高度相似,集成无效化;

     

    Sklearn API

    sklearn.ensemble.RandomForestClassifier

     

    优缺点比较

    优点

                              缺点

    • 易于使用,表现出色
    • 不需要特征归一化
    • 能处理混合类型的特征
    • 易于并行化处理
    • 结果难以解释
    • 不适用于高维度特征的数据

     

    展开全文
  • 通俗易懂的随机森林模型讲解

    万次阅读 多人点赞 2018-04-17 22:42:09
    通俗易懂的随机森林模型讲解 大家好,我是你们的好朋友小木。对于随机森林的模型,网上已经有灰常灰常多的讲解,大家讲的也非常的不错。但绝大多数大神讲解都是注重于理论,把算数的地方都给忽略了,我这次要以举...

    通俗易懂的随机森林模型讲解

           大家好,我是你们的好朋友小木。对于随机森林的模型,网上已经有灰常灰常多的讲解,大家讲的也非常的不错。但绝大多数大神讲解都是注重于理论,把算数的地方都给忽略了,我这次要以举例子的方法来讲解,这样可以让大家更好的理解随机森林模型。

      首先我们来定义一下随机森林,啥叫随机森林呢,森林指的是有一堆大树的地方,随机指每棵大树种植的过程中施肥的种类是随机地选择的。但是好好地一个模型怎么就变成大树了呢?当然不是啦,这里大树指的是决策树,而施肥指的是不同的限定条件。接下来,又有小朋友问我啥叫决策树,好大的一棵树啊,不懂o(_)o ,那么我就来讲一下啥叫决策树。

           顾名思义,决策就是评价的意思,我们用一颗大树评价一个事物,这样的大树就叫做决策树。那么我们决策啥?往后看就直到了

      比如小木想要找女朋友,但他是个人,他有自己喜欢的类型,不是任何人都会同意的。我们现在有一个中介公司给小木介绍了五个女孩,她们的条件、以及小木是否想见面分别如表1所示:

    1

    女孩编号

    长相

    性格

    年龄

    学历

    住址

    小木是否选择

    1

    温柔

    26

    硕士

    城市

    2

    平淡

    24

    高中

    城市

    3

    超凶

    20

    本科

    城市

    4

    温柔

    25

    硕士

    农村

    5

    平淡

    30

    本科

    城市

    6

    超凶

    28

    博士

    农村

      我们要决策的就是小木是否选择见面,其中结果有两个,一个是是,一个是否。

      这个表格中有长相、性格、年龄、学历、小木是否选择几项,除了年龄之外全都是文字,我们要建立数学模型这是不可以的,那么我们必须给它们转换为数字形式,转换之后如表2所示:

    2

    女孩编号

    长相

    性格

    年龄

    学历

    住址

    小木是否选择

    1

    1

    温柔2

    26

    硕士2

    城市

    0

    2

    0

    平淡1

    24

    高中4

    城市

    0

    3

    1

    超凶0

    20

    本科1

    城市

    1

    4

    0

    温柔2

    25

    硕士2

    农村

    0

    5

    1

    平淡1

    30

    本科1

    城市

    0

    6

    0

    超凶0

    28

    博士3

    农村

    1

      这个表格把各个变量都应用上了数字,例如性格中,分为了012三类。我们分完类别之后呢,下一步我们就要选择一个特征,然后判断小木是否见面。特征怎么选?我们用一个叫做熵值公式,它的计算公式如下:

    1

      举个例子,比如分析小木是否选择见面,在表格2里面,选择“是”情况有两种,“否”情况有三种,共五个,所以选择“是”的概率为2/6=0.33,选择否的概率为4/6=0.67。然后我们把0.40.6带入公式(1)中,得到:H0=-(0.33*log20.33+0.67*log20.67)=0.92

      同理,对于学历来说,共有4种:高中、本科、硕士、博士,概率分别为:1/62/62/61/6,并将其带入公式2中:

    2

      其中,|Di|/|D|指的是高中、学士、硕士、博士概率。计算Hi的时候,我们带入的总数目是高中、学士、硕士、博士的数量,比如学士有两个,且一个小木不选,一个小木选,概率分别是0.50.5。类似于高中数学中的HDi|Hj),要是不能理解就按照下面的计算方式直接带入数据就行:

      通过式(2)可求得H4

      同理,我们得出各个特征的Hi值,然后用得出的Hi值与H0分别作差,也就是Hi-H0,然后得到如下表3

    3

    特征

    长相H1

    性格H2

    年龄H3

    学历H4

    住址H5

    小木是否选择H0

    0.92

    0

     

    0.67

    0.67

    0.92

    H-H0

    0

    0.92

     

    0.25

    0.25

    0

      我们把这些都算完了,就差年龄了,年龄这个条件我们却发现了,每一个年龄的概率是1/6,我们应该这么算?不,为啥呢,因为我们这里没有29岁,也没有212223岁,我们要一个个算的话,那么就漏掉这四个年龄了,那怎么办?我们只好坐在轮椅上,双脚离地想想了,我们这么一想,唉,发现一个秘密。如果你说是,年龄在20~30之间,那么我就告诉你:恭喜你回答正确!因为在20~30之间,我们取一个中间值25,如果小于25我们就算0,如果大于等于25就算1,那么我们就得出了表4

    4

    女孩编号

    长相

    性格

    年龄

    学历

    住址

    小木是否选择

    1

    1

    温柔2

    26  1

    硕士2

    城市0

    0

    2

    0

    平淡1

    24  0

    高中4

    城市0

    0

    3

    1

    超凶0

    20  0

    本科1

    城市0

    1

    4

    0

    温柔2

    25  1

    硕士2

    农村1

    0

    5

    1

    平淡1

    30  1

    本科1

    城市0

    0

    6

    0

    超凶0

    28  1

    博士3

    农村1

    1

      我们这里大于等于25的一共有4个,小于的一共有2个,那么它们的概率分别为4/62/6,通过式1计算,就能得出H=0.92,因此,我们获得完整的表5

    5

    特征

    长相H1

    性格H2

    年龄H3

    学历H4

    住址H5

    小木是否选择H0

    0.92

    0

    0.87

    0.67

    0.67

    0.92

    H-H0

    0

    0.92

    0.05

    0.25

    0.25

    0

      熵值代表着混乱的程度,我们高中学过,熵值越大,说明越混乱。熵差代表着啥呢,代表着信息增益,也可以叫做纯度,说白了与小木找对象的不确定度是0.92,如果就看性格,不确定度是0,增益最大,也就是说看完性格之后就就知道怎么挑了,说明分类的纯度大,如果就看长相,不确定度增益小,也就是不挑长相,所以对找对象用途很不大,说明纯度小。总结来说是信息增益越大,挑的越容易。因为长相增益为0,那么我们就把它排除在外,不算它了。

      我们建立第一颗决策树,首先随机地选择两个限定条件,一个是性格,另外一个是年龄,我们发现增益最大的是性格,也就是性格作为决策树的顶点,然后随机选择几个样本(由于样本就6个,我们就都选择了)并按照这性格分别划分三个细节,如图1所示:

    1

      图1中,文字底下的数字表示的和表4中的相同,例如平淡中[1,0]表示:[平淡,小木不选择]。其中最后一位红字表示小木的选择,从图中我们可以看出,小木对于温柔、平淡的女生是拒绝的,对超凶的女生是直接选择的。对超凶的女生,小木是百分百选择的。因此后边的学历我们也就不用看了。这样一颗决策树就建立完成了。

      接下来,按照同样方法再随机地选择两个限定条件,如学历、年龄。信息增益最大的那个是学历,也就是学历作为决策树的顶点,然后随机选择几个样本(由于样本就6个,我们就都选择了),按照这性格分别划分四个细节:高中、本科、硕士、博士如图2所示:

    2

      我们发现高中和硕士小木不选,而博士小木选择,本科有歧义,我们还需要往下面再分类。我们按照同样的方法,把年龄分为25岁以下和25岁以上(包含25岁),图3所示:

    3

      我们再生成一个大树,选择住址和性格(因为样本太少了,所以我们这里瞎编一个大树,不符合计算规则,不用多想了),如图4所示:


    4

      这样,我们建立了三颗决策树,接下来,我们需要把测试数据带入进去判断小木是否选择,比如我们有表6

    6

    女孩编号

    长相

    性格

    年龄

    学历

    住址

    1

    0

    平淡1

    24  0

    高中4

    城市1

    2

    1

    超凶0

    30  1

    硕士2

    农村1

    3

    0

    平淡1

    26  1

    本科1

    农村1

      然后我们把条件分别带入三棵树中。比如第一个女孩带入第一颗大树,首先判断性格,性格是平淡的,小木不会选择,所以结果为0。第二棵树,首先判断学历是高中,小木不会选择所以结果为0。带入第三棵树,判断居住地是城市,接下来判断性格为平淡,所以小木不选,结果为0。其它数据同理计算,我们会得出表格7

    7

    女孩编号

    结果1

    结果2

    结果3

    最终结果

    1

    0

    0

    0

    0

    2

    1

    0

    1

    1

    3

    1

    0

    0

    0

      从表格我们可以得出最终的结果,最终的结果一般是两种计算方法,第一种是少数服从多数,第二种是平均值,因为这次结果只有01,所以选择少数服从多数的计算方式。

           至此我们的随机森林就计算完成啦。最后总结一下随机森林的计算步骤:

    (1)导入数据,条件及其结果(比如女孩自身条件是条件,小木是否选择见面是结果)

    (2)设定一个常数N,作为筛选的样本数目(一般小于样本总数M,由于该举例里面样本太少了,所以我就让N=M了)。

    (3)设定一个常数a,作为筛选条件的数目(一般小于总数)

    (4)设定一个常数X,作为决策树数目,并创建X个决策树(创建时,每个决策树随机选定数目为a的条件,随即选定数目为N的样本)

    (5)创建完成后,带入测试样本,以结果少数服从多数或平均值作为最终测试结果,并与真实结果做对比,判断是否符合实际。


    ————————————————

    如果对我的课程感兴趣的话,欢迎关注小木希望学园-微信公众号: 

    mutianwei521



    展开全文
  • 随机森林模型详解

    万次阅读 2019-03-17 21:43:57
    决策树+bagging=随机森林随机森林是一种比较新的机器学习模型(非线性基于树的模型)集成学习方法。上世纪八十年代Breiman等人发明分类树算法,通过反复二分数据进行分类或回归,计算量大大降低,2001年Breiman把...
  • sklearn随机森林模型关键参数解释 n_estimators ​ 随机森林决策树的数目,n_estimators越大越好,但占用的内存与训练和预测的时间也会相应增长,且边际效益是递减的,所以要在可承受的内存/时间内选取尽可能大的n...
  • 随机森林模型保存-python

    万次阅读 2016-10-08 13:13:10
    训练完的随机森林模型需要保存下来,目前给出python的方案。 import pickle with open("model.pkl", "wb") as f: pickle.dump(model, f) # 如果需要再取出来 with open("data.pkl", "rb") as f: model...
  • # 使用袋外误差评估随机森林模型

    千次阅读 2019-12-25 15:55:48
    在不使用交叉验证的情况下使用袋外误差评估随机森林模型 # 使用袋外误差评估随机森林模型 使用袋外样本 from sklearn.ensemble import RandomForestClassifier from sklearn import datasets ​ iris = datasets....
  • 随机森林模型预测和交叉验证

    千次阅读 2019-11-28 02:37:30
    使用随机森林模型来训练和交叉验证数据集。 数据矩阵:allmatrix 标签:target randomforest training preliminary trainning >>> from sklearn.ensemble import RandomForestClassifier >>> ...
  • 如何评估随机森林模型以及重要预测变量的显著性说到随机森林(random forest,RF),想必很多同学都不陌生了,毕竟这些机器学习方法目前非常流(fàn)行(làn)……白鱼同学也曾分...
  • # 随机森林模型建立与训练 from sklearn.ensemble import RandomForestRegressor # 其他模型按需要选择即可 rfr = RandomForestRegressor(n_estimators=100, max_depth=3, random_state=0) # 参数自己看帮助文档进行...
  • 对数据建模之前,填补缺失值是必不可少的一步,这里把用随机森林模型快速预测缺失值的方法总结如下,以方便日后的工作。 # data_df: DataFrame类型的数据 # obj_column:待填补缺失值的列名 # missing_other_column...
  • R语言-训练随机森林模型

    万次阅读 2018-09-02 22:16:51
    随机森林算法涉及对样本单元和变量进行抽样,从而生成大量决策树。 对于每个样本单元,所有决策树依次对其进行分类,所有决策树预测类别中的众数类别即为随机森林所预测的这一样本单元的类别。 假设训练集中共有N...
  • SPARK模型实例,基于HiveSQL,实现随机森林模型的训练和预测
  • 随机森林模型有着惊人的准确性,可以替代一般线性模型(线性回归、方差分析等)和广义线性模型(逻辑斯蒂回归、泊松回归等)等等。   我2012年在人民大学组织的R语言会议上介绍了随机森林的用法(报告文件在...
  • 随机森林模型调参方法

    千次阅读 2018-05-16 15:06:45
    一、默认参数打印随机森林学习器的默认参数配置:1、bootstrap=True2、criterion='mse'3、max_depth=None4、max_features='auto'5、max_leaf_nodes=None6、min_impurity_decrease=0.07、min_impurity_split=None8、...
  • 随机森林允许单个决策树使用特征的最大数量。 Python为最大特征数提供了多个可选项。 下面是其中的几个: Auto/None :简单地选取所有特征,每颗树都可以利用他们。这种情况下,每颗树都没有任何的限制。 sqrt :...
  • 随机森林模型主要参数的调参方法

    千次阅读 2019-08-27 18:25:36
    '模型调参' # 对 n_estimators进行网格搜索 # param_test1 = {'n_estimators': range(10, 101, 10)} # gsearch1 = GridSearchCV( # estimator=RandomForestClassifier( # min_samples_split=100, # min_samples_...
  • 学了差不多10多天的入门机器学习,突然发现学好数学是多么的重要,以前上学时还觉得数学只要学会加减乘除就可以了,什么导数,回归方程都没什么用,这段时间真后悔死,看了好多模型原理推导,有好多的数学符号都不...
  • 变量重要性图是查看模型中哪些变量有趣的好工具。由于我们通常在随机森林中使用它,...在这里,我们使用一个随机森林的特征之间的关系模型,但实际上,我们考虑另一个特点-不用于产生数据-,即相关。我们考虑这三...
  • 如果我们对所有这些模型的结果进行平均,我们有时可以从它们的组合中找到比任何单个部分更好的模型。这就是整体模型的工作方式,他们培养了许多不同的模型,并让他们的结果在整个团队中得到平均或投票。 我们现在很...
  • 将python随机森林模型保存到文件

    千次阅读 2020-10-09 08:40:48
    你说的问bai题叫模型持久化,就是把学习好的模型保du存起来zhi,以后只要调用这个文件就可以了。 每个框dao架都应该有模型持久化函数,以sklearn为例: from sklearn.externals import joblib joblib.dump(clf, ...
  • 用鸢尾花数据集构建随机森林模型

    千次阅读 2019-03-29 12:03:11
    原因是一开始随机森林分类器构造时没有加n_estimators=10,而n_estimators代表森林的决策树个数,默认为10,因为树个数产生为10和100时结果是不一样的,所以这里出现了错误提示,设置决策树个数就可以消除,也可以...
  • 01 树与森林 在构建决策树的时候,可以让树进行完全生长,也可以通过参数控制树的深度或者叶子节点的数量,通常完全生长的树会带来过拟合问题。...实际应用中,一般可用随机森林来代替,随机森林
  • 二、随机森林RF 2.1随机森林的生成 2.2 随机森林的特点 一、决策树CART CART分类回归树是一种典型的二叉决策树,可以处理分类或者回归问题。如果待预测结果是离散型数据,则CART生成分类决策树;如果待预测结果...
  • # 随机森林 rf_clf = RandomForestClassifier(n_jobs=-1, max_depth=100, n_estimators=800) rf_clf.fit(x_train_rfecv, y_train) y_pred = rf_clf.predict(x_test_rfecv) # 模型评价 p = precision_score(y_test, ...
  • 基于随机森林模型的红酒品质分析

    千次阅读 2020-04-12 22:48:38
    看了南京大学的《用python玩转数据视频》,Python非常强大。代码做了些注释。 https://scipy.org/ # url: ...# 导入模块 import pandas as pd import seaborn as sns import matplotlib.pyplot as p...
  • 分别为高、中、低品质,对数据进行统一处理后,将目标属性和特征属性分开,随机从样本中按比例选取训练数据和测试数据,进行标准化处理,基于随机森林分类器建立基学习器,经过训练、预测、调参得到模型。...
  • bagging是一种集成模型的思想。其名称来源于“bootstrap aggregating"。这种方法是用来解决模型的过拟合问题。 首先说一下bootstrap方法,中文名称叫做”自助采样法“,是一种有放回的采样方法。比如说样本空间有m个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 40,212
精华内容 16,084
关键字:

随机森林模型