人工智能和機(jī)器學(xué)習(xí)之分類(lèi)算法:梯度提升機(jī)(GBM):特征選擇與特征工程_第1頁(yè)
人工智能和機(jī)器學(xué)習(xí)之分類(lèi)算法:梯度提升機(jī)(GBM):特征選擇與特征工程_第2頁(yè)
人工智能和機(jī)器學(xué)習(xí)之分類(lèi)算法:梯度提升機(jī)(GBM):特征選擇與特征工程_第3頁(yè)
人工智能和機(jī)器學(xué)習(xí)之分類(lèi)算法:梯度提升機(jī)(GBM):特征選擇與特征工程_第4頁(yè)
人工智能和機(jī)器學(xué)習(xí)之分類(lèi)算法:梯度提升機(jī)(GBM):特征選擇與特征工程_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

人工智能和機(jī)器學(xué)習(xí)之分類(lèi)算法:梯度提升機(jī)(GBM):特征選擇與特征工程1人工智能和機(jī)器學(xué)習(xí)之分類(lèi)算法:梯度提升機(jī)(GBM)1.1簡(jiǎn)介1.1.1梯度提升機(jī)的基本概念梯度提升機(jī)(GradientBoostingMachine,GBM)是一種強(qiáng)大的機(jī)器學(xué)習(xí)算法,屬于集成學(xué)習(xí)方法中的一種。它通過(guò)迭代地添加弱學(xué)習(xí)器(通常是決策樹(shù))來(lái)逐步減少預(yù)測(cè)誤差,最終形成一個(gè)強(qiáng)學(xué)習(xí)器。GBM的核心思想是利用前一個(gè)模型的殘差作為當(dāng)前模型的訓(xùn)練目標(biāo),通過(guò)梯度下降法來(lái)優(yōu)化損失函數(shù),從而實(shí)現(xiàn)模型的提升。GBM的工作流程如下:初始化模型,通常是一個(gè)簡(jiǎn)單的模型,如平均值。對(duì)于每一棵樹(shù):計(jì)算當(dāng)前模型的殘差(即實(shí)際值與當(dāng)前模型預(yù)測(cè)值之間的差異)。使用殘差作為目標(biāo)變量,訓(xùn)練一個(gè)新的決策樹(shù)。根據(jù)學(xué)習(xí)率調(diào)整新樹(shù)的預(yù)測(cè)值,然后將其加到當(dāng)前模型的預(yù)測(cè)值上。更新模型。重復(fù)步驟2,直到達(dá)到預(yù)設(shè)的樹(shù)的數(shù)量或模型收斂。1.1.2GBM在分類(lèi)任務(wù)中的應(yīng)用GBM在分類(lèi)任務(wù)中,可以處理二分類(lèi)或多分類(lèi)問(wèn)題。它通過(guò)定義適當(dāng)?shù)膿p失函數(shù)(如二元交叉熵?fù)p失函數(shù)或多元對(duì)數(shù)損失函數(shù))來(lái)適應(yīng)分類(lèi)任務(wù)。在每次迭代中,GBM會(huì)根據(jù)損失函數(shù)的梯度來(lái)訓(xùn)練新的決策樹(shù),以最小化分類(lèi)錯(cuò)誤。1.1.2.1示例:使用Python的sklearn庫(kù)實(shí)現(xiàn)GBM分類(lèi)#導(dǎo)入必要的庫(kù)

fromsklearn.datasetsimportload_iris

fromsklearn.model_selectionimporttrain_test_split

fromsklearn.ensembleimportGradientBoostingClassifier

fromsklearn.metricsimportaccuracy_score

#加載數(shù)據(jù)集

iris=load_iris()

X=iris.data

y=iris.target

#劃分訓(xùn)練集和測(cè)試集

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)

#初始化GBM分類(lèi)器

gbm=GradientBoostingClassifier(n_estimators=100,learning_rate=0.1,max_depth=3,random_state=42)

#訓(xùn)練模型

gbm.fit(X_train,y_train)

#預(yù)測(cè)

y_pred=gbm.predict(X_test)

#計(jì)算準(zhǔn)確率

accuracy=accuracy_score(y_test,y_pred)

