GBDT去預測時序數據

       最近有一個需求,需要用到GBDT算法去實現對時序數據進行預測(迴歸任務),數據是從2011年1月到2020年4月份6個不同城市的房地產交易數據,由於在網上沒有找到對應的基於時序數據來用GBDT算法的博客或者資料,我也去github上面找個,出現最多的是,基於特徵數據對標籤進行預測,實現如分類或者回歸問題,基於此,想寫一個關於時序數據處理的簡單介紹,後面有代碼和數據地址

 

一 數據介紹

     6個城市分別是,重慶,杭州,洛陽,南充,蕪湖,對於特徵如下圖所示: 迴歸任務爲基於歷史數據對2020年1-4月的特徵數據進行預測,故一共需要預測13個特徵值

二 模型訓練

   簡單思路是把年和月作爲特徵,然後用GBDT學習後面特徵的值(即後面13列),當然如果需要模型更魯棒一點,可以加入其他列特徵數據,對目標特徵進行擬合,這裏只是簡單介紹,故而只解釋最簡單的一種。

def GBDT_train(X,Y):
    #print(X.head())
    #print(Y.head())
    for i in range(num_of_index):#訓練16個模型,即輸出值
        #print(Y.iloc[:200,i].head())
        #x_train, x_test, y_train, y_test = train_test_split(X, Y.iloc[:200,i].astype("str").values)
        x_train, x_test, y_train, y_test = train_test_split(X, Y.iloc[:,i])

        # 模型訓練,使用GBDT算法   默認75%做訓練 , 25%做測試

        '''GradientBoostingRegressor參數介紹
          @n_estimators: 子模型的數量,默認爲100
          @max_depth   :最大深度 ,默認3
          @min_samples_split :分裂最小樣本數
          @learning_rate :學習率
        '''
        gbr = GradientBoostingRegressor(n_estimators=200, max_depth=2, min_samples_split=2, learning_rate=0.1)
        gbr.fit(x_train, y_train.ravel())
        joblib.dump(gbr, name+"train_model_"+ str(i) +"_result.m")   # 保存模型

        y_gbr = gbr.predict(x_train)
        y_gbr1 = gbr.predict(x_test)
        acc_train = gbr.score(x_train, y_train)
        acc_test = gbr.score(x_test, y_test)
        print(name+"train_model_"+ str(i)  +"_result.m"+'訓練準確率',acc_train)
        print(name+"train_model_"+ str(i)  +"_result.m"+'驗證準確率',acc_test)

 

三 模型預測

用了裏面自帶的方式,這裏沒什麼好說的

# 加載模型並預測
def GBDT_Predict( ):

    X_Pred = [2020,4]
    print("預測:2020-4")
    X_Pred = np.reshape(X_Pred, (1, -1))
    for i in range(num_of_index):
        gbr = joblib.load(name+"train_model_"+ str(i)  +"_result.m")    # 加載模型
        #test_data = pd.read_csv(r"./data_test.csv")
        test_y = gbr.predict(X_Pred)
        test_y = np.reshape(test_y, (1, -1))
        print(test_y)

 

四   實驗結果

實驗結果還是不錯的,如果加入其他特徵效果和泛化能力可能會更好!

!!!!代碼和數據在這裏!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章