《現(xiàn)代庫(kù)存管理:模型、算法與Python實(shí)現(xiàn)》 課件 第4章-機(jī)器學(xué)習(xí)方法_第1頁(yè)
《現(xiàn)代庫(kù)存管理:模型、算法與Python實(shí)現(xiàn)》 課件 第4章-機(jī)器學(xué)習(xí)方法_第2頁(yè)
《現(xiàn)代庫(kù)存管理:模型、算法與Python實(shí)現(xiàn)》 課件 第4章-機(jī)器學(xué)習(xí)方法_第3頁(yè)
《現(xiàn)代庫(kù)存管理:模型、算法與Python實(shí)現(xiàn)》 課件 第4章-機(jī)器學(xué)習(xí)方法_第4頁(yè)
《現(xiàn)代庫(kù)存管理:模型、算法與Python實(shí)現(xiàn)》 課件 第4章-機(jī)器學(xué)習(xí)方法_第5頁(yè)
已閱讀5頁(yè),還剩40頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

現(xiàn)代庫(kù)存管理:模型、算法與Python實(shí)現(xiàn)第4章機(jī)器學(xué)習(xí)方法數(shù)據(jù)集本節(jié)采用’DC001_SKU044’的周度銷售數(shù)據(jù)作為示例運(yùn)行代碼,展示模型效果導(dǎo)入本章使用的庫(kù)和數(shù)據(jù),并提取想要考察的子數(shù)據(jù)fromchapter2_forecast_basicimport*

importpandasaspd

importnumpyasnp

importwarnings

warnings.filterwarnings("ignore")data_dir=

'../../data/forecast_data/'

weekly_sales_df=pd.read_csv(data_dir+

'weekly_sales_data.csv')

weekly_sales_df['date']=pd.to_datetime(weekly_sales_df['date'])

weekly_sales_df['dc_id']=weekly_sales_df['unit_id'].str[:5]

weekly_sales_df['sku_id']=weekly_sales_df['unit_id'].str[6:]

sku_id=

'SKU044'

sku_df=weekly_sales_df[weekly_sales_df['sku_id']==sku_id]\

.reset_index(drop=True)

print(sku_df.head())4.1特征工程時(shí)間特征機(jī)器學(xué)習(xí)是一種基于特征學(xué)習(xí)的技術(shù),它無法像時(shí)間序列一樣直接對(duì)長(zhǎng)期的趨勢(shì)性、季節(jié)性進(jìn)行建模,因此需要在數(shù)據(jù)集上人為地構(gòu)造和加入時(shí)間特征數(shù)值型和非數(shù)值型的數(shù)據(jù)并不由數(shù)據(jù)的表現(xiàn)形式?jīng)Q定,而應(yīng)該由數(shù)據(jù)之間是否具有順序關(guān)系決定對(duì)于非數(shù)值型的數(shù)據(jù),常用的處理方法是生成啞變量或獨(dú)熱編碼月份是與類別相關(guān)的非數(shù)值型的數(shù)據(jù),2月的數(shù)據(jù)和1月的數(shù)據(jù)之間并沒有嚴(yán)格的順序關(guān)系,通過這一變量可以提取同一月份數(shù)據(jù)之間的相同特征,即季節(jié)性用月份特征生成啞變量,并將其與原始特征數(shù)據(jù)拼接。這里僅保留了前11個(gè)啞變量(即標(biāo)記數(shù)據(jù)屬于1~11月中的哪個(gè)月),這是因?yàn)?2個(gè)啞變量是多重共線的,即由前11個(gè)特征的結(jié)果即可以推出最后一個(gè)特征的取值4.1特征工程時(shí)間特征#時(shí)間特征:年份啞變量

defadd_year_dummy_feature(df):

df_=df.copy()

df_['year']=df_['date'].dt.year

drop_year=

'FEA_year_'

+str(df_['year'].unique().tolist()[-1])

df_=df_.join(pd.get_dummies(df_['year'],prefix='FEA_year')\

.drop(drop_year,axis=

1)).drop('year',axis=

1)

returndf_#時(shí)間特征:月份啞變量

defadd_month_dummy_feature(df):

df_=df.copy()