print(f"GBM分類(lèi)器的準(zhǔn)確率:{accuracy}")在這個(gè)例子中,我們使用了sklearn庫(kù)中的GradientBoostingClassifier來(lái)實(shí)現(xiàn)GBM分類(lèi)。數(shù)據(jù)集是經(jīng)典的鳶尾花數(shù)據(jù)集,包含150個(gè)樣本,每個(gè)樣本有4個(gè)特征和3個(gè)類(lèi)別。我們首先加載數(shù)據(jù),然后將其劃分為訓(xùn)練集和測(cè)試集。接下來(lái),初始化GBM分類(lèi)器,設(shè)置樹(shù)的數(shù)量為100,學(xué)習(xí)率為0.1,樹(shù)的最大深度為3。訓(xùn)練模型后,我們對(duì)測(cè)試集進(jìn)行預(yù)測(cè),并計(jì)算預(yù)測(cè)的準(zhǔn)確率。GBM在分類(lèi)任務(wù)中的優(yōu)勢(shì)在于它能夠處理非線性關(guān)系和高維數(shù)據(jù),同時(shí)通過(guò)特征選擇和特征工程進(jìn)一步提高模型的性能。1.2特征選擇與特征工程特征選擇和特征工程是機(jī)器學(xué)習(xí)中非常重要的步驟,它們直接影響模型的性能和解釋性。在GBM中,特征選擇可以通過(guò)以下幾種方式進(jìn)行:基于特征重要性:GBM在訓(xùn)練過(guò)程中會(huì)計(jì)算每個(gè)特征的重要性,可以基于此來(lái)選擇特征。遞歸特征消除:使用遞歸特征消除(RecursiveFeatureElimination,RFE)來(lái)逐步去除不重要的特征?;谙嚓P(guān)性:去除與目標(biāo)變量相關(guān)性低的特征,或去除高度相關(guān)的特征以減少多重共線性。特征工程則包括特征創(chuàng)建、轉(zhuǎn)換和組合,以提高模型的預(yù)測(cè)能力。例如,可以創(chuàng)建新的特征,如特征的組合或交互項(xiàng);可以對(duì)特征進(jìn)行歸一化或標(biāo)準(zhǔn)化;也可以使用特征編碼,如獨(dú)熱編碼或標(biāo)簽編碼,來(lái)處理分類(lèi)特征。1.2.1示例:特征重要性分析#繼續(xù)使用上述代碼中的GBM分類(lèi)器

#計(jì)算特征重要性

feature_importances=gbm.feature_importances_

#打印特征重要性

forfeature,importanceinzip(iris.feature_names,feature_importances):

print(f"{feature}:{importance}")這段代碼展示了如何使用GBM分類(lèi)器來(lái)計(jì)算特征重要性。feature_importances_屬性返回一個(gè)數(shù)組,表示每個(gè)特征的重要性。通過(guò)遍歷這個(gè)數(shù)組和特征名稱(chēng),我們可以了解哪些特征對(duì)模型的預(yù)測(cè)貢獻(xiàn)最大。特征工程和特征選擇是提高GBM分類(lèi)性能的關(guān)鍵步驟,通過(guò)這些步驟,我們可以構(gòu)建更強(qiáng)大、更穩(wěn)健的模型。2人工智能和機(jī)器學(xué)習(xí)之分類(lèi)算法:梯度提升機(jī)(GBM)特征工程2.1特征工程2.1.1數(shù)據(jù)預(yù)處理數(shù)據(jù)預(yù)處理是特征工程的第一步,它包括清洗數(shù)據(jù)、處理缺失值、異常值檢測(cè)和標(biāo)準(zhǔn)化數(shù)據(jù)等操作。這些步驟對(duì)于提高模型的性能至關(guān)重要,因?yàn)樗鼈兇_保了數(shù)據(jù)的質(zhì)量和一致性。2.1.1.1示例:處理缺失值importpandasaspd

fromsklearn.imputeimportSimpleImputer

#創(chuàng)建一個(gè)包含缺失值的數(shù)據(jù)集

data={

'Age':[25,30,None,35,40],

'Income':[50000,60000,70000,None,90000],

'Gender':['M','F','M','F',None]

}

df=pd.DataFrame(data)

#使用中位數(shù)填充數(shù)值型特征的缺失值

imputer=SimpleImputer(strategy='median')

df['Age']=imputer.fit_transform(df[['Age']])

#使用眾數(shù)填充分類(lèi)特征的缺失值

imputer=SimpleImputer(strategy='most_frequent')

