精华内容
下载资源
问答
  • matlab软件随机森林回归模型代码,可直接matlab打开运行!精简版,包括数据导入、模型建立、误差计算、保存模型,绘制对比图的多个功能!
  • sklearn实现随机森林回归预测

    千次阅读 2020-05-14 15:55:10
    sklearn实现随机森林回归预测 import numpy as np import matplotlib.pyplot as plt from sklearn import ensemble def gen_data(x1, x2): # 生成数据 y = np.sin(x1) * 0.1 + np.cos(x2) * 0.4 + 0.1 * x1 ...

    sklearn实现随机森林回归预测

    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn import ensemble
    
    
    def gen_data(x1, x2):
        # 生成数据
        y = np.sin(x1) * 0.1 + np.cos(x2) * 0.4 + 0.1 * x1
        return y
    
    
    def load_data():
        x1_train = np.linspace(0, 50, 500)
        x2_train = np.linspace(-10, 10, 500)
        data_train = np.array(
            [[x1, x2, gen_data(x1, x2) + np.random.random(1) - 0.5] for x1, x2 in zip(x1_train, x2_train)])
        x1_test = np.linspace(0, 50, 100) + np.random.random(100) * 0.5
        x2_test = np.linspace(-10, 10, 100) + 0.02 * np.random.random(100)
        data_test = np.array([[x1, x2, gen_data(x1, x2)] for x1, x2 in zip(x1_test, x2_test)])
        return data_train, data_test
    
    
    train, test = load_data()
    # train的前两列是x1,X2,后一列是y,这里的y有随机噪声
    x_train, y_train = train[:, :2], train[:, 2]
    x_test, y_test = test[:, :2], test[:, 2]  # 测试时y没有噪声
    
    random_forest_regressor = ensemble.RandomForestRegressor(n_estimators=20)  # 随机森林回归,并使用20个决策树
    random_forest_regressor.fit(x_train, y_train)  # 拟合模型
    score = random_forest_regressor.score(x_test, y_test)
    result = random_forest_regressor.predict(x_test)
    plt.figure()
    plt.plot(np.arange(len(result)), y_test, "go-", label="True value")
    plt.plot(np.arange(len(result)), result, "ro-", label="Predict value")
    plt.title(f"RandomForest---score:{score}")
    plt.legend(loc="best")
    plt.show()
    

    结果
    在这里插入图片描述

    展开全文
  • R语言 随机森林回归

    2017-08-30 19:13:07
    主要利用R语言进行随机森林回归,还有其他两种回归, library(lattice) library(grid) library(DMwR) library(rpart) library(ipred) library(randomForest) #回归树,装袋算法,随机森林三大回归 #前二种算法可以...
  • RF_regressor 使用sklearn随机森林回归器的预测模型
  • 随机森林回归matlab代码,可用于回归和分类,简单易用
  • 从BP神经网络训练模型后,想着换个模型训练训练数据集,于是在SVM和随机森林中选择,最后选择了随机森林随机森林的原理不在这里做详细解释,有大佬比我讲的要好太多。我仅仅是就这我的代码做一些解释。 导入这次...

    从BP神经网络训练模型后,想着换个模型训练训练数据集,于是在SVM和随机森林中选择,最后选择了随机森林。随机森林的原理不在这里做详细解释,有大佬比我讲的要好太多。我仅仅是就这我的代码做一些解释。

    导入这次代码所需要的库

    import numpy as np
    import pandas as pd
    import math
    import matplotlib.pyplot as plt
    import datetime as dt
    import sklearn.model_selection as sm
    from sklearn.ensemble import RandomForestRegressor
    from sklearn.tree import export_graphviz
    import pydot
    from sklearn.preprocessing import MinMaxScaler
    

    对数据做处理,选择的数据集为上证指数2016年到2021年7月30日日线的数据,csv文件可以从baostock上,通过python直接获取。

    random_len=10#随机数种子的数量
    est_tree=100#随机森林中树的个数
    train_rate=0.7#切分训练组的长度
    df=pd.read_csv("F:\大创(k线)\数据//999999.csv")
    features=df.filter(['index','open','close','high','low'])
    n_f=df.filter(['volume'])
    n_f=n_f.values
    n_f1=df.filter(['amount'])
    n_f1=n_f1.values
    scaler=MinMaxScaler(feature_range=(1000,10000))#保持成交量和成交额在同一数量级
    n_f,n_f1=scaler.fit_transform(n_f),scaler.fit_transform(n_f1)
    features['volume']=n_f
    features['amount']=n_f1
    features['pro_rate']=np.log(features['close'] / features['close'].shift(1))#计算收益率
    features=features.replace(np.nan,0)#由于计算收益率时第一行数据没有值,把他变成0
    train_data_len=math.floor(len(features)*train_rate)
    newdate=features['index']
    x_date=newdate[train_data_len:]
    

    数据集准备成这样
    数据集
    给标签和特征区分数据集,通过定义函数

    #准备好标签和特征组
    def label_data(features):
        labels=np.array(features['pro_rate'])
        features=features.drop('pro_rate',axis=1)#从特征值中去除标签列
        features=features.drop('index',axis=1)
        feature_list=list(features.columns)
        features=np.array(features)
        return labels,feature_list,features
    labels,feature_list,features=label_data(features)
    

    设置随机森林的参数和训练模型,预测

    rf=RandomForestRegressor(n_estimators=est_tree,random_state=random_len)
    rf.fit(train_features,train_labels)
    predtion=rf.predict(test_features)
    

    数据可视化

    fig,axs=plt.subplots(2,1,sharex=True,figsize=(14,8))
    axs[0].plot(x_date,predtion)
    axs[0].set_ylabel("prediction")
    axs[1].plot(x_date,test_labels)
    axs[1].set_ylabel("true")
    plt.subplots_adjust(hspace=0)
    plt.xlabel('date')
    plt.show()
    plt.close()
    

    这里画出的图共享了x轴,这样看起来舒服一点
    在这里插入图片描述
    既然有了森林,我们当然要查看一下因子的重要程度

    importances=list(rf.feature_importances_)
    feature_importances = [(feature, round(importance, 4)) for feature, importance in zip(feature_list, importances)]
    feature_importances = sorted(feature_importances, key = lambda x: x[1], reverse = True)
    for pair in feature_importances:
        print('Variable: {:20} Importance: {}'.format(*pair))
    

    得到的如下:
    在这里插入图片描述
    有时我们也需要看一下随机树的内部结构
    我们所需要的库为

    from sklearn.tree import export_graphviz
    import pydot
    

    值得注意的是graphviz不能在python中通过pip install graphviz命令行去安装到路径中,我们需要去网站下载安装
    https://graphviz.org/download/#source-code
    下载这个就好:
    在这里插入图片描述下载后安装,记得勾选把其加入到path中,或者之后自己把源文件下bin文件夹加入环境变量也行
    如果在运行是报错:"dot" not found in path
    则打开pydot.py文件,把这里的dot改成dot.exe
    在这里插入图片描述
    改完之后一定一定要记得重启电脑!!,我翻来覆去查了半小时哪里的问题。

    现在就可以输出随机树的结构了

    def draw_tree(rf,feature_list):
        tree = rf.estimators_[5]
        export_graphviz(tree, out_file = 'rf.dot', feature_names = feature_list, rounded = True, precision = 1)
        (graph, ) = pydot.graph_from_dot_file('rf.dot')
        graph.write_png('rf.png'); 
    draw_tree(rf,feature_list)
    

    (非常局部的)随机树结构为:
    在这里插入图片描述
    这就是目前写了基本功能的代码,还需改进。

    展开全文
  • 针对神经网络算法在当前PM2.5浓度预测领域存在的易过拟合、网络结构复杂、学习效率低等问题,引入RFR(random forest regression,随机森林回归)算法,分析气象条件、大气污染物浓度和季节所包含的22项特征因素,...
  • 使用随机森林的汽车价格预测:该项目使用随机森林回归器作为监督的机器学习技术来预测汽车价格
  • 回归和分类随机森林

    2018-02-17 20:16:02
    matlab 实现的随机森林,核心代码用C语言实现,是微软大牛的手笔,里面有分类也有回归,学术或者实用都很好
  • 随机森林随机回归预测Why do we try to predict happiness? Being able to predict happiness means that we are able to manipulate or try to improve certain components in order to increase our own happiness...

    随机森林随机回归预测

    Why do we try to predict happiness? Being able to predict happiness means that we are able to manipulate or try to improve certain components in order to increase our own happiness, and possibly national happiness for governments. I found Random Forest (RF) to be the simplest and most efficient package, so let’s get started!

    为什么我们要尝试预测幸福? 能够预测幸福意味着我们能够操纵或尝试改善某些组成部分,以增加我们自己的幸福,甚至可能增加政府的国民幸福。 我发现随机森林(RF)是最简单,最有效的软件包,所以让我们开始吧!

    内容: (Contents:)

    1. The Data

      数据
    2. Random Forest Model

      随机森林模型
    3. Data Cleaning

      数据清理
    4. Training and Testing

      培训与测试
    5. Feature Importances

      功能重要性
    6. Modifying number of variables

      修改变量数
    7. Evaluating the Model

      评估模型

    数据:(The Data:)

    The data obtained from the #WorldValuesSurvey contains >290 questions & consist of ~69k responses after removing missing data for happiness levels. It is a cross-national survey across the years, and the questionnaire can be found on the website. In particular, we will be looking at the 2017–2020 data set. The size of the data set makes it optimal for machine learning.

    #WorldValuesSurvey获得的数据包含超过290个问题,并在删除幸福水平缺失的数据后包含约69k响应。 这是多年来的跨国调查,其问卷可以在网站上找到。 特别是,我们将研究2017-2020年的数据集。 数据集的大小使其最适合机器学习。

    随机森林模型: (Random Forest Model:)

    To start with, we will be using the RF classifier* since we would like the machine to predict the level of happiness in groups (Very happy, Quite happy, Not very happy, Not at all happy).*side-note, a RF regressor is used when looking for a number that can take a range of values e.g any value between 0 and 1.

    首先,我们将使用RF分类器*,因为我们希望机器预测小组中的幸福程度(非常高兴,非常高兴,不太高兴,根本不高兴)。 *旁注,当寻找一个可以取值范围(例如0到1之间的任何值)的数字时,将使用RF回归器。

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.model_selection import train_test_split
    from sklearn import metrics

    数据清理:选择数据 (Data cleaning: Selecting the data)

    Let’s start by getting the columns of only the questions and removing negative values* in the responses to Q46 that asks about happiness levels.

    让我们从仅获得问题的列开始,并在对Q46的询问中询问幸福水平的答案中删除负值*。

    var="Q46"
    df=df[df.columns[32:349]]
    df=df[df[var]>0]

    *Negative values are either respondents saying they don’t know, have no answer, were not asked or the response was missing. These values would make it harder for the machine to classify them, since it increases the number of categories and are not what we are looking for.

    *负值是指受访者表示他们不知道,没有答案,没有被要求或答案丢失。 这些值会使机器更难以对其进行分类,因为这会增加类别的数量,而这并不是我们要寻找的。

    The data set remaining is shown below:

    剩余的数据集如下所示:

    Image for post

    进一步的数据清理: (Further data cleaning:)

    The next concern is that we would have to deal with missing values in other columns. There are 3 options to consider:

    下一个需要考虑的问题是,我们将不得不处理其他列中缺失的值。 有3个选项可供考虑:

    1. Replace the missing values with 0

      将缺失的值替换为0
    2. Replace the missing values with the mean

      用均值替换缺失值
    3. Drop the rows with missing values (data set becomes empty).

      删除缺少值的行(数据集为空)。

    Since the third option is not viable, we will have to check which option, 1 or 2, would give the highest accuracy. In this case, I found that replacing with 0 makes it more accurate.

    由于第三个选项不可行,我们将必须检查哪个选项1或2将提供最高的准确性。 在这种情况下,我发现用0代替会使它更准确。

    df.fillna(0, inplace=True)

    准备火车标签: (Prepare train labels:)

    Now we set the ‘label’ for the machine to recognize the feature that I want it to predict and split the data into train and test sets.

    现在,我们为机器设置“标签”,以识别我希望它预测和将数据分为训练和测试集的功能。

    train_labels = pd.DataFrame(df[var])
    train_labels = np.array(df[var])
    train_features= df.drop(var, axis = 1)
    feature_list = list(train_features.columns)
    train_features = np.array(train_features)
    train_features, test_features, train_labels, test_labels = train_test_split(train_features, train_labels, test_size = 0.25, random_state = 42)

    训练和测试模型: (Train and Test the Model:)

    The process of training and testing is simple. To improve the predictive power and/or model speed, we can simply modify the parameters within the RF classifier.

    培训和测试的过程很简单。 为了提高预测能力和/或模型速度,我们可以简单地在RF分类器中修改参数。

    精度提高: (Increasing accuracy:)

    n_estimators — number of trees the algorithm builds before majority voting

    n_estimators-算法在多数表决之前构建的树数

    max_features — maximum number of features random forest considers to split a node

    max_features —随机森林考虑拆分节点的最大特征数

    min_sample_leaf — the minimum number of leafs required to split an internal node.

    min_sample_leaf —拆分内部节点所需的最小叶子数。

    提高速度: (Increasing speed:)

    n_jobs — number of processors it is allowed to use. If = 1, only use one processor. If =-1, no limit

    n_jobs-允许使用的处理器数量。 如果= 1,则仅使用一个处理器。 如果= -1,则没有限制

    random_state — makes the model’s output replicable i.e always produce the same results given the same hyperparameters and training data

    random_state —使模型的输出可复制,即在给定相同的超参数和训练数据的情况下始终产生相同的结果

    oob_score: random forest cross-validation method

    oob_score:随机森林交叉验证方法

    rf=RandomForestClassifier(n_estimators = 1000, oob_score = True, n_jobs = -1,random_state =42,max_features = “auto”, min_samples_leaf = 12)
    rf.fit(train_features, train_labels)
    predictions = rf.predict(test_features)
    print(metrics.accuracy_score(test_labels, predictions))

    The model takes 1.3 minutes to train ~52k training rows and >290 columns, and 1 second to test. The accuracy was 63.70%. If we had chosen to fill the missing values with the mean, the accuracy would be 63.55%. But what’s important is finding out what influences the machine’s prediction, since those would be the variables that we want to look at. We certainly cannot expect everyone to answer 290+ questions, or try to work on all 290 aspects to improve happiness (that’s going to cost a lot). So we’ll be looking at the feature importances.

    该模型需要1.3分钟来训练约52k训练行和> 290列,并且需要1秒进行测试。 准确度是63.70% 。 如果我们选择用平均值填充缺失值,则准确度将为63.55% 。 但是重要的是找出影响机器预测的因素,因为这就是我们要查看的变量。 当然,我们当然不能期望每个人都能回答290多个问题,或者尝试在290个方面进行工作以提高幸福感(这将花费很多)。 因此,我们将研究功能的重要性。

    功能重要性: (Feature Importances:)

    If you recall, feature_list contains the columns of all other variables except Q46. The goal is to understand which are the variables that influence the prediction.

    回想一下,feature_list包含除Q46之外的所有其他变量的列。 目的是了解哪些因素会影响预测。

    importances = list(rf.feature_importances_)
    feature_importances = [(feature, round(importance, 2)) for feature, importance in zip(feature_list, importances)]
    feature_importances = sorted(feature_importances, key = lambda x: x[1], reverse = True)
    [print('Variable: {:20} Importance: {}'.format(*pair)) for pair in feature_importances]
    x_values = list(range(len(importances)))# Make a bar chart
    plt.bar(x_values, importances, orientation = 'vertical', color = 'r', edgecolor = 'k', linewidth = 1.2)
    # Tick labels for x axis
    plt.xticks(x_values, feature_list, rotation='vertical')
    # Axis labels and title
    plt.ylabel('Importance'); plt.xlabel('Variable'); plt.title('Variable Importances');
    Image for post

    Feature importances sum to 1 and what we notice is that certain variables have a greater influence over the prediction compared to the others, and almost every variable has some form of influence, albeit extremely small because there are just too many variables. The next thing is to continue improving our model to allow us to better understand happiness.

    特征重要性的总和为1,我们注意到,与其他变量相比,某些变量对预测的影响更大,并且几乎每个变量都有某种形式的影响,尽管由于变量太多而影响很小。 接下来的事情是继续改进我们的模型,以使我们更好地了解幸福。

    修改变量数: (Modifying the number of variables:)

    Let’s take the top 20 features, and set up a new model using just these 20 variables (+ var itself). We’ll repeat the data cleaning and same RF model. I got an accuracy of 64.47%. If we had chosen to replace missing values with the mean, the accuracy would be 64.41%. What is surprising here is that with smaller number of variables, the model becomes more accurate (from 63.70% to 64.47%). This is likely because the other variables were generating noise in the model and causing it to be less accurate.

    让我们采用前20个功能,并仅使用这20个变量(+ var本身)来建立新模型。 我们将重复数据清理和相同的RF模型。 我的准确度是64.47%。 如果我们选择用均值代替缺失值,则准确度将为64.41% 。 令人惊讶的是,变量数量越少,模型变得越准确(从63.70%64.47% )。 这可能是因为其他变量在模型中产生了噪音,并导致其准确性降低。

    让我们再次看一下功能重要性: (Let’s look at the Feature Importances again:)

    This time, it is clearer to tell which variables were more important. You may refer to the questionnaire found on WVS for more detailed information. I will give a summary of the topics that the questions covered.

    这次,更清楚地指出哪些变量更重要。 您可以参考WVS上的调查表以获取更多详细信息。 我将总结这些问题涉及的主题。

    Image for post

    评估模型: (Evaluating the model:)

    Let’s look at the graph of actual vs predicted values for the first 200 test values. For greater visibility of the whole test set, let’s also do a simple count for the difference in values of predicted and actual (predicted minus actual).

    让我们看一下前200个测试值的实际值与预测值的关系图。 为了更好地了解整个测试集,我们还对预期值和实际值(预期值减去实际值)之间的差进行简单计数。

    Image for post
    Image for post

    The model appears to be slightly more negative than positive in predicting the happiness levels, but would still be considered otherwise balanced!

    在预测幸福水平时,该模型似乎比肯定模型更具负面性,但在其他方面仍然可以认为是平衡的!

    见解: (Insights:)

    What I have done is to examine the key questions out of >290 in the WVS that is more relevant to happiness levels. This would mean that we can try to focus specifically on these aspects when examining happiness.

    我要做的是研究WVS中超过290个与幸福感水平更相关的关键问题。 这意味着我们在检查幸福时可以尝试着重于这些方面。

    Looking at the questionnaire, we would also notice that Q261 and Q262 are the same thing (age and year born), so we could remove 1 of them to include another feature. For Q266,267,268 (country of birth of the respondent and parents) they appear to be repeats, but are not exactly the same thing since immigration/cross-cultural marriage may occur. Nonetheless, we could consider removing 2 of them since the occurrence is minimal.

    通过问卷调查,我们还会注意到Q261和Q262是相同的东西(年龄和出生年份),因此我们可以删除其中的一个以包括另一个功能。 对于Q266,267,268(受访者和父母的出生国家),它们似乎是重复的,但由于可能发生移民/跨文化婚姻,因此并非完全相同。 尽管如此,由于发生的可能性很小,我们可以考虑删除其中的2个。

    常规主题是: (The general topics are:)

    Individual level:Life satisfaction, health, finances, freedom, age, safety, religion, marriage, and family.National level:country, perception of corruption, democracy/political influence, national pride

    个人层面:生活满意度,健康,财务,自由,年龄,安全,宗教,婚姻和家庭。 国家层面:国家,对腐败的看法,民主/政治影响,民族自豪感

    In particular, health, finances and age were the top features that were deemed as important by the machine. In this sense, the individual level factors has a greater influence on one’s happiness level compared to the national level factors.

    特别是,健康,财务和年龄是机器认为重要的重要功能。 从这个意义上说,个人水平因素比国家水平因素对一个人的幸福水平影响更大。

    However, I noticed that the WVS did not have data on sleep hours, which was a key element that was observed in my earlier post. Nonetheless, it is still very much useful as we can consider those aspects for further analysis! I’ll be back with more insights into the correlation between those aspects and happiness, to determine how we can improve our happiness levels. Until then, remember to stay happy!

    但是,我注意到WVS没有睡眠时间的数据,这是我早先文章中观察到的关键因素。 但是,它仍然非常有用,因为我们可以考虑对这些方面进行进一步分析! 我将在这些方面与幸福之间的相关性方面提供更多见解,以确定我们如何提高幸福水平。 在此之前,请记住保持快乐!

    翻译自: https://towardsdatascience.com/predicting-happiness-using-random-forest-1e6477affc24

    随机森林随机回归预测

    展开全文
  • 随机森林可以实现很多的分类问题,我这里面使用的是Iris的数据集,来判断Iris的类别。
  • 受美国“页岩气革命”的影响,页岩气勘探受到了大量的关注(现有利用测井曲线预测TOC的方法有4类:①利用单曲线或多曲线建立回归关系的预测方法,如利用密度曲线(DEN)预测TOC、利用U含量曲线(U)预测TOC等(R法、...

    受美国“页岩气革命”的影响,页岩气勘探受到了大量的关注(

    现有利用测井曲线预测TOC的方法有4类:①利用单曲线或多曲线建立回归关系的预测方法,如利用密度曲线(DEN)预测TOC、利用U含量曲线(U)预测TOC等(R法、CARBOLOG法等(

    单元拟合方法优势是建模方法简单,但从信息论的角度来说,单元拟合所使用的地层信息过少(仅使用地层某一地层响应特征与TOC建关系),在该曲线测量效果较差或者储集层TOC较低时,地层关于TOC的响应受到压制,预测精度会有所下降。多元拟合方法所建立的模型为非理论模型,仅能确定响应值与TOC的正负相关性,这种线性或非线性约束存在其不合理性,所建立的模型并不可靠。第2类方法从其理论来说,对储集层的成熟度有要求,对于过成熟页岩效果并不理想。而利用非常规测井预测TOC的方法确实能在一定程度上提高TOC的预测精度,但是测量价格较为昂贵,即使存在效果较好的模型也难以推广。

    机器学习算法能通过对样本的学习,自动确定各测井响应值与TOC的综合关系。其最大的优势在于,可以较好的利用大量地层信息对TOC进行综合预测,使得模型较为稳定,不会因为某一曲线失真而使精度大大下降。不同算法由于机理不同效果不尽相同,而机器学习算法的表征函数能力是研究的关键,针对该思路,作者提出了一种基于随机森林回归算法预测TOC的模型,其较现有机器学习预测TOC算法来说具有更强的泛化能力与稳定性。通过对实际资料的处理,认为该模型预测TOC较其他算法精度更高,较为可靠。该模型可有效提高TOC预测的精度和可靠性,对页岩气的勘探开发帮助很大。

    1 总有机碳含量与测井响应关系研究

    机器学习方法的精度在很大程度上取决于模型的输入,这是因为不同的测井曲线与TOC的相关程度不同,若曲线与TOC的相关性弱或者关系过于复杂,在样本不足的情况下很容易使算法学到错误的函数关系,造成过拟合。利用焦石坝地区2口井(A、B)237块龙马溪组-五峰组页岩岩样资料研究TOC与测井响应值的关系。焦石坝地区为典型的海相页岩储集层,岩性以暗色页岩为主,岩石类型丰富,常见的有含放射虫碳质笔石页岩、碳质笔石页岩、含骨针放射虫笔石页岩、含碳含粉砂泥岩、含碳质笔石页岩以及含粉砂泥岩;主要沉积相是深水陆棚亚相和浅水陆棚亚相沉积的滨外陆棚相;页岩矿物成分主要包括石英、长石、方解石、白云石、黄铁矿和黏土等矿物;页岩有机碳含量总体较高,原始生烃潜力巨大,有机质类型主要为Ⅰ型,为过成熟演化阶段,以生成干气为主;页岩现场含气检测总含气量较高,吸附气量较大;页岩储集空间以孔隙为主,主要为低-中孔、特低渗-低渗储集层。对应的TOC与各测井曲线响应值相关关系表见

    表 1

    5d2d2531f808f9218c84a4277573ef63.gif

    表 1 焦石坝地区2口井的TOC与各测井曲线响应值相关性

    Table 1 Correlation between TOC and logging response of two logging wells in the Jiaoshiba area

    R2

    TOC

    AC

    CNL

    GR

    K

    KTH

    PE

    RD

    RS

    TH

    U

    DEN

    TOC

    1.00

    AC

    0.01

    1.00

    CNL

    0.55

    0.14

    1.00

    GR

    0.32

    0.11

    0.17

    1.00

    K

    0.29

    0.08

    0.06

    0.01

    1.00

    KTH

    0.46

    0.10

    0.24

    0.03

    0.83

    1.00

    PE

    0.50

    0.06

    0.39

    0.02

    0.31

    0.46

    1.00

    RD

    0.04

    0.06

    0.15

    0.15

    0.22

    0.09

    0.06

    1.00

    RS

    0.05

    0.05

    0.17

    0.15

    0.21

    0.08

    0.05

    1.00

    1.00

    TH

    0.47

    0.08

    0.47

    0.05

    0.35

    0.74

    0.41

    0.02

    0.02

    1.00

    U

    0.63

    0.00

    0.35

    0.61

    0.35

    0.53

    0.28

    0.06

    0.06

    0.51

    1.00

    DEN

    0.81

    0.01

    0.59

    0.21

    0.27

    0.43

    0.37

    0.04

    0.04

    0.46

    0.59

    1.00

    表 1 焦石坝地区2口井的TOC与各测井曲线响应值相关性

    Table 1 Correlation between TOC and logging response of two logging wells in the Jiaoshiba area

    图 1

    3c58f29f09f062b2a2f0029686c57561.png

    图 1 建模曲线与TOC相关性关系图

    Fig.1 Relationship between modeling curves and TOC

    如3以下,富含干酪根的储集层密度会有明显的下降,对应TOC的值则变大。但是也可以看出,在TOC含量较低的储集层,干酪根的响应明显的被地层中其他信息所压制,密度与TOC的关系变差。由于干酪根中含有放射性的元素U,所以U曲线及GR曲线也与TOC具有一定相关性,相应的,由自然伽马能谱测井的反演方法可知,TH曲线应与TOC存在负相关关系。通过前人研究可知,石英与TOC为负相关关系,而PE曲线与石英为正相关关系,故PE曲线与TOC呈负相关关系。从相关性分析可知,有些曲线与TOC相关性较为间接,这也是他们相关性差的原因,但是这种间接的相关性能够对TOC的预测提供更多的信息,产生约束,提高TOC的预测精度。这也是本文认为利用机器学习算法预测TOC方法具有研究价值的关键。同时可从

    2 随机森林回归方法

    随机森林是2001年所提出的一种机器学习算法,以决策树为基学习器,通过将若干个建立好的模型所得到的结果进行综合得到一个模型,而最后的预测结果由所有模型的预测结果平均而得。随机森林算法具有分类和回归两种情况,若用于分类,则决策树使用分类树(一般使用C4.5),若用于回归,则决策树使用回归树(一般使用CART,

    图 2

    fc59cfbf16404422a2ead7ddcae88dfa.png

    图 2 随机森林算法训练流程

    Fig.2 Random forest algorithm training process

    (1) 抽样:从训练数据集S中,通过有放回的Boostrasp抽样,生成K组数据集,每组数据集分为被抽中数据与未被抽中数据(被称作袋外数据)2种,每组数据集会通过训练产生一个决策树。

    (2) 生长:通过训练数据对每个决策树进行训练。在每次分节点时,从M个属性中(及M个不同测井的测井响应值)随机选取m个特征(推荐m=log2d),依据Gini指标选取最优特征进行分支充分生长,直到无法再生长为止,不进行剪枝。

    (3) 利用袋外数据检验模型的精度,由于袋外数据未参与建模,其能一定程度上检验模型效果与泛化能力。通过袋外数据的预测误差,确定算法中最佳决策树数目重新进行建模。

    (4) 利用确定的模型对新数据集进行预测,所有决策树的预测结果的平均即为最终的输出结果。

    随机森林的最大优势是每个决策树均利用所有样本中的一部分,并只抽取其中一部分属性进行建模。这种做法能极大的提高模型的多样性,最小化了各棵决策树的相关性。依照集成学习理论来说,基学习器的多样性越强,其泛化能力就越高。

    3 基于随机森林算法的储集层TOC含量计算模型

    为了建立较为可靠的模型以验证模型对于TOC预测问题的适应程度,需要对模型的参数进行确定。对于随机森林来说,最重要参数即是决策树的个数,较少的决策树个数会使得模型的效果无法完全发挥,而较多的决策树个数不仅会使模型的训练与预测速度降低,还会使模型产生过拟合的隐患。将237个样本随机分成5组,其中37个样本作为预测样本,另外200个样本平均分为4组,每组50个样本,以便于进行交叉验证,确定最佳决策树的个数(

    图 3

    24cde92da6941bd273798e2d751f9d90.png

    图 3 各分组样本TOC分布

    Fig.3 TOC distribution of each sample

    图 4

    c66500635732aa29922c92e70e759a24.png

    图 4 随机森林迭代次数与均方误差的关系

    Fig.4 The relationship between random forest iteration times and mean square error

    利用上述200块岩芯数据组成的样本集对模型进行建模,其中决策树颗数设置为500,利用袋外误差去评价模型是否充分学习到数据输入与输出之间的关系。对应的迭代次数与袋外误差的关系见

    图 5

    92d0d4cea7e7f808ccc82c31c22fd8f3.png

    图 5 随机森林迭代次数与袋外均方误差的关系

    Fig.5 Relationship between random forest iteration times and out-of-bag error

    图 6

    861c766277e596fa83d0cf03d10af325.png

    图 6 建模样本精度关系图

    Fig.6 Plots between modeling and analyzed results

    图 7

    c1fe84b383716e7bd1579853171c8779.png

    图 7 预测样本精度关系图

    Fig.7 Plots between predicting and analyzed results

    4 实例分析

    利用已建立好的模型预测A、B井储集层TOC曲线,以确定模型对整口井的预测效果。同时,利用之前具有200个样本的训练样本建立DEN曲线单元拟合模型与CART回归树模型。上述模型对A、B井的预测结果见

    表 2

    5d2d2531f808f9218c84a4277573ef63.gif

    表 2 A、B井各算法预测精度对比表

    Table 2 Comparison of accuracy of A, B well algorithm

    一元

    CART

    回归树

    随机森林

    随机森林

    (无自然伽马曲线)

    A井

    0.41

    0.39

    0.26

    0.29

    B井

    0.46

    0.42

    0.32

    0.37

    表 2 A、B井各算法预测精度对比表

    Table 2 Comparison of accuracy of A, B well algorithm

    5 结论

    (1) 通过对各条测井曲线响应值与TOC的相关性分析可知,对于TOC预测问题来说,密度、铀含量、钍含量、光电吸收截面指数及自然伽马曲线与TOC关系较好,且其响应范围不会受到井位分布的影响。

    (2) 通过对随机森林算法的交叉验证可知,针对TOC问题,当决策树个数为500个时,可对输入曲线与输出TOC的响应关系做到完全学习,对应的输出应较为可靠。

    (3) 通过对实例进行分析,发现该算法对TOC的预测效果较好,预测得到的TOC曲线较为平滑,精度较高。该算法可有效提高TOC的预测精度,为页岩气储集层评价提供帮助。

    展开全文
  • 随机森林回归模型 万事俱备,我们可以来建立随机森林模型啦,首先导入工具包,先建立1000个树试试吧,其他参数先用默认值,之后我们会再深入到调参任务中: # 导入算法 from sklearn.ensemble import ...
  • 本代码含随机森林的分类、回归代码,代码功能相当全面,性能良好,能够支撑项目开发和科研需要。---------
  • 随机森林回归简单示例

    千次阅读 2020-07-24 16:37:03
    # 随机森林回归 rfr = RandomForestRegressor() # 训练 rfr.fit(x_train, y_train) # 预测 保存预测结果 rfr_y_predict = rfr.predict(x_test) # 极端随机森林回归 etr = ExtraTreesRegressor() # 训练 etr.fit(x_...
  • 本文利用Python使用多元线性回归随机森林算法预测笔记本新品的发售价
  • 随机森林——回归预测股票数据的Python实例

    万次阅读 多人点赞 2018-12-06 23:42:04
    在做项目时要用随机森林,查资料发现大多数都是用随机森林做分类,很少见到有回归的。虽然分类随机森林回归随机森林代码实现相差不大,但是...分为随机森林构建和随机森林预测两部分         随机森林构...
  • 用Python实现随机森林回归

    万次阅读 多人点赞 2020-11-02 13:19:38
    这里就对如何进行随机森林回归在算法上进行概述,在参数上进行详述。希望对你的工作有所帮助。 这里,将介绍如何在Python中构建和使用Random Forest回归,而不是仅仅显示代码,同时将尝试了解模型的工作原理。 1.1 ...
  • 本文我们讲讲R语言的决策树和随机森林回归分析。【R语言进行数据挖掘】决策树和随机森林1、使用包party建立决策树这一节学习使用包party里面的函数ctree()为数据集iris建立一个决策树。属性Sepal.Length(萼片长度)...
  • 随机森林---python实现

    2018-04-17 20:01:26
    随机森林---python实现附加训练数据 随机森林就是由许多的决策树组成。每一颗决策树可能误差较大,但是综合在一起最后通过选举的方式产生的结果将非常准确。
  • 机器学习:Python实现随机森林回归

    千次阅读 2020-12-22 20:49:53
    随机森林(Random forests)或随机决策森林(Random decision forests)是一种用于分类、回归和其他任务的集成学习方法,通过在训练时构建大量决策树并输出作为单个树的类(分类)或平均预测(回归)模式的类(class)来操作。...
  • 使用随机森林(R语言)做回归

    千次阅读 2021-01-16 18:00:41
    是一种基于分类树( classification tree) 的算法,它可以用于分类和回归,本文在这里以广西地区1990-2014共25年的GDP数据作为因变量,以INV投资、CON消费、NEX净出口为三个自变量,运用R语言软件做随机森林回归,...
  • 随机森林回归算法

    千次阅读 2019-11-20 16:48:11
    随机森林回归算法原理 随机森林回归模型由多棵回归树构成,且森林中的每一棵决策树之间没有关联,模型的最终输出由森林中的每一棵决策树共同决定。 随机森林的随机性体现在两个方面: 1、样本的随机性,从训练集中...
  • 在网上没有找到根据需求自定义划分训练集和测试集的方法,于是自己琢磨了一下,完全可以运行,并可以得到预测的准确率~~
  • 用R 实现随机森林的分类与回归 Applications of Random Forest using R Classification and Regression
  • 通过本篇文章你可以学习到:1、可视化数据集的重要特征2、估计回归模型的系数3、使用RANSAC拟合高鲁棒性回归模型4、如何来评价回归模型5、多项式回归6、决策树回归7、随机森林回归数据集下载地址:...
  • Matlab TreeBagger随机森林回归实例

    万次阅读 多人点赞 2020-03-12 11:34:33
    随机森林回归是一种机器学习和数据分析领域常用且有效的算法。本文介绍在Matlab平台如何使用自带函数和测试数据实现回归森林,对于随机森林和决策树的相关理论原理将不做太深入的描述。 算法流程 (1)加载Matlab...
  • 从零实现回归随机森林

    千次阅读 2020-12-22 20:49:51
    一、前言回归随机森林作为一种机器学习和数据分析领域常用且有效的算法,对其原理和代码实现过程的掌握是非常有必要的。为此,本文将着重介绍从零开始实现回归随机森林的过程,对于随机森林和决策树的相关理论原理将...
  • 随机森林源代码

    2015-08-18 15:15:56
    国外的基于随机森林思想的分类和回归算法,调试通过

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,111
精华内容 10,444
关键字:

随机森林回归预测