df_['month']=df_['date'].dt.month

drop_month=

'FEA_month_'

+str(df_['month'].unique().tolist()[-1])

df_=df_.join(pd.get_dummies(df_['month'],prefix='FEA_month')\

.drop(drop_month,axis=

1)).drop('month',axis=

1)

returndf_

具體代碼4.1特征工程時(shí)間特征

具體代碼結(jié)果sku_feature_df=sku_df.copy()

sku_feature_df=add_year_dummy_feature(sku_feature_df)

sku_feature_df=add_month_dummy_feature(sku_feature_df)

print(sku_feature_df.head())unit_iddatesaledc_idsku_idFEA_year_2018FEA_year_2019\

0DC001_SKU0442018-01-073782DC001SKU04410

1DC001_SKU0442018-01-143917DC001SKU04410

2DC001_SKU0442018-01-214008DC001SKU04410

3DC001_SKU0442018-01-284289DC001SKU04410

4DC001_SKU0442018-02-045347DC001SKU044104.1特征工程

FEA_month_1FEA_month_2FEA_month_3FEA_month_4FEA_month_5\

010000

110000

210000

310000

401000

FEA_month_6FEA_month_7FEA_month_8FEA_month_9FEA_month_10\

000000

100000

200000

300000

400000

FEA_month_11

00

10

20

30

40

4.1特征工程近期銷量特征shift方法該方法可以用于DataFrame和Series格式的數(shù)據(jù),按照指定階數(shù)將數(shù)據(jù)滯后或提前,當(dāng)沒有指定階數(shù)時(shí),該方法默認(rèn)將數(shù)據(jù)以滯后一階的方式進(jìn)行移動(dòng)和填充接下來將本節(jié)數(shù)據(jù)按照unit進(jìn)行聚合,之后將各個(gè)unit的周總銷量滯后一周sku_df.groupby(['unit_id'])['sale'].shift()4.1特征工程近期銷量特征在進(jìn)行本周預(yù)測(cè)時(shí),上一周的銷量可以作為特征因此,可以將經(jīng)過滯后的數(shù)據(jù)按照索引拼接到原始數(shù)據(jù)上作為特征;也可以通過指定shift方法中的periods參數(shù)構(gòu)造多個(gè)不同階數(shù)的滯后序列,用之前幾周的各周總銷量作為本周預(yù)測(cè)的特征接下來我們以將待預(yù)測(cè)周的前四周銷量均值作為近期銷量特征加入數(shù)據(jù)集中為例進(jìn)行代碼展示4.1特征工程近期銷量特征#銷量特征:近期非空銷量均值

#這里選取非空銷量是幫助時(shí)間序列中最早的單元建立特征

defadd_latest_sales_feature(df,window_size=4):

df_=df.copy()

fea_vals=[np.nan]

foriinrange(1,len(df_)):

unit=df_.iloc[i]['unit_id']

date=df_.iloc[i]['date']

unit_his=df_[(df_['unit_id']==unit)&(df_['date']<date)]

unit_his=unit_his[~unit_his['sale'].isna()].copy()

iflen(unit_his)>

0:

unit_his=unit_his.sort_values(by='date',ascending=True)

fea_vals.append(unit_his\

.iloc[max((len(unit_his)-window_size),0):]

['sale'].mean())

else:

fea_vals.append(np.nan)

df_['FEA_latest_'

+str(window_size)]=fea_vals

returndf_sku_feature_df=add_latest_sales_feature(sku_feature_df)

print(sku_feature_df.head())4.1特征工程近期銷量特征unit_iddatesaledc_idsku_idFEA_year_2018FEA_year_2019

0DC001_SKU0442018-01-073782DC001SKU04410

1DC001_SKU0442018-01-143917DC001SKU04410

2DC001_SKU0442018-01-214008DC001SKU04410

3DC001_SKU0442018-01-284289DC001SKU04410

4DC001_SKU0442018-02-045347DC001SKU04410

FEA_month_1FEA_month_2FEA_month_3FEA_month_4FEA_month_5\

010000

110000

210000

310000

4010004.1特征工程(接上頁(yè))FEA_month_6FEA_month_7FEA_month_8FEA_month_9FEA_month_10\