df['Gender']=imputer.fit_transform(df[['Gender']])

#查看處理后的數(shù)據(jù)

print(df)2.1.2特征編碼技術(shù)特征編碼技術(shù)用于將分類(lèi)特征轉(zhuǎn)換為數(shù)值特征,以便機(jī)器學(xué)習(xí)模型能夠理解和使用。常見(jiàn)的編碼技術(shù)包括獨(dú)熱編碼(One-HotEncoding)、標(biāo)簽編碼(LabelEncoding)和目標(biāo)編碼(TargetEncoding)。2.1.2.1示例:獨(dú)熱編碼importpandasaspd

fromsklearn.preprocessingimportOneHotEncoder

#創(chuàng)建一個(gè)包含分類(lèi)特征的數(shù)據(jù)集

data={

'Color':['Red','Blue','Green','Red','Blue']

}

df=pd.DataFrame(data)

#使用獨(dú)熱編碼轉(zhuǎn)換分類(lèi)特征

encoder=OneHotEncoder(sparse=False)

encoded_data=encoder.fit_transform(df[['Color']])

#將編碼后的數(shù)據(jù)轉(zhuǎn)換為DataFrame

encoded_df=pd.DataFrame(encoded_data,columns=encoder.get_feature_names_out(['Color']))

#查看編碼后的數(shù)據(jù)

print(encoded_df)2.1.3特征創(chuàng)建與轉(zhuǎn)換特征創(chuàng)建與轉(zhuǎn)換涉及從現(xiàn)有特征中創(chuàng)建新的特征,以及對(duì)特征進(jìn)行數(shù)學(xué)變換,以提高模型的預(yù)測(cè)能力。這包括多項(xiàng)式特征、對(duì)數(shù)變換、標(biāo)準(zhǔn)化和歸一化等。2.1.3.1示例:多項(xiàng)式特征importnumpyasnp

fromsklearn.preprocessingimportPolynomialFeatures

#創(chuàng)建一個(gè)包含數(shù)值特征的數(shù)據(jù)集

data={

'X1':[1,2,3,4,5],

'X2':[2,3,4,5,6]

}

df=pd.DataFrame(data)

#創(chuàng)建多項(xiàng)式特征

poly=PolynomialFeatures(degree=2,include_bias=False)

poly_features=poly.fit_transform(df)

#將多項(xiàng)式特征轉(zhuǎn)換為DataFrame

poly_df=pd.DataFrame(poly_features,columns=poly.get_feature_names_out(['X1','X2']))

#查看多項(xiàng)式特征

print(poly_df)2.2特征選擇特征選擇是機(jī)器學(xué)習(xí)中一個(gè)關(guān)鍵步驟,它幫助我們識(shí)別哪些特征對(duì)模型的預(yù)測(cè)能力貢獻(xiàn)最大,從而減少模型的復(fù)雜度,提高訓(xùn)練速度和預(yù)測(cè)性能。特征選擇方法包括基于模型的特征選擇、基于統(tǒng)計(jì)的特征選擇和基于嵌入的特征選擇。2.2.1基于模型的特征選擇基于模型的特征選擇利用模型的權(quán)重或重要性來(lái)評(píng)估特征的重要性。例如,在梯度提升機(jī)(GBM)中,我們可以使用特征重要性來(lái)選擇特征。2.2.1.1示例:使用GBM的特征重要性importpandasaspd

fromsklearn.ensembleimportGradientBoostingClassifier

fromsklearn.datasetsimportload_iris

#加載鳶尾花數(shù)據(jù)集

iris=load_iris()

X=iris.data

y=iris.target

#訓(xùn)練GBM模型

gbm=GradientBoostingClassifier(n_estimators=100,learning_rate=1.0,max_depth=1,random_state=0)

gbm.fit(X,y)

#獲取特征重要性

importances=gbm.feature_importances_

#將特征重要性轉(zhuǎn)換為DataFrame

feature_importances=pd.DataFrame({'Feature':iris.feature_names,'Importance':importances})

feature_importances=feature_importances.sort_values(by='Importance',ascending=False)

#查看特征重要性

