精华内容
下载资源
问答
  • XGBoost provides a parallel tree boosting (also known as GBDT, GBM) that solve many data science problems in a fast and accurate way. The same code runs on major distributed environment (Kubernetes, ...
  • 学生考试 使用XGBoost回归模型预测学生的写作成绩
  • 根据以上描述,我们很容易可以判断出这是一个回归预测类的问题。当然,要想进行预测,我们首先要做的就是先看看数据的格式以及内容(由于参数太多,我就不一一列举了,大家可以直接去网上看,下面我简单贴个图): ...

    前天偶然在一个网站上看到一个数据分析的比赛(sofasofa),自己虽然学习一些关于机器学习的内容,但是并没有在比赛中实践过,于是我带着一种好奇心参加了这次比赛。

    赛题:足球运动员身价估计


    比赛概述

    本比赛为个人练习赛,主要针对于于数据新人进行自我练习、自我提高,与大家切磋。

    练习赛时限:2018-03-05 至 2020-03-05

    任务类型:回归

    背景介绍: 每个足球运动员在转会市场都有各自的价码。本次数据练习的目的是根据球员的各项信息和能力值来预测该球员的市场价值。

    这里写图片描述
    根据以上描述,我们很容易可以判断出这是一个回归预测类的问题。当然,要想进行预测,我们首先要做的就是先看看数据的格式以及内容(由于参数太多,我就不一一列举了,大家可以直接去网上看,下面我简单贴个图):
    这里写图片描述

    简单了解了数据的格式以及大小以后,由于没有实践经验,我就凭自己的感觉,单纯的认为一下几个字段可能是最重要的:

    字段含义
    club该球员所属的俱乐部。该信息已经被编码。
    league该球员所在的联赛。已被编码。
    potential球员的潜力。数值变量。
    international_reputation国际知名度。数值变量。

    巧合的是刚好这些字段都没有缺失值,我很开心啊,心想着可以直接利用XGBoost模型进行预测了。具体XGBoost的使用方法,可以参考:XGBoost以及官方文档XGBoost Parameters。说来就来,我开始了coding工作,下面就贴出我的第一版代码:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @File  : soccer_value.py
    # @Author: Huangqinjian
    # @Date  : 2018/3/22
    # @Desc  :
    
    import pandas as pd
    import matplotlib.pyplot as plt
    import xgboost as xgb
    import numpy as np
    from xgboost import plot_importance
    from sklearn.preprocessing import Imputer
    
    
    def loadDataset(filePath):
        df = pd.read_csv(filepath_or_buffer=filePath)
        return df
    
    
    def featureSet(data):
        data_num = len(data)
        XList = []
        for row in range(0, data_num):
            tmp_list = []
            tmp_list.append(data.iloc[row]['club'])
            tmp_list.append(data.iloc[row]['league'])
            tmp_list.append(data.iloc[row]['potential'])
            tmp_list.append(data.iloc[row]['international_reputation'])
            XList.append(tmp_list)
        yList = data.y.values
        return XList, yList
    
    
    def loadTestData(filePath):
        data = pd.read_csv(filepath_or_buffer=filePath)
        data_num = len(data)
        XList = []
        for row in range(0, data_num):
            tmp_list = []
            tmp_list.append(data.iloc[row]['club'])
            tmp_list.append(data.iloc[row]['league'])
            tmp_list.append(data.iloc[row]['potential'])
            tmp_list.append(data.iloc[row]['international_reputation'])
            XList.append(tmp_list)
        return XList
    
    
    def trainandTest(X_train, y_train, X_test):
        # XGBoost训练过程
        model = xgb.XGBRegressor(max_depth=5, learning_rate=0.1, n_estimators=160, silent=False, objective='reg:gamma')
        model.fit(X_train, y_train)
    
        # 对测试集进行预测
        ans = model.predict(X_test)
    
        ans_len = len(ans)
        id_list = np.arange(10441, 17441)
        data_arr = []
        for row in range(0, ans_len):
            data_arr.append([int(id_list[row]), ans[row]])
        np_data = np.array(data_arr)
    
        # 写入文件
        pd_data = pd.DataFrame(np_data, columns=['id', 'y'])
        # print(pd_data)
        pd_data.to_csv('submit.csv', index=None)
    
        # 显示重要特征
        # plot_importance(model)
        # plt.show()
    
    if __name__ == '__main__':
        trainFilePath = 'dataset/soccer/train.csv'
        testFilePath = 'dataset/soccer/test.csv'
        data = loadDataset(trainFilePath)
        X_train, y_train = featureSet(data)
        X_test = loadTestData(testFilePath)
        trainandTest(X_train, y_train, X_test)
    

    然后我就把得到的结果文件submit.csv提交到网站上,看了结果,MAE为106.6977,排名24/28,很不理想。不过这也在预料之中,因为我基本没有进行特征处理。

    我当然不满意啦,一直想着怎么能提高准确率呢?后来就想到了可以利用一下scikit这个库啊!在scikit中包含了一个特征选择的模块sklearn.feature_selection,而在这个模块下面有以下几个方法:

    1. Removing features with low variance(剔除低方差的特征)
    2. Univariate feature selection(单变量特征选择)
    3. Recursive feature elimination(递归功能消除)
    4. Feature selection using SelectFromModel(使用SelectFromModel进行特征选择)

    我首先想到的是利用单变量特征选择的方法选出几个跟预测结果最相关的特征。根据官方文档,有以下几种得分函数来检验变量之间的依赖程度:

    • 对于回归问题: f_regression, mutual_info_regression
    • 对于分类问题: chi2, f_classif, mutual_info_classif

    由于这个比赛是一个回归预测问题,所以我选择了f_regression这个得分函数(刚开始我没有注意,错误使用了分类问题中的得分函数chi2,导致程序一直报错!心很累~)

    f_regression的参数:

    sklearn.feature_selection.f_regression(X, y, center=True)
    X:一个多维数组,大小为(n_samples, n_features),即行数为训练样本的大小,列数为特征的个数
    y:一个一维数组,长度为训练样本的大小
    return:返回值为特征的F值以及p值

    不过在进行这个操作之前,我们还有一个重大的任务要完成,那就是对于空值的处理!幸运的是scikit中也有专门的模块可以处理这个问题:Imputation of missing values

    sklearn.preprocessing.Imputer的参数:
    sklearn.preprocessing.Imputer(missing_values=’NaN’, strategy=’mean’, axis=0, verbose=0, copy=True)

    其中strategy代表对于空值的填充策略(默认为mean,即取所在列的平均数进行填充):

    • strategy=‘median’,代表取所在列的中位数进行填充

    • strategy=‘most_frequent’, 代表取所在列的众数进行填充

    axis默认值为0:

    • axis=0,代表按列进行填充
    • axis=1,代表按行进行填充

    其他具体参数可以参考:sklearn.preprocessing.Imputer

    根据以上,我对数据进行了一些处理:

    from sklearn.feature_selection import f_regression
    from sklearn.preprocessing import Imputer
    
    imputer = Imputer(missing_values='NaN', strategy='mean', axis=0)
    imputer.fit(data.loc[:, 'rw':'lb'])
    x_new = imputer.transform(data.loc[:, 'rw':'lb'])
    data_num = len(x_new)
    XList = []
    yList = []
    for row in range(0, data_num):
        tmp_list = []
        tmp_list.append(x_new[row][0])
        tmp_list.append(x_new[row][1])
        tmp_list.append(x_new[row][2])
        tmp_list.append(x_new[row][3])
        tmp_list.append(x_new[row][4])
        tmp_list.append(x_new[row][5])
        tmp_list.append(x_new[row][6])
        tmp_list.append(x_new[row][7])
        tmp_list.append(x_new[row][8])
        tmp_list.append(x_new[row][9])
        XList.append(tmp_list)
        yList.append(data.iloc[row]['y'])
    
    F = f_regression(XList, yList)
    print(len(F))
    print(F)
    
    

    测试结果:

    2
    (array([2531.07587725, 1166.63303449, 2891.97789543, 2531.07587725,
           2786.75491791, 2891.62686404, 3682.42649607, 1394.46743196,
            531.08672792, 1166.63303449]), array([0.00000000e+000, 1.74675421e-242, 0.00000000e+000, 0.00000000e+000,
           0.00000000e+000, 0.00000000e+000, 0.00000000e+000, 1.37584507e-286,
           1.15614152e-114, 1.74675421e-242]))
    

    根据以上得到的结果,我选取了rw,st,lw,cf,cam,cm(选取F值相对大的)几个特征加入模型之中。以下是我改进后的代码:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @File  : soccer_value.py
    # @Author: Huangqinjian
    # @Date  : 2018/3/22
    # @Desc  :
    
    import pandas as pd
    import matplotlib.pyplot as plt
    import xgboost as xgb
    import numpy as np
    from xgboost import plot_importance
    from sklearn.preprocessing import Imputer
    
    
    def loadDataset(filePath):
        df = pd.read_csv(filepath_or_buffer=filePath)
        return df
    
    
    def featureSet(data):
        imputer = Imputer(missing_values='NaN', strategy='mean', axis=0)
        imputer.fit(data.loc[:, ['rw', 'st', 'lw', 'cf', 'cam', 'cm']])
        x_new = imputer.transform(data.loc[:, ['rw', 'st', 'lw', 'cf', 'cam', 'cm']])
        data_num = len(data)
        XList = []
        for row in range(0, data_num):
            tmp_list = []
            tmp_list.append(data.iloc[row]['club'])
            tmp_list.append(data.iloc[row]['league'])
            tmp_list.append(data.iloc[row]['potential'])
            tmp_list.append(data.iloc[row]['international_reputation'])
            tmp_list.append(data.iloc[row]['pac'])
            tmp_list.append(data.iloc[row]['sho'])
            tmp_list.append(data.iloc[row]['pas'])
            tmp_list.append(data.iloc[row]['dri'])
            tmp_list.append(data.iloc[row]['def'])
            tmp_list.append(data.iloc[row]['phy'])
            tmp_list.append(data.iloc[row]['skill_moves'])
            tmp_list.append(x_new[row][0])
            tmp_list.append(x_new[row][1])
            tmp_list.append(x_new[row][2])
            tmp_list.append(x_new[row][3])
            tmp_list.append(x_new[row][4])
            tmp_list.append(x_new[row][5])
            XList.append(tmp_list)
        yList = data.y.values
        return XList, yList
    
    
    def loadTestData(filePath):
        data = pd.read_csv(filepath_or_buffer=filePath)
        imputer = Imputer(missing_values='NaN', strategy='mean', axis=0)
        imputer.fit(data.loc[:, ['rw', 'st', 'lw', 'cf', 'cam', 'cm']])
        x_new = imputer.transform(data.loc[:, ['rw', 'st', 'lw', 'cf', 'cam', 'cm']])
        data_num = len(data)
        XList = []
        for row in range(0, data_num):
            tmp_list = []
            tmp_list.append(data.iloc[row]['club'])
            tmp_list.append(data.iloc[row]['league'])
            tmp_list.append(data.iloc[row]['potential'])
            tmp_list.append(data.iloc[row]['international_reputation'])
            tmp_list.append(data.iloc[row]['pac'])
            tmp_list.append(data.iloc[row]['sho'])
            tmp_list.append(data.iloc[row]['pas'])
            tmp_list.append(data.iloc[row]['dri'])
            tmp_list.append(data.iloc[row]['def'])
            tmp_list.append(data.iloc[row]['phy'])
            tmp_list.append(data.iloc[row]['skill_moves'])
            tmp_list.append(x_new[row][0])
            tmp_list.append(x_new[row][1])
            tmp_list.append(x_new[row][2])
            tmp_list.append(x_new[row][3])
            tmp_list.append(x_new[row][4])
            tmp_list.append(x_new[row][5])
            XList.append(tmp_list)
        return XList
    
    
    def trainandTest(X_train, y_train, X_test):
        # XGBoost训练过程
        model = xgb.XGBRegressor(max_depth=5, learning_rate=0.1, n_estimators=160, silent=False, objective='reg:gamma')
        model.fit(X_train, y_train)
    
        # 对测试集进行预测
        ans = model.predict(X_test)
    
        ans_len = len(ans)
        id_list = np.arange(10441, 17441)
        data_arr = []
        for row in range(0, ans_len):
            data_arr.append([int(id_list[row]), ans[row]])
        np_data = np.array(data_arr)
    
        # 写入文件
        pd_data = pd.DataFrame(np_data, columns=['id', 'y'])
        # print(pd_data)
        pd_data.to_csv('submit.csv', index=None)
    
        # 显示重要特征
        # plot_importance(model)
        # plt.show()
    
    if __name__ == '__main__':
        trainFilePath = 'dataset/soccer/train.csv'
        testFilePath = 'dataset/soccer/test.csv'
        data = loadDataset(trainFilePath)
        X_train, y_train = featureSet(data)
        X_test = loadTestData(testFilePath)
        trainandTest(X_train, y_train, X_test)
    
    

    再次提交,这次MAE为 42.1227,排名16/28。虽然提升了不少,不过距离第一名还是有差距,仍需努力。

    接下来,我们来处理一下下面这个字段:

    这里写图片描述
    由于这两个字段是标签,需要进行处理以后(标签标准化)才用到模型中。我们要用到的函数是sklearn.preprocessing.LabelEncoder

        le = preprocessing.LabelEncoder()
        le.fit(['Low', 'Medium', 'High'])
        att_label = le.transform(data.work_rate_att.values)
        # print(att_label)
        def_label = le.transform(data.work_rate_def.values)
        # print(def_label)
    

    当然你也可以使用pandas直接来处理离散型特征变量,具体内容可以参考:pandas使用get_dummies进行one-hot编码。顺带提一句,scikit中也有一个方法可以来处理,可参考:sklearn.preprocessing.OneHotEncoder

    调整后的代码:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @File  : soccer_value.py
    # @Author: Huangqinjian
    # @Date  : 2018/3/22
    # @Desc  :
    
    import pandas as pd
    import matplotlib.pyplot as plt
    import xgboost as xgb
    from sklearn import preprocessing
    import numpy as np
    from xgboost import plot_importance
    from sklearn.preprocessing import Imputer
    from sklearn.cross_validation import train_test_split
    
    
    def featureSet(data):
        imputer = Imputer(missing_values='NaN', strategy='mean', axis=0)
        imputer.fit(data.loc[:, ['rw', 'st', 'lw', 'cf', 'cam', 'cm']])
        x_new = imputer.transform(data.loc[:, ['rw', 'st', 'lw', 'cf', 'cam', 'cm']])
    
        le = preprocessing.LabelEncoder()
        le.fit(['Low', 'Medium', 'High'])
        att_label = le.transform(data.work_rate_att.values)
        # print(att_label)
        def_label = le.transform(data.work_rate_def.values)
        # print(def_label)
    
        data_num = len(data)
        XList = []
        for row in range(0, data_num):
            tmp_list = []
            tmp_list.append(data.iloc[row]['club'])
            tmp_list.append(data.iloc[row]['league'])
            tmp_list.append(data.iloc[row]['potential'])
            tmp_list.append(data.iloc[row]['international_reputation'])
            tmp_list.append(data.iloc[row]['pac'])
            tmp_list.append(data.iloc[row]['sho'])
            tmp_list.append(data.iloc[row]['pas'])
            tmp_list.append(data.iloc[row]['dri'])
            tmp_list.append(data.iloc[row]['def'])
            tmp_list.append(data.iloc[row]['phy'])
            tmp_list.append(data.iloc[row]['skill_moves'])
            tmp_list.append(x_new[row][0])
            tmp_list.append(x_new[row][1])
            tmp_list.append(x_new[row][2])
            tmp_list.append(x_new[row][3])
            tmp_list.append(x_new[row][4])
            tmp_list.append(x_new[row][5])
            tmp_list.append(att_label[row])
            tmp_list.append(def_label[row])
            XList.append(tmp_list)
        yList = data.y.values
        return XList, yList
    
    
    def loadTestData(filePath):
        data = pd.read_csv(filepath_or_buffer=filePath)
        imputer = Imputer(missing_values='NaN', strategy='mean', axis=0)
        imputer.fit(data.loc[:, ['rw', 'st', 'lw', 'cf', 'cam', 'cm']])
        x_new = imputer.transform(data.loc[:, ['rw', 'st', 'lw', 'cf', 'cam', 'cm']])
    
        le = preprocessing.LabelEncoder()
        le.fit(['Low', 'Medium', 'High'])
        att_label = le.transform(data.work_rate_att.values)
        # print(att_label)
        def_label = le.transform(data.work_rate_def.values)
        # print(def_label)
    
        data_num = len(data)
        XList = []
        for row in range(0, data_num):
            tmp_list = []
            tmp_list.append(data.iloc[row]['club'])
            tmp_list.append(data.iloc[row]['league'])
            tmp_list.append(data.iloc[row]['potential'])
            tmp_list.append(data.iloc[row]['international_reputation'])
            tmp_list.append(data.iloc[row]['pac'])
            tmp_list.append(data.iloc[row]['sho'])
            tmp_list.append(data.iloc[row]['pas'])
            tmp_list.append(data.iloc[row]['dri'])
            tmp_list.append(data.iloc[row]['def'])
            tmp_list.append(data.iloc[row]['phy'])
            tmp_list.append(data.iloc[row]['skill_moves'])
            tmp_list.append(x_new[row][0])
            tmp_list.append(x_new[row][1])
            tmp_list.append(x_new[row][2])
            tmp_list.append(x_new[row][3])
            tmp_list.append(x_new[row][4])
            tmp_list.append(x_new[row][5])
            tmp_list.append(att_label[row])
            tmp_list.append(def_label[row])
            XList.append(tmp_list)
        return XList
    
    
    def trainandTest(X_train, y_train, X_test):
        # XGBoost训练过程
        model = xgb.XGBRegressor(max_depth=6, learning_rate=0.05, n_estimators=500, silent=False, objective='reg:gamma')
        model.fit(X_train, y_train)
    
        # 对测试集进行预测
        ans = model.predict(X_test)
    
        ans_len = len(ans)
        id_list = np.arange(10441, 17441)
        data_arr = []
        for row in range(0, ans_len):
            data_arr.append([int(id_list[row]), ans[row]])
        np_data = np.array(data_arr)
    
        # 写入文件
        pd_data = pd.DataFrame(np_data, columns=['id', 'y'])
        # print(pd_data)
        pd_data.to_csv('submit.csv', index=None)
    
        # 显示重要特征
        # plot_importance(model)
        # plt.show()
    
    if __name__ == '__main__':
        trainFilePath = 'dataset/soccer/train.csv'
        testFilePath = 'dataset/soccer/test.csv'
        data = pd.read_csv(trainFilePath)
        X_train, y_train = featureSet(data)
        X_test = loadTestData(testFilePath)
        trainandTest(X_train, y_train, X_test)
    

    这次只提高到了40.8686。暂时想不到提高的方法了,还请大神多多赐教!


    欢迎加入QQ学习交流群(内有干货):
    这里写图片描述

    展开全文
  • 对经典问题 波士顿房价进行回归预测 一、加载波士顿数据集并观察数据的shape。 from sklearn.model_selection import train_test_split def del_data(): #建立处理数据集的方法,便于直接带入xgboost算法 (train_...

    对经典问题 波士顿房价进行回归预测

    一、加载波士顿数据集并观察数据的shape。

    from sklearn.model_selection import train_test_split
    def del_data(): #建立处理数据集的方法,便于直接带入xgboost算法
        (train_data, train_targets), (test_data, test_targets) = boston_housing.load_data()
        print(train_data.shape)
        print(train_targets.shape)
        print(test_data.shape)
        print(test_targets.shape)
    

    在这里插入图片描述
    由图像可知道,波士顿训练集的房价特征集是404个 13个维度的特征集,测试集为102。

    二、xgboost回归是否需要归一化

    答案:否,xgboos底层还是根据决策树去做的,是通过最优分裂点进行优化的。和树有关的决策算法过程是不需要进行归一标准化的。

    三、xgboost可调节参数

    答案:任何一个机器学习的算法中都存在自己的Parameters,参数集可以调节。

    XGboost的管方文档 对于python的 api调用接口可以看下方的网址:

    https://xgboost.readthedocs.io/en/latest/python/python_api.html

    参数名解释含义
    max_depth-基本学习器的最大树深度, 通过这个值避免过拟合,默认值是6
    learning_rate-学习率,评价训练的速度,若值设置过低学习慢,设置低影响迭代最优值
    n_estimators-决策树的数量,这些都是决定过拟合和欠拟合
    objective-基于此函数去进行求解最优化回归树
    gamma-惩罚项系数,指定节点分裂所需的最小损失函数下降值
    alpha-L1正则化系数
    ……-……

    从官方文档中能看到可以调节的参数有非常的多,但是在实际试验中,调用算法 除了较为重要的一些参

    数可以采用网格搜索的方法进行调参,其他系数,若没有强大的数学功底和理解底层的思想,用默认的

    参数就是最有的解。

    max_depth,learning_rate,n_estimators 是可以调节的参数。

    四、下面是代码实现的过程

    from sklearn.metrics import mean_squared_error
    import xgboost as xgb
    from keras.datasets import boston_housing
    
    def main():
        (train_data, train_targets), (test_data, test_targets) = boston_housing.load_data()
    
        model = xgb.XGBRegressor(max_depth=6,learning_rate=0.05,n_estimators=100,randam_state=42)
        model.fit(train_data,train_targets)
        test_predict=model.predict(test_data)
        train_predict = model.predict(train_data)
    
        msetest=mean_squared_error(test_targets,test_predict)
        msetrain=mean_squared_error(train_targets,train_predict)
        print(msetest)
        print(msetrain)
        print(test_targets)
        print(abs(test_predict-test_targets))
    
    

    model 是构建的模型。通过对训练集的学习来做对未来的预测。
    msetest,msetrain是你自己的评估结果 可以通过这两个值来判断你的模型构建是否优秀 。
    msetest 是模型对测试集预测得到结果的mse值, msetrain 是模型对训练集预测得到结果的mse值。
    在这里插入图片描述

    在这里插入图片描述
    由此能看出,在训练集表现的非常好,测试集表现还比较差。需要通过优化模型来进行调参。这里我就

    不做累述去调参,后期会更新如何调参的文章,这篇主要是说原理。

    五、原理通俗解释。
    在这里插入图片描述
    obj是目标函数 ,整个算法就是通过最优化这个目标函数来实现的。
    在这里插入图片描述
    这个是正则项为了防止模型的复杂度,抑制模型复杂度。

    通过对在这里插入图片描述
    这个的优化,本算法采取已知第t-1步回归树的形成,去推导第t步回归树的形成,进而可以优化目标函数。

    具体的优化方法就是泰勒展开,已知t-1步的状态在这里插入图片描述
    优化到这样的形式,具体也可以看官方文档和论文讲的非常详细,我就是从简单理解和实现的角度去讲述。

    最终的展示结果为
    在这里插入图片描述

    六、简单理解

    其实就是根据决策树的思想将n个样例m个特征,划分每一个特征的回归决策树,找到最优点进行分割,最终得到n个样例m个特征的最优划分点。由最初迭代至最终的算法。
    整体的思路框架大概就是这样的。欢迎讨论
    文章不易 希望能够。。。。。。。。。。。。

    展开全文
  • 指路博客: https://blog.csdn.net/sinat_35512245/article/details/79668363
    展开全文
  • 分别使用回归树与XGBoost回归,预测实验三中给出的Advertising.csv数据集,并与传统线性回归预测方法进行比较。 具体要求: 首先进行数据标准化。 测试集和训练集比例分别为30%和70%。 使用均方误差来评价预测的...

    分别使用回归树与XGBoost回归,预测实验三中给出的Advertising.csv数据集,并与传统线性回归预测方法进行比较。

    具体要求:

    1. 首先进行数据标准化。
    2. 测试集和训练集比例分别为30%和70%。
    3. 使用均方误差来评价预测的好坏程度。
    4. 对于XGBoost请尝试使用交叉验证找到n_estimators的最优参数值。n_estimators的取值范围为[100-1000]。

     

    回归树:

    import pandas as pd
    from sklearn.model_selection import train_test_split
    from sklearn.tree import DecisionTreeRegressor
    from sklearn.metrics import mean_squared_error
    
    train_path = r'Advertising.csv'
    
    def read_train_file(path):
        data = pd.read_csv(path)
        return  data
    
    #回归树
    def RegressionTree(data):
        X = data[['TV', 'Radio', 'Newspaper']]
        Y = data['Sales']
        x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.3, random_state=1)
    
        dt_reg = DecisionTreeRegressor(max_depth=5)
        dt_reg.fit(x_train, y_train)
        score = dt_reg.score(x_test, y_test)
        print("回归树预测准确率: ",score,"%")
        y_pred = dt_reg.predict(x_test)
        print("回归树均方误差:",mean_squared_error(y_test, y_pred))
    
    if __name__ == '__main__':
        print("read train file.....")
        data=read_train_file(train_path)
        RegressionTree(data)
    

    XGBoost回归:

    通过交叉验证找到n_estimators的最优参数值(调参):

    import pandas as pd
    from pylab import *
    from sklearn.model_selection import train_test_split
    import xgboost as xgb
    from xgboost.sklearn import XGBRegressor
    train_path = r'Advertising.csv'
    
    
    data = pd.read_csv(train_path)
    X = data[['TV', 'Radio', 'Newspaper']]
    Y = data['Sales']
    x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.3, random_state=1)
    
    def modelfit(alg, dtrain,dlable,useTrainCV=True, cv_folds=5, early_stopping_rounds=50):
        def rmse(predictions, targets):
            return np.sqrt(((predictions - targets) ** 2).mean())
        if useTrainCV:
            xgb_param = alg.get_xgb_params()
            xgtrain = xgb.DMatrix(dtrain, label=dlable)
            cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], nfold=cv_folds,
                              metrics='rmse', early_stopping_rounds=early_stopping_rounds,
                              callbacks=[xgb.callback.print_evaluation(show_stdv=True), xgb.callback.early_stop(early_stopping_rounds)])
            print("n_estimators:",cvresult.shape[0])
            alg.set_params(n_estimators=cvresult.shape[0])
              # Fit the algorithm on the data
            alg.fit(dtrain, dlable, eval_metric='rmse')
            # Predict training set:
            #preds = alg.predict(dtrain)
            # Print model report:
            #print("\nModel Report:",rmse(preds,dtrain.get_label()))
    
    xgb1 = XGBRegressor(
            learning_rate =0.1,
            n_estimators=1000,
            max_depth=5,
            min_child_weight=1,
            gamma=0,
            subsample=0.8,
            colsample_bytree=0.8,
            objective= 'gpu:reg:linear',
            nthread=4,
            scale_pos_weight=1,
            seed=27)
    modelfit(xgb1, X, Y,)
    

     

    XGBoost模型:

    import pandas as pd
    from sklearn.model_selection import train_test_split
    import xgboost as xgb
    from sklearn.metrics import mean_squared_error
    from sklearn.preprocessing import StandardScaler
    
    train_path = r'Advertising.csv'
    
    def read_train_file(path):
        data = pd.read_csv(path)
        return  data
    
    def xgboost(data):
        X = data[['TV', 'Radio', 'Newspaper']]
        # 标准化特征值
        sc = StandardScaler()
        sc.fit(X)
        X = sc.transform(X)
        Y = data['Sales']
        x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.3, random_state=1)
        #n_estimators的值已调出最优值 187
        model = xgb.XGBRegressor(max_depth=5, learning_rate=0.1, n_estimators= 187 , silent=False, objective='reg:gamma')
        model.fit(x_train, y_train)
        # 对测试集进行预测
        score = model.score(x_test, y_test)
        print("xgboost预测准确率: ", score, "%")
        y_pred = model.predict(x_test)
        print("xgboost均方误差:", mean_squared_error(y_test, y_pred))
    
    
    if __name__ == '__main__':
        print("read train file.....")
        data=read_train_file(train_path)
        xgboost(data)
    
    

    展开全文
  • xgboost进行多输出回归预测

    千次阅读 2020-07-08 15:56:18
    sklearn提供了一个包装类MultiOutputRegressor,这里我使用的xgboost进行预测。 思路很简单,其实就是根据标签依次进行预测。 代码如下: from sklearn.multioutput import MultiOutputRegressor import xgboost...
  • XGBOOST回归用法和官方参数解释

    千次阅读 2019-10-24 18:53:17
    XGBoost Parameters 本文连接官网地址:https://xgboost.readthedocs.io/en/latest/parameter.html Before running XGBoost, we must set three types of parameters: general parameters, booster parameters and ...
  • Xgboost调参过程中,可以...下面这个例子是使用Xgboost进行回归任务时使用GridSearchCV(). import pandas as pd import numpy as np from sklearn.model_selection import GridSearchCV #网格搜索 from sklear...
  • ML之XGBoost:利用XGBoost算法对波士顿数据集回归预测(模型调参【2种方法,ShuffleSplit+GridSearchCV、TimeSeriesSplitGSCV】、模型评估) 目录 利用XGBoost算法对波士顿数据集回归预测 T1、ShuffleSplit+GSCV...
  • 股票价格竟是可预测Python集成算法二、关于XGboost回归预测锂电池的健康状态(SOH)现在做预测锂电池的健康状态SOH,电池的电压、电压差、温度、温度差作为模型的特征输入,相应的健康状态SOH作为模型的输出,模型用...
  • xgboost回归损失函数自定义【一】

    千次阅读 2019-01-28 17:31:00
    这里以xgboost回归预测为例,介绍一下objective函数的定制过程。一个简单的例子如下: def customObj1(real, predict): grad = predict - real hess = np.power(np.abs(grad), 0.5) return grad, hess ...
  • 数据概况 特征工程 XGBoost 调参过程 参考文章
  • xgboost本身是集成树模型,在了解其原理之前,先对树模型的机器学习基础知识做一定介绍。 监督学习元素 (1)学习模型(即已知x,求出y的模型表达式) 比如:线性模型; 逻辑回归模型; (2)参数 从数据当中学习得到...
  • 用DNN做回归预测对比XGBoost

    千次阅读 多人点赞 2021-08-19 20:24:34
    我就从一个初学者的角度出发,对我们常见的回归问题运用神经网络对和集成学习大杀器XGBoost进行预测效果对比。 气温数据集下载地址:https://pan.baidu.com/s/1KNYfb2S7ct4KsIJxUFz2Uw 提取码:DJNB 数据集探索 ...
  • 以XGBoost原生模型,开发实际工控预测场景实践,过程中分析出检测值精度、业务标注不完整、安全报警与生产过程相互印证...本文第一篇先给出分析模型XGBoost回归线性模型,以及涉及到参数说明。较为完整内容详见下篇。
  • XGBoost不仅仅可以用来做分类还可以做时间序列方面的预测,而且已经有人做的很好,可以见最后的案例。 应用一:XGBoost用来做预测 ————————————————————————————————...
  • 在深入了解XGBoost算法之前,大家可以先了解一下:GBDT回归、GBDT分类、正则化。 1、简介 XGBoost:又叫 eXtreme Gradient Boosting、gradient boosting、multiple additive regression trees、stochastic ...
  • XGboost预测

    2021-07-05 16:06:43
    import xgboost_regression import numpy as np from numpy import loadtxt from xgboost import XGBClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accur.
  • ML之回归预测:利用十类机器学习算法(线性回归、kNN、SVM、决策树、随机森林、极端随机树、SGD、提升树、LightGBM、XGBoost)对波士顿数据集【13+1,506】回归预测(模型评估、推理并导到csv) 目录 利用十类机器...
  • 《用Python中的自定义损失函数和正则化来拟合线性模型》 假设有100个样本点,每个样本点的feature是10维(9个基础变量和1个截距),为了更好地展现实验效果,我们为样本添加噪声: # Generate predictors X_...
  • 时间序列预测(三)—— Xgboost模型

    万次阅读 多人点赞 2019-05-20 15:24:55
    时间序列预测(三)—— Xgboost模型 文章链接 (一)数据预处理 (二)AR模型(自回归模型) (三)Xgboost模型 (四)LSTM模型 (五)Prophet模型(自回归模型模型原理   Xgboost(Extreme Gradient Boost)...
  • 最近因为项目需要,临时抱佛脚开始熟悉XGBoost算法和ARIMA算法 真是书到用时方恨少啊(捂脸暴风哭泣 趁着项目准备阶段,索性好好整理一下这一领域的知识,省的等到调参的时候心发慌。虽然都说深度学习领域调参是一门...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,336
精华内容 3,734
关键字:

xgboost回归预测模型