000000

100000

200000

300000

400000

FEA_month_11FEA_latest_4

00NaN

103782.000000

203849.500000

303902.333333

403999.0000004.1特征工程近期銷量特征給定測(cè)試起始日期和待測(cè)試unit,從已經(jīng)生成的特征數(shù)據(jù)中篩選并劃分訓(xùn)練集和測(cè)試集由于構(gòu)造的近期銷量特征在第一期時(shí)沒有對(duì)應(yīng)的數(shù)據(jù),對(duì)缺失值做補(bǔ)零處理#數(shù)據(jù)切分

test_start_date=pd.Timestamp(2020,4,1)

unit_id=

'DC001_SKU044'

unit_df=sku_feature_df[sku_feature_df['unit_id']==unit_id].reset_index()

train_df=unit_df[unit_df['date']<test_start_date]

test_df=unit_df[unit_df['date']>=test_start_date]

X_train=train_df[[colforcolintrain_df.columnsifcol.find('FEA')!=-1]]

X_train=X_train.fillna(0)

y_train=train_df.set_index('date')['sale']

X_test=test_df[[colforcolintest_df.columnsifcol.find('FEA')!=-1]]

X_test=X_test.fillna(0)

y_test=test_df.set_index('date')['sale']4.1特征工程Tsfresh庫(kù)介紹Tsfresh庫(kù)是Python中一個(gè)可以自動(dòng)進(jìn)行時(shí)序特征提取的庫(kù)可以從一段時(shí)間序列數(shù)據(jù)中自動(dòng)提取眾多經(jīng)典指標(biāo)(如最大值、最小值、波峰數(shù)量等)及延伸指標(biāo)(例如平方形式等)該庫(kù)提供接口函數(shù)extract_features()供使用者進(jìn)行序列特征提取,還提供了select_features()來自動(dòng)剔除無關(guān)變量,也可以通過extract_relevant_features()完成以上兩個(gè)步驟4.1特征工程Tsfresh庫(kù)介紹利用Tsfresh庫(kù)的extract_features函數(shù)進(jìn)行時(shí)序特征提取代碼示例該方法會(huì)返回從原始序列中提取的特征數(shù)據(jù),其列名簡(jiǎn)單記述了所提取的特征信息。如果打印特征表格的部分列名,返回的特征既有方差、偏度、峰度、數(shù)據(jù)長(zhǎng)度等通用的統(tǒng)計(jì)指標(biāo),也包含了最大最小值位置、大于或小于均值的樣本數(shù)量、重復(fù)數(shù)據(jù)個(gè)數(shù)等并不常用的統(tǒng)計(jì)信息fromtsfreshimportextract_features

tsf_df=sku_df[['unit_id','date','sale']]

tsf_features=extract_features(tsf_df,column_id='unit_id',

column_sort='date')FeatureExtraction:100%|██████████|18/18[00:03<00:00,4.81it/s]4.2正則化和學(xué)習(xí)目標(biāo)正則化主要目的---解決過擬合問題機(jī)器學(xué)習(xí)方法中,樣本內(nèi)平均誤差被稱為經(jīng)驗(yàn)風(fēng)險(xiǎn),模型參數(shù)擬合常以最小化經(jīng)驗(yàn)風(fēng)險(xiǎn)為目標(biāo),這稱為經(jīng)驗(yàn)風(fēng)險(xiǎn)最小化原則(empiricalriskminimization,ERM),數(shù)學(xué)表達(dá)形式為:

4.2正則化和學(xué)習(xí)目標(biāo)正則化主要目的---解決過擬合問題

4.3超參數(shù)選擇這里的參數(shù)是指影響模型架構(gòu)的外生參數(shù),例如決策樹中的最大深度,神經(jīng)網(wǎng)絡(luò)中的隱藏層數(shù)量等方法:網(wǎng)格搜索通過預(yù)先給定一些參數(shù)可能的取值范圍,然后遍歷這些參數(shù)組合,并通過交叉驗(yàn)證選擇泛化性能最好的一個(gè)參數(shù)組合??梢酝ㄟ^sklearn庫(kù)實(shí)現(xiàn)優(yōu)點(diǎn):可以遍歷所有參數(shù)組合,通過完全搜索可以給出所有參數(shù)組合中的最優(yōu)結(jié)果缺點(diǎn):速度較慢fromsklearn.model_selectionimportGridSearchCV,TimeSeriesSplit