print(feature_importances)2.2.2基于統(tǒng)計(jì)的特征選擇基于統(tǒng)計(jì)的特征選擇使用統(tǒng)計(jì)測(cè)試來(lái)評(píng)估特征與目標(biāo)變量之間的關(guān)系。常見(jiàn)的統(tǒng)計(jì)測(cè)試包括卡方檢驗(yàn)、ANOVA和皮爾遜相關(guān)系數(shù)。2.2.2.1示例:使用ANOVA進(jìn)行特征選擇importpandasaspd

fromsklearn.feature_selectionimportSelectKBest,f_classif

fromsklearn.datasetsimportload_iris

#加載鳶尾花數(shù)據(jù)集

iris=load_iris()

X=iris.data

y=iris.target

#使用ANOVA選擇最佳特征

k_best=SelectKBest(score_func=f_classif,k=2)

X_new=k_best.fit_transform(X,y)

#將選擇的特征轉(zhuǎn)換為DataFrame

selected_features=pd.DataFrame(X_new,columns=k_best.get_feature_names_out(iris.feature_names))

#查看選擇的特征

print(selected_features)2.2.3基于嵌入的特征選擇基于嵌入的特征選擇是在模型訓(xùn)練過(guò)程中進(jìn)行的,模型本身能夠評(píng)估特征的重要性。這通常在深度學(xué)習(xí)和集成學(xué)習(xí)中使用。2.2.3.1示例:使用Lasso回歸進(jìn)行特征選擇importpandasaspd

fromsklearn.linear_modelimportLasso

fromsklearn.datasetsimportload_boston

fromsklearn.preprocessingimportStandardScaler

#加載波士頓房?jī)r(jià)數(shù)據(jù)集

boston=load_boston()

X=boston.data

y=boston.target

#標(biāo)準(zhǔn)化數(shù)據(jù)

scaler=StandardScaler()

X=scaler.fit_transform(X)

#使用Lasso回歸進(jìn)行特征選擇

lasso=Lasso(alpha=0.1)

lasso.fit(X,y)

#獲取非零系數(shù)的特征

selected_features=[featureforfeature,coefinzip(boston.feature_names,lasso.coef_)ifcoef!=0]

#查看選擇的特征

print(selected_features)通過(guò)上述示例,我們可以看到特征工程和特征選擇在機(jī)器學(xué)習(xí)中的重要性。數(shù)據(jù)預(yù)處理確保了數(shù)據(jù)的質(zhì)量,特征編碼技術(shù)使模型能夠理解和使用分類(lèi)特征,而特征創(chuàng)建與轉(zhuǎn)換則提高了模型的預(yù)測(cè)能力。特征選擇則幫助我們識(shí)別和選擇對(duì)模型預(yù)測(cè)最有價(jià)值的特征,從而優(yōu)化模型性能。3人工智能和機(jī)器學(xué)習(xí)之分類(lèi)算法:梯度提升機(jī)(GBM)特征選擇與特征工程3.1特征選擇3.1.1特征重要性評(píng)估特征重要性評(píng)估是梯度提升機(jī)(GBM)中一種直觀且有效的特征選擇方法。GBM模型在訓(xùn)練過(guò)程中,會(huì)自動(dòng)計(jì)算每個(gè)特征對(duì)模型預(yù)測(cè)能力的貢獻(xiàn)度,這一信息可以用來(lái)識(shí)別哪些特征對(duì)模型最為關(guān)鍵。3.1.1.1示例代碼importnumpyasnp

importpandasaspd

fromsklearn.ensembleimportGradientBoostingClassifier

fromsklearn.datasetsimportload_iris

fromsklearn.model_selectionimporttrain_test_split

#加載數(shù)據(jù)

iris=load_iris()

X=iris.data

y=iris.target

#劃分訓(xùn)練集和測(cè)試集

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)

#創(chuàng)建GBM模型

gbm=GradientBoostingClassifier(n_estimators=100,learning_rate=1.0,max_depth=1,random_state=0).fit(X_train,y_train)

#獲取特征重要性

importances=gbm.feature_importances_

#打印特征重要性

forfeature,importanceinzip(iris.feature_names,importances):

print(f"{feature}:{importance}")

#選擇重要性高于平均值的特征

average_importance=np.mean(importances)

selected_features=[featureforfeature,importanceinzip(iris.feature_names,importances)ifimportance>average_importance]

