XGBoost Demo2

本文介绍了一种使用XGBoost进行股票价格预测的方法。通过从MongoDB获取历史股票数据并利用XGBoost进行训练,最终实现了对未来股票价格的预测。文章详细介绍了数据准备、模型训练及预测过程。
from pymongo import MongoClient
from sklearn.linear_model import LinearRegression
from sklearn.externals import joblib
import time
import numpy as np
import pandas as pd
import xgboost as xgb
from sklearn.cross_validation import train_test_split
import os
import csv


conn2 = MongoClient('192.168.12.152', 27017)
tradeDB = conn2.autoTrading  # 连接mydb数据库,没有则自动创建
tradeTable2 = tradeDB.stockDataTable2
tradeNameTable=tradeDB.stockNameTable


"limit with  time and stock"
def limitWithStock(oldtime,newtime,symbol):
    """限定条件: oldtime<date<newtime"""
    return tradeTable2.find({"timess": {
    '$gt': oldtime,
    '$lt': newtime
},"stock":symbol})


"limit with Time"
def limitCondition(oldtime,newtime):
    """限定条件: oldtime<date<newtime"""
    return tradeTable2.find({"timess": {
    '$gt': oldtime,
    '$lt': newtime
}})


def getTrainData():
    """获取所以数据的train & valid """
    train_Mx = []
    train_My = []

    """ ==================================train=============================================== """
    trainData = limitCondition(20070101, 20090101)
    # print(trainData.count())
    for item in trainData:
        train_Mx.append(item['feature'])
        train_My.append(item['label'])

    # """ ==================================Valid=============================================== """
    # validData = limitCondition(20160101, 20500101)
    # for item in validData:
    #     valid_Mx.append(item['feature'])
    #     valid_My.append(item['label'])
    # , valid_Mx, valid_My
    return [train_Mx,train_My]


def trans_df(a):
    feature = np.array(a[0])
    label = np.array(a[1])
    label = label.reshape(-1, 1)
    data = np.hstack((feature, label))
    data = pd.DataFrame(data)
    data.rename(columns={4: 'y'}, inplace=True)
    return data


def xg_boost_train(params,num_rounds,xgb_train,stopping_rounds):
    plst = list(params.items())
    train_xy, val = train_test_split(xgb_train, test_size=0.3, random_state=1)
    y = train_xy.y
    X = train_xy.drop(['y'], axis=1)
    val_y = val.y

    val_X = val.drop(['y'], axis=1)

    xgb_val = xgb.DMatrix(val_X, label=val_y)
    xgb_train = xgb.DMatrix(X, label=y)
    watchlist = [(xgb_train, 'train'), (xgb_val, 'val')]
    model = xgb.train(plst, xgb_train, num_rounds, watchlist, early_stopping_rounds=stopping_rounds)
    model.save_model('./xgb.model')  # 用于存储训练出的模型
    print("best best_ntree_limit", model.best_ntree_limit)


if __name__ == '__main__':
    a=getTrainData()
    data=trans_df(a)

    train_data,test_data = train_test_split(data, test_size=0.2, random_state=1)
    params = {
        'booster': 'gbtree',
        'objective': 'reg:linear',  # 多分类的问题
        'gamma': 0.1,  # 用于控制是否后剪枝的参数,越大越保守,一般0.10.2这样子。
        'max_depth': 12,  # 构建树的深度,越大越容易过拟合
        'lambda': 2,  # 控制模型复杂度的权重值的L2正则化项参数,参数越大,模型越不容易过拟合。
        'subsample': 0.7,  # 随机采样训练样本
        'colsample_bytree': 0.7,  # 生成树时进行的列采样
        'min_child_weight': 3,
        # 这个参数默认是 1,是每个叶子里面 h 的和至少是多少,对正负样本不均衡时的 0-1 分类而言
        # ,假设 h  0.01 附近,min_child_weight  1 意味着叶子节点中最少需要包含 100 个样本。
        # 这个参数非常影响结果,控制叶子节点中二阶导的和的最小值,该参数值越小,越容易 overfitting        'silent': 0,  # 设置成1则没有运行信息输出,最好是设置为0.
        'eta': 0.007,  # 如同学习率
        'seed': 1000,
        'nthread': 7,  # cpu 线程数
        # 'eval_metric': 'auc'
    }
    num_rounds = 50
    stopping_rounds = 100
    xg_boost_train(params, num_rounds, train_data, stopping_rounds)
    print("跑到这里了model.predict")
    model = xgb.Booster(model_file='./xgb.model')#LOAD模型
    test_data = test_data.drop(['y'], axis=1)
    test_data = xgb.DMatrix(test_data)
    preds = model.predict(test_data)
    preds_list = preds.tolist()
    print(preds_list)
<think> 我们根据用户的问题:“我想下载XGBoost算法相关资源 请问XGBoost算法的下载方法”,结合提供的引用内容,来给出回答。 注意:用户想要下载的是“XGBoost算法相关资源”,这可能包括算法实现的代码库、文档、数据集等。但根据引用内容,我们主要看到的是关于XGBoost算法的介绍和在Python中的使用。 引用[2]提到:“在Python生态圈中,有专门为XGBoost算法而设计的开源库——XGBoost。”以及“本文也将使用XGBoost库实现算法”。 引用[4]展示了使用Python的XGBoost库进行模型训练的例子。 因此,我们可以推断用户可能是想下载XGBoost的Python库,或者相关的代码资源。 常见的下载方法: 1. 通过Python的包管理工具pip进行安装,这是最常用的方式。 2. 从XGBoost的GitHub仓库下载源代码。 另外,引用[5]提到了一些技术细节,但未涉及下载。 因此,回答应重点介绍如何通过pip安装XGBoost,以及如何从GitHub获取源代码。 同时,考虑到用户可能还需要文档和示例,我们可以提供官方文档的链接。 根据以上分析,我们给出如下回答: </think>### XGBoost算法资源下载指南 XGBoost作为高效的梯度提升框架,可通过以下方式获取相关资源: 1. **Python库安装(推荐方式)** 使用pip命令安装官方Python库(需已安装Python环境): ```bash pip install xgboost ``` 安装后即可在代码中引用: ```python import xgboost as xgb model = xgb.XGBClassifier() # 分任务示例[^4] ``` 2. **源代码下载** 访问GitHub仓库获取最新源码: - 官方仓库:https://github.com/dmlc/xgboost - 可通过`git clone`或直接下载ZIP压缩包 3. **文档资源** 官方文档包含API说明和教程: - 英文文档:https://xgboost.readthedocs.io - 中文社区文档(非官方):https://xgboost.apachecn.org 4. **附加资源** - 数据集:Kaggle平台(https://www.kaggle.com/datasets)提供实战数据集 - 论文:原始论文《XGBoost: A Scalable Tree Boosting System》可在arXiv下载 - 案例库:官方GitHub的`demo`目录包含多语言示例
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值