defpara_tuning(x_train,y_train,model,cv_params,

scoring='neg_mean_squared_error',cv=5):

time_cv=TimeSeriesSplit(n_splits=cv).split((x_train))

optimized_GBM=GridSearchCV(estimator=model,

param_grid=cv_params,

scoring=scoring,

cv=time_cv,verbose=1,n_jobs=10)

optimized_GBM.fit(x_train,y_train)

returnoptimized_GBM.best_params_4.3超參數(shù)選擇方法:隨機(jī)搜索從所有可選參數(shù)中隨機(jī)挑選參數(shù)組合并進(jìn)行評(píng)估,可以以較小的計(jì)算開銷完成較大規(guī)模的待調(diào)整參數(shù)選擇fromsklearn.model_selectionimportRandomizedSearchCV

defrandom_para_tuning(x_train,y_train,model,cv_params,

cv=5,random_seed=0,iter_num=50,

scoring='neg_mean_squared_error',):

"""

cv_params:可選參數(shù)范圍

scoring:評(píng)估指標(biāo)

cv:交叉驗(yàn)證折數(shù)

random_seed:隨機(jī)種子,用以固定隨機(jī)搜索的結(jié)果

iter_num:用戶指定的最小隨機(jī)搜索次數(shù),這里由該值和總參數(shù)組合的5%取大得到

"""4.3超參數(shù)選擇(接上頁(yè))

length=

1

forvincv_params.values():

length*=len(v)

time_cv=TimeSeriesSplit(n_splits=cv).split((x_train))

np.random.seed(random_seed)

optimized_GBM=RandomizedSearchCV(estimator=model,

param_distributions=cv_params,

scoring=scoring,

n_iter=max(iter_num,

int(length*

0.05)),

cv=time_cv,verbose=1,n_jobs=-1)

optimized_GBM.fit(x_train,y_train)

returnoptimized_GBM.best_params_4.4單一模型線性回歸和廣義線性模型

#線性模型

fromsklearn.linear_modelimportLinearRegression

model=LinearRegression().fit(X_train,y_train)

y_pred=pd.Series(model.predict(X_test),index=y_test.index)

print(f'線性模型的預(yù)測(cè)準(zhǔn)確率為{pred_evaluate(y_test,y_pred)}')4.4單一模型線性回歸和廣義線性模型

4.4單一模型線性回歸和廣義線性模型

#LASSO

fromsklearn.linear_modelimportLasso

cv_params_linear={'alpha':[0.001,0.05,0.1,0.2,0.3,0.5]}

params_lasso=para_tuning(X_train,y_train,Lasso(),cv_params_linear)

model=Lasso(**params_lasso).fit(X_train,y_train)

y_pred=pd.Series(model.predict(X_test),index=y_test.index)

print(f'LASSO模型預(yù)測(cè)準(zhǔn)確率為{pred_evaluate(y_test,y_pred)}')

print(f'最優(yōu)參數(shù)是{params_lasso}')4.4單一模型線性回歸和廣義線性模型