print("SelectedFeatures:",selected_features)3.1.1.2解釋上述代碼中,我們使用了GradientBoostingClassifier來(lái)訓(xùn)練一個(gè)GBM模型。模型訓(xùn)練完成后,我們可以通過(guò)feature_importances_屬性獲取每個(gè)特征的重要性。這些值可以用來(lái)決定哪些特征應(yīng)該被保留,哪些可以被剔除。在本例中,我們選擇了重要性高于平均值的特征。3.1.2遞歸特征消除遞歸特征消除(RecursiveFeatureElimination,RFE)是一種特征選擇方法,它通過(guò)遞歸地移除特征并構(gòu)建模型來(lái)選擇特征。RFE使用一個(gè)外部的評(píng)估模型,它在每次迭代中移除最不重要的特征,直到達(dá)到預(yù)定的特征數(shù)量。3.1.2.1示例代碼fromsklearn.feature_selectionimportRFE

#創(chuàng)建RFE選擇器

rfe=RFE(estimator=gbm,n_features_to_select=2)

rfe.fit(X_train,y_train)

#獲取選擇的特征

selected_features=iris.feature_names[rfe.support_]

print("SelectedFeatures:",selected_features)3.1.2.2解釋在RFE中,我們首先定義一個(gè)評(píng)估模型(在本例中為GBM模型),然后創(chuàng)建一個(gè)RFE選擇器,指定要選擇的特征數(shù)量。fit方法會(huì)根據(jù)模型的性能遞歸地移除特征,最后我們可以通過(guò)support_屬性來(lái)獲取選擇的特征。3.1.3基于模型的特征選擇基于模型的特征選擇方法利用模型的內(nèi)部機(jī)制來(lái)評(píng)估特征的重要性。對(duì)于GBM,特征重要性評(píng)估已經(jīng)是一種基于模型的方法,但還有其他方法,如使用正則化模型(如Lasso回歸)來(lái)選擇特征。3.1.3.1示例代碼fromsklearn.linear_modelimportLasso

fromsklearn.feature_selectionimportSelectFromModel

#創(chuàng)建Lasso模型

lasso=Lasso(alpha=0.1)

lasso.fit(X_train,y_train)

#創(chuàng)建基于模型的特征選擇器

sfm=SelectFromModel(lasso,threshold=0.25)

sfm.fit(X_train,y_train)

#獲取選擇的特征

selected_features=iris.feature_names[sfm.get_support()]

print("SelectedFeatures:",selected_features)3.1.3.2解釋在基于模型的特征選擇中,我們首先訓(xùn)練一個(gè)Lasso回歸模型,它會(huì)自動(dòng)對(duì)特征進(jìn)行正則化,從而降低不重要特征的系數(shù)。然后,我們使用SelectFromModel選擇器,基于Lasso模型的系數(shù)來(lái)選擇特征。通過(guò)設(shè)置threshold參數(shù),我們可以控制特征選擇的嚴(yán)格程度。3.2特征工程特征工程是機(jī)器學(xué)習(xí)中一個(gè)關(guān)鍵步驟,它涉及創(chuàng)建、轉(zhuǎn)換和選擇特征以提高模型的性能。在GBM中,特征工程可以包括特征編碼、特征組合和特征生成等。3.2.1特征編碼特征編碼是將非數(shù)值特征轉(zhuǎn)換為數(shù)值形式的過(guò)程,這對(duì)于GBM模型至關(guān)重要,因?yàn)镚BM模型只能處理數(shù)值輸入。3.2.1.1示例代碼fromsklearn.preprocessingimportOneHotEncoder

#假設(shè)我們有一個(gè)包含類(lèi)別特征的DataFrame

df=pd.DataFrame({

'feature1':[1,2,3,4],

'category':['A','B','A','C']

})

#將類(lèi)別特征轉(zhuǎn)換為數(shù)值形式

encoder=OneHotEncoder(sparse=False)

encoded_features=encoder.fit_transform(df[['category']])

#將編碼后的特征添加到原始數(shù)據(jù)中

df_encoded=pd.concat([df,pd.DataFrame(encoded_features,columns=encoder.get_feature_names_out(['category']))],axis=1)

print(df_encoded)3.2.1.2解釋在特征編碼中,我們使用了OneHotEncoder來(lái)將類(lèi)別特征轉(zhuǎn)換為數(shù)值形式。這一步驟對(duì)于GBM模型是必要的,因?yàn)樗荒苤苯犹幚眍?lèi)別數(shù)據(jù)。通過(guò)使用OneHotEncoder,我們可以將每個(gè)類(lèi)別特征轉(zhuǎn)換為多個(gè)二進(jìn)制特征,從而讓模型能夠理解和使用這些信息。3.2.2特征組合特征組合是將兩個(gè)或多個(gè)特征合并為一個(gè)新特征的過(guò)程,這可以捕捉特征之間的交互作用,從而提高模型的預(yù)測(cè)能力。3.2.2.1示例代碼#假設(shè)我們有兩個(gè)數(shù)值特征

df=pd.DataFrame({

'feature1':[1,2,3,4],

'feature2':[5,6,7,8]

})

#創(chuàng)建一個(gè)新特征,表示兩個(gè)特征的乘積

df['combined_feature']=df['feature1']*df['feature2']

print(df)3.2.2.2解釋在特征組合中,我們創(chuàng)建了一個(gè)新特征,表示兩個(gè)現(xiàn)有特征的乘積。這種操作可以捕捉特征之間的非線性關(guān)系,對(duì)于某些模型(如GBM)來(lái)說(shuō),這可能會(huì)提高模型的性能。3.2.3特征生成特征生成是基于現(xiàn)有特征創(chuàng)建新特征的過(guò)程,這可以包括數(shù)學(xué)運(yùn)算、時(shí)間序列分析、文本分析等。3.2.3.1示例代碼#假設(shè)我們有一個(gè)時(shí)間序列特征

df=pd.DataFrame({

'timestamp':pd.date_range(start='2020-01-01',periods=4,freq='D'),

'value':[10,20,30,40]

})

#從時(shí)間戳中提取日期特征

df['day_of_week']=df['timestamp'].dt.dayofweek

print(df)3.2.3.2解釋在特征生成中,我們從時(shí)間序列特征中提取了日期特征。對(duì)于時(shí)間序列數(shù)據(jù),這種操作可以捕捉到日期相關(guān)的模式,如一周中的哪一天、月份、季度等,這些信息對(duì)于預(yù)測(cè)模型來(lái)說(shuō)可能是非常有價(jià)值的。通過(guò)上述示例,我們可以看到特征選擇和特征工程在GBM模型中的應(yīng)用。特征選擇幫助我們識(shí)別和保留對(duì)模型預(yù)測(cè)能力貢獻(xiàn)最大的特征,而特征工程則通過(guò)創(chuàng)建、轉(zhuǎn)換和選擇特征來(lái)提高模型的性能。在實(shí)際應(yīng)用中,這些步驟通常是相互交織的,需要根據(jù)具體的數(shù)據(jù)和模型需求進(jìn)行調(diào)整和優(yōu)化。4人工智能和機(jī)器學(xué)習(xí)之分類(lèi)算法:梯度提升機(jī)(GBM)模型構(gòu)建4.1模型參數(shù)設(shè)置在構(gòu)建梯度提升機(jī)(GBM)模型時(shí),參數(shù)的選擇至關(guān)重要,它直接影響模型的性能和泛化能力。以下是一些關(guān)鍵參數(shù)的設(shè)置:n_estimators:指定GBM中決策樹(shù)的數(shù)量。增加決策樹(shù)的數(shù)量可以提高模型的準(zhǔn)確度,但也會(huì)增加計(jì)算時(shí)間和過(guò)擬合的風(fēng)險(xiǎn)。max_depth:決策樹(shù)的最大深度。深度越大,模型越復(fù)雜,可能過(guò)擬合;深度小,模型可能欠擬合。learning_rate:學(xué)習(xí)率,控制每次迭代的步長(zhǎng)。較小的學(xué)習(xí)率可以提高模型的精度,但需要更多的迭代次數(shù)。subsample:訓(xùn)練每棵樹(shù)時(shí)使用的樣本比例。可以減少過(guò)擬合,但太小的值可能導(dǎo)致欠擬合。min_samples_split:決策樹(shù)節(jié)點(diǎn)分裂所需的最小樣本數(shù)。這有助于控制樹(shù)的復(fù)雜度,防止過(guò)擬合。4.1.1示例代碼fromsklearn.ensembleimportGradientBoostingClassifier

fromsklearn.datasetsimportload_iris

fromsklearn.model_selectionimporttrain_test_split

#加載數(shù)據(jù)

iris=load_iris()

X,y=iris.data,iris.target

#劃分訓(xùn)練集和測(cè)試集

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=42)