4.4單一模型樹模型決策樹是一種在分類和回歸任務(wù)中被廣泛使用的模型。樹模型對(duì)學(xué)習(xí)特征和學(xué)習(xí)目標(biāo)的關(guān)系不做任何假設(shè),僅依靠對(duì)數(shù)據(jù)集的劃分完成從特征到目標(biāo)的映射樹結(jié)構(gòu)基本概念樹結(jié)構(gòu)由節(jié)點(diǎn)和子樹構(gòu)成,類似于自然樹木的分支過程,每一個(gè)父母節(jié)點(diǎn)通過分支延伸,連接到子節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)可以同時(shí)是父母節(jié)點(diǎn)和子節(jié)點(diǎn),但只能擁有一個(gè)父母節(jié)點(diǎn);如果一個(gè)節(jié)點(diǎn)不再繼續(xù)連接其他節(jié)點(diǎn),那么該節(jié)點(diǎn)被稱為葉子節(jié)點(diǎn)。從父母節(jié)點(diǎn)開始的樹被稱為一棵子樹,根節(jié)點(diǎn)沒有父母節(jié)點(diǎn),是一棵樹的開始4.4單一模型樹模型決策樹模型中,一個(gè)節(jié)點(diǎn)包含一組數(shù)據(jù),一個(gè)分支指定了一種特征,父母節(jié)點(diǎn)中的數(shù)據(jù)會(huì)根據(jù)分支所指定的特征被分到各個(gè)子節(jié)點(diǎn)中。一棵樹的深度由根節(jié)點(diǎn)到葉子節(jié)點(diǎn)的最大長(zhǎng)度決定。從根節(jié)點(diǎn)到每一個(gè)葉子節(jié)點(diǎn)的分支路徑對(duì)應(yīng)了一組特征,該葉子節(jié)點(diǎn)所有的數(shù)據(jù)都共享這些特征決策樹模型的核心思路在于分割目標(biāo)空間,并為每一個(gè)子空間分配一個(gè)最優(yōu)擬合值,如何進(jìn)行分支(分割目標(biāo)空間)和如何為一個(gè)葉子節(jié)點(diǎn)的數(shù)據(jù)賦予一個(gè)學(xué)習(xí)結(jié)果(如何擬合最優(yōu)值)是主要的問題4.4單一模型樹模型CART樹模型是最主流的決策樹模型,以CART樹模型為例4.4單一模型樹模型

4.4單一模型樹模型CART樹會(huì)遍歷每一個(gè)特征和對(duì)應(yīng)特征值,并嘗試以此作為切分點(diǎn),計(jì)算出對(duì)應(yīng)的殘差平方和MSE。如果這一劃分能夠減小當(dāng)前的MSE,則采用該劃分,并對(duì)兩個(gè)子樹進(jìn)行同樣的處理如果決策樹能夠無限分裂,即對(duì)特征空間的劃分足夠細(xì)致,那么最終將得到一棵每個(gè)葉子節(jié)點(diǎn)僅包含唯一數(shù)據(jù)的決策樹,這樣的模型在已知數(shù)據(jù)集上可以實(shí)現(xiàn)百分百的準(zhǔn)確率,但過度擬合了噪音,會(huì)導(dǎo)致面對(duì)未知數(shù)據(jù)集時(shí)模型表現(xiàn)較差在決策樹模型中,剪枝技術(shù)和預(yù)先限制決策樹深度是常用的正則化方法,這些方法可以有效降低模型的自由度,從而避免過度擬合4.4單一模型樹模型

4.4單一模型樹模型CART回歸樹代碼示例#決策樹

fromsklearn.treeimportDecisionTreeRegressor

cv_params_tree={'max_depth':[i*

10

foriinlist(range(1,11))],

'max_leaf_nodes':[i*

10

foriinlist(range(1,11))],

'max_features':["log2","sqrt"],

'min_impurity_decrease':[0.05,0.1,0.2,0.5]}

params_tree=random_para_tuning(X_train,y_train,

DecisionTreeRegressor(),

cv_params_tree,random_seed=123456)

model=DecisionTreeRegressor(**params_tree).fit(X_train,y_train)

y_pred=pd.Series(model.predict(X_test),index=y_test.index)

print(f'樹模型模型預(yù)測(cè)準(zhǔn)確率為{pred_evaluate(y_test,y_pred)}')4.4單一模型神經(jīng)網(wǎng)絡(luò)神經(jīng)網(wǎng)絡(luò)仿照人腦中細(xì)胞體和突觸組成的神經(jīng)元結(jié)構(gòu)設(shè)計(jì)感知機(jī)(perceptron)是人工神經(jīng)網(wǎng)絡(luò)中的最小數(shù)字處理結(jié)構(gòu),它往往作為神經(jīng)網(wǎng)絡(luò)中的一個(gè)節(jié)點(diǎn)存在。一個(gè)感知機(jī)接收到傳入的數(shù)值和權(quán)重后將進(jìn)行兩步處理:首先將傳入數(shù)據(jù)按照權(quán)重加和,之后將加和值通過激活函數(shù)轉(zhuǎn)化為本節(jié)點(diǎn)輸出值,對(duì)于非輸出層的感知機(jī)而言,該值會(huì)和帶權(quán)重連接共同作為下一層感知機(jī)的輸入數(shù)據(jù)4.4單一模型神經(jīng)網(wǎng)絡(luò)如果采用非線性的激活函數(shù),并將多個(gè)感知機(jī)組合、進(jìn)行多層堆疊,這樣的網(wǎng)絡(luò)結(jié)構(gòu)配合恰當(dāng)?shù)倪B接層權(quán)重,可以以任意精度逼近任意函數(shù),這就是神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)4.4單一模型神經(jīng)網(wǎng)絡(luò)