#設(shè)置GBM模型參數(shù)

gbm=GradientBoostingClassifier(n_estimators=100,max_depth=3,learning_rate=0.1,subsample=0.8,min_samples_split=2)

#訓(xùn)練模型

gbm.fit(X_train,y_train)

#預(yù)測(cè)

predictions=gbm.predict(X_test)4.2訓(xùn)練與驗(yàn)證訓(xùn)練GBM模型涉及使用訓(xùn)練數(shù)據(jù)集來(lái)擬合模型,然后使用驗(yàn)證數(shù)據(jù)集來(lái)評(píng)估模型的性能。這有助于調(diào)整模型參數(shù),以獲得最佳的分類(lèi)效果。4.2.1示例代碼#評(píng)估模型性能

fromsklearn.metricsimportaccuracy_score

#預(yù)測(cè)測(cè)試集

y_pred=gbm.predict(X_test)

#計(jì)算準(zhǔn)確率

accuracy=accuracy_score(y_test,y_pred)

print(f"模型準(zhǔn)確率:{accuracy}")4.3模型調(diào)優(yōu)模型調(diào)優(yōu)是通過(guò)調(diào)整模型參數(shù)來(lái)優(yōu)化模型性能的過(guò)程。這通常涉及使用交叉驗(yàn)證來(lái)評(píng)估不同參數(shù)組合下的模型性能,然后選擇表現(xiàn)最佳的參數(shù)組合。4.3.1示例代碼fromsklearn.model_selectionimportGridSearchCV

#定義參數(shù)網(wǎng)格

param_grid={

'n_estimators':[50,100,150],

'max_depth':[2,3,4],

'learning_rate':[0.05,0.1,0.2],

'subsample':[0.7,0.8,0.9],

'min_samples_split':[2,3,4]

}

#創(chuàng)建GridSearchCV對(duì)象

grid_search=GridSearchCV(gbm,param_grid,cv=5,scoring='accuracy')

#擬合數(shù)據(jù)

grid_search.fit(X_train,y_train)

#輸出最佳參數(shù)

best_params=grid_search.best_params_

print(f"最佳參數(shù):{best_params}")

#使用最佳參數(shù)重新訓(xùn)練模型

best_gbm=GradientBoostingClassifier(**best_params)

best_gbm.fit(X_train,y_train)

#預(yù)測(cè)并評(píng)估

best_predictions=best_gbm.predict(X_test)

best_accuracy=accuracy_score(y_test,best_predictions)

print(f"調(diào)優(yōu)后模型準(zhǔn)確率:{best_accuracy}")通過(guò)上述步驟,我們可以構(gòu)建、訓(xùn)練和優(yōu)化GBM模型,以實(shí)現(xiàn)對(duì)分類(lèi)任務(wù)的高效處理。在實(shí)際應(yīng)用中,可能需要根據(jù)具體數(shù)據(jù)集和問(wèn)題調(diào)整參數(shù)范圍和搜索策略。5實(shí)戰(zhàn)案例5.1案例分析:信用評(píng)分系統(tǒng)在信用評(píng)分系統(tǒng)中,梯度提升機(jī)(GBM)是一種強(qiáng)大的算法,用于預(yù)測(cè)客戶違約的可能性。特征選擇與特征工程是提高模型預(yù)測(cè)準(zhǔn)確性的關(guān)鍵步驟。5.1.1特征選擇特征選擇旨在從原始數(shù)據(jù)集中挑選出最相關(guān)的特征,以減少模型的復(fù)雜度,提高預(yù)測(cè)性能。在信用評(píng)分系統(tǒng)中,可能的特征包括收入、年齡、信用歷史、職業(yè)等。使用GBM時(shí),可以利用特征重要性來(lái)選擇特征。5.1.1.1示例代碼importpandasaspd

fromsklearn.ensembleimportGradientBoostingClassifier

fromsklearn.model_selectionimporttrain_test_split

#加載數(shù)據(jù)

data=pd.read_csv('credit_data.csv')

X=data.drop('default',axis=1)

y=data['default']

#劃分?jǐn)?shù)據(jù)集

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)

#訓(xùn)練GBM模型

gbm=GradientBoostingClassifier(n_estimators=100,learning_rate=0.1,max_depth=3,random_state=42)

gbm.fit(X_train,y_train)

#獲取特征重要性

feature_importances=gbm.feature_importances_

#選擇重要性高于閾值的特征

threshold=0.05

important_features=X_train.columns[feature_importances>threshold]

print("重要特征:",important_features)5.1.2特征工程特征工程涉及創(chuàng)建、轉(zhuǎn)換或組合特征以增強(qiáng)模型性能。例如,可以創(chuàng)建一個(gè)特征來(lái)表示收入與債務(wù)的比率,這可能比單獨(dú)的收入或債務(wù)特征更有預(yù)測(cè)力。5.1.2.1示例代碼#創(chuàng)建新特征:收入與債務(wù)比率

data['income_debt_ratio']=data['income']/data['debt']

#對(duì)年齡進(jìn)行分箱

data['age_group']=pd.cut(data['age'],bins=[18,30,40,50,60,100],labels=['18-30','30-40','40-50','50-60','60+'])

#將分類(lèi)特征轉(zhuǎn)換為虛擬變量

data=pd.get_dummies(data,columns=['age_group'],drop_first=True)5.2案例分析:客戶流失預(yù)測(cè)客戶流失預(yù)測(cè)是另一個(gè)應(yīng)用GBM的常見(jiàn)場(chǎng)景,通過(guò)分析客戶的行為和屬性,預(yù)測(cè)哪些客戶可能不再使用公司的服務(wù)或產(chǎn)品。5.2.1特征選擇在客戶流失預(yù)測(cè)中,特征可能包括客戶滿意度、服務(wù)使用頻率、客戶投訴記錄等。特征選擇同樣基于GBM的特征重要性。5.2.1.1示例代碼#加載數(shù)據(jù)

data=pd.read_csv('churn_data.csv')

X=data.drop('churn',axis=1)

y=data['churn']

#劃分?jǐn)?shù)據(jù)集

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)

#訓(xùn)練GBM模型

gbm=GradientBoostingClassifier(n_estimators=100,learning_rate=0.1,max_depth=3,random_state=42)

gbm.fit(X_train,y_train)

#獲取特征重要性

feature_importances=gbm.feature_importances_

#選擇重要性高于閾值的特征

threshold=0.05

important_features=X_train.columns[feature_importances>threshold]

print("重要特征:",important_features)5.2.2特征工程特征工程在客戶流失預(yù)測(cè)中同樣重要。例如,可以創(chuàng)建一個(gè)特征來(lái)表示客戶最近的活動(dòng)水平,或者將連續(xù)的滿意度評(píng)分轉(zhuǎn)換為分類(lèi)變量。5.2.2.1示例代碼#創(chuàng)建新特征:最近活動(dòng)水平

data['recent_activity_level']=data['recent_calls']+data['recent_emails']

#對(duì)滿意度評(píng)分進(jìn)行分箱

data['satisfaction_group']=pd.cut(data['satisfaction_score'],bins=[0,0.25,0.5,0.75,1],labels=['low','medium','high','very_high'])

#將分類(lèi)特征轉(zhuǎn)換為虛擬變量

data=pd.get_dummies(data,columns=['satisfaction_group'],drop_first=True)通過(guò)上述案例分析,我們可以看到特征選擇與特征工程在GBM模型中的應(yīng)用,以及如何通過(guò)Python代碼實(shí)現(xiàn)這些步驟。在實(shí)際項(xiàng)目中,這些技術(shù)可以顯著提高模型的預(yù)測(cè)性能。6總結(jié)與進(jìn)階6.1GBM的優(yōu)缺點(diǎn)6.1.1優(yōu)點(diǎn)強(qiáng)大的預(yù)測(cè)能力:GBM通過(guò)迭代地添加弱學(xué)習(xí)器,能夠捕捉到數(shù)據(jù)中的復(fù)雜模式,從而在許多數(shù)據(jù)集上表現(xiàn)出色。自動(dòng)處理特征:GBM能夠自動(dòng)處理缺失值和類(lèi)別特征,減少了預(yù)處理的工作量??山忉屝裕弘m然GBM模型本身可能不如線性模型那樣直觀,但通過(guò)特征重要性分析,可以提供模型決策的洞察。靈活性:GBM可以用于回歸和分類(lèi)問(wèn)題,通過(guò)調(diào)整損失函數(shù),可以適應(yīng)不同的目標(biāo)函數(shù)。6.1.2

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論