4.4單一模型神經(jīng)網(wǎng)絡(luò)神經(jīng)網(wǎng)絡(luò)python代碼示例#神經(jīng)網(wǎng)絡(luò)

fromsklearn.neural_networkimportMLPRegressor

cv_params_nn={

'hidden_layer_sizes':[3,5,10],

'activation':['logistic','relu','tanh'],

'solver':['adam'],

'alpha':[0.01,0.05],

'learning_rate':['adaptive'],

'learning_rate_init':[0.001,0.005,0.01]}

params_nn=random_para_tuning(X_train,y_train,

MLPRegressor(),

cv_params_nn,random_seed=123456)

model=MLPRegressor(**params_nn).fit(X_train,y_train)

y_pred=pd.Series(model.predict(X_test),index=y_test.index)

print(f'簡(jiǎn)單神經(jīng)網(wǎng)絡(luò)模型模型預(yù)測(cè)準(zhǔn)確率為{pred_evaluate(y_test,y_pred)}')4.5集成方法Bagging:Boostrap,RandomForestBagging方法是Boostrap方法(即有放回抽樣)的一個(gè)應(yīng)用Boostrap方法從原始數(shù)據(jù)中有放回采樣生成一個(gè)新的數(shù)據(jù)集,重復(fù)使用多次該方法,便可以利用原始數(shù)據(jù)集合生成一批新的訓(xùn)練集合可以保證約有36.8%的原始數(shù)據(jù)不出現(xiàn)在一個(gè)訓(xùn)練數(shù)據(jù)集中,因此這些集合中的數(shù)據(jù)不完全相同。在各個(gè)集合上訓(xùn)練同一個(gè)學(xué)習(xí)模型,學(xué)習(xí)得到的模型也會(huì)具有一定的差異性在面對(duì)一組新數(shù)據(jù)時(shí),所有的模型都會(huì)給出一個(gè)預(yù)測(cè)結(jié)果,而最終的結(jié)果則基于所有模型的結(jié)果得到(如簡(jiǎn)單平均)優(yōu)點(diǎn):原始數(shù)據(jù)不夠豐富時(shí),可以起到豐富數(shù)據(jù)的作用;減少隨機(jī)誤差的干擾,更好地反映特征和目標(biāo)之間的關(guān)系,減小預(yù)測(cè)方差4.5集成方法Bagging:Boostrap,RandomForest隨機(jī)森林(RandomForest)方法是使用Bagging的最知名算法之一通過Bagging方法在給定數(shù)據(jù)集上訓(xùn)練多棵決策樹,最終通過簡(jiǎn)單平均的方法集合這些決策樹的輸出。除了對(duì)訓(xùn)練數(shù)據(jù)隨機(jī)采樣外,該算法還對(duì)訓(xùn)練特征進(jìn)行隨機(jī)采樣,降低不同決策樹之間的相關(guān)性,從而能夠增加算法的準(zhǔn)確性算法特有參數(shù)n_estimators:決策樹數(shù)量,一般而言決策樹數(shù)量越多,最終得到的模型效果越好,但代價(jià)是計(jì)算速度往往較慢n_jobs:并行任務(wù)的數(shù)量,由于決策樹的各個(gè)學(xué)習(xí)模型之間是獨(dú)立的,因此可以同時(shí)訓(xùn)練多棵決策樹,從而加快模型整體的訓(xùn)練速度。當(dāng)該參數(shù)取-1時(shí)表明調(diào)用所有可用的cpu線程進(jìn)行訓(xùn)練4.4單一模型Bagging:Boostrap,RandomForest隨機(jī)森林算法python代碼示例#隨機(jī)森林

fromsklearn.ensembleimportRandomForestRegressor

cv_params_rf={'max_depth':[i*

10

foriinlist(range(1,5))],

'max_leaf_nodes':[i*

10

foriinlist(range(1,5))],

'max_features':["log2","sqrt"],

'n_estimators':[10,30,50,100],

'n_jobs':[10]}

params_rf=random_para_tuning(X_train,y_train,

RandomForestRegressor(),

cv_params_rf,random_seed=123456)

model=RandomForestRegressor(**params_rf).fit(X_train,y_train)

y_pred=pd.Series(model.predict(X_test),index=y_test.index)

print(f'隨機(jī)森林模型模型預(yù)測(cè)準(zhǔn)確率為{pred_evaluate(y_test,y_pred)}')4.5集成方法Boosting:Adaboost,GBDTBoosting方法的基本思想是不斷加強(qiáng)模型對(duì)于“錯(cuò)誤”的學(xué)習(xí)Boosting方法中各個(gè)學(xué)習(xí)模型是序貫的,下一個(gè)學(xué)習(xí)模型的訓(xùn)練數(shù)據(jù)將影響或構(gòu)成上一個(gè)學(xué)習(xí)模型的訓(xùn)練數(shù)據(jù),最終的學(xué)習(xí)結(jié)果是各個(gè)學(xué)習(xí)器的集成。通過不斷提取誤差中的有用信息,Boosting使得模型的學(xué)習(xí)能力得到提升Adaboost算法采用了比較自動(dòng)化的樣本選擇方式,每一輪訓(xùn)練都按照一定的分布從原始數(shù)據(jù)集中采樣出訓(xùn)練集,而這一分布依賴上一輪訓(xùn)練中各組數(shù)據(jù)的訓(xùn)練誤差可以讓分類任務(wù)中每一輪預(yù)測(cè)錯(cuò)誤的樣本點(diǎn)在下一輪訓(xùn)練集的構(gòu)造中以更大的概率被選擇,在回歸任務(wù)中,則是會(huì)依據(jù)上一輪的預(yù)測(cè)誤差改變改變每個(gè)樣本點(diǎn)被選擇的概率當(dāng)完成所有基學(xué)習(xí)器的訓(xùn)練后,AdaBoost按照加權(quán)表決的方法生成集成模型,每個(gè)基學(xué)習(xí)器的表決權(quán)重和其正確率正相關(guān)4.5集成方法Boosting:Adaboost,GBDTGBDT算法基于樹模型的集成模型直接將上一輪學(xué)習(xí)后的錯(cuò)誤作為下一輪學(xué)習(xí)的目標(biāo),如此反復(fù)幾次,最終將各輪學(xué)習(xí)結(jié)果相加,得到最終的預(yù)測(cè)結(jié)果難點(diǎn)是如何快速高效地計(jì)算XGBoost和LightGBM分別在GBDT框架下做出了改進(jìn)。這兩種方法是目前最常用的預(yù)測(cè)模型4.5集成方法Boosting:Adaboost,GBDTXGboost算法針對(duì)GBDT框架下的損失函數(shù)以及對(duì)樹模型的擬合細(xì)節(jié)做出了改進(jìn),使得算法給出的模型具有更好的泛化能力和計(jì)算效率4.5集成方法Boosting:Adaboost,GBDTXGboost算法

常用參數(shù)

4.5集成方法Bagging:Boostrap,RandomForestXGboost算法python代碼示例#XGBoost

fromxgboostimportXGBRegressor

cv_params_xgboost={'max_depth':[2,5,10],

'eta':[0.01

*iforiinlist(range(1,6))],

'gamma':[0.05

*iforiinlist(range(1,6))],

'lambda':[0.5

*iforiinlist(range(1,6))]}

params_xgboost=random_para_tuning(X_train,y_train,

XGBRegressor(),

cv_params_xgboost,random_seed=123456)

model=XGBRegressor(**params_xgboost).fit(X_train,y_train)

y_pred=pd.Series(model.pr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論