版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
人工智能和機(jī)器學(xué)習(xí)之回歸算法:彈性網(wǎng)絡(luò)回歸:數(shù)據(jù)預(yù)處理與特征工程1彈性網(wǎng)絡(luò)回歸簡(jiǎn)介1.11彈性網(wǎng)絡(luò)回歸的概念彈性網(wǎng)絡(luò)回歸(ElasticNetRegression)是一種線性回歸模型,它結(jié)合了嶺回歸(RidgeRegression)和Lasso回歸的優(yōu)點(diǎn),用于處理高度相關(guān)特征的場(chǎng)景,同時(shí)能夠進(jìn)行特征選擇。在機(jī)器學(xué)習(xí)和統(tǒng)計(jì)建模中,彈性網(wǎng)絡(luò)回歸通過(guò)添加L1和L2正則化項(xiàng)來(lái)減少模型的復(fù)雜度,防止過(guò)擬合,從而提高預(yù)測(cè)性能。1.22彈性網(wǎng)絡(luò)回歸的數(shù)學(xué)原理彈性網(wǎng)絡(luò)回歸的目標(biāo)函數(shù)可以表示為:min其中:-yi是第i個(gè)樣本的響應(yīng)變量。-xi是第i個(gè)樣本的特征向量。-β是模型的參數(shù)向量。-N是樣本數(shù)量。-p是特征數(shù)量。-λ是正則化強(qiáng)度參數(shù),控制正則化項(xiàng)的大小。-α是混合參數(shù),控制L1和L2正則化之間的平衡。當(dāng)α=1.33彈性網(wǎng)絡(luò)回歸與嶺回歸及Lasso回歸的比較嶺回歸:通過(guò)添加L2正則化項(xiàng),可以減少參數(shù)的方差,但不會(huì)使參數(shù)精確為零,因此所有特征都會(huì)被保留。Lasso回歸:通過(guò)添加L1正則化項(xiàng),可以將一些不重要的特征的參數(shù)精確為零,從而實(shí)現(xiàn)特征選擇。彈性網(wǎng)絡(luò)回歸:結(jié)合了L1和L2正則化,既能減少參數(shù)方差,又能進(jìn)行特征選擇。特別適用于特征之間存在高度相關(guān)性的情況,因?yàn)樗梢酝瑫r(shí)選擇一組相關(guān)特征中的多個(gè)特征,而不僅僅是選擇一個(gè)。1.3.1示例代碼:使用Python的sklearn庫(kù)實(shí)現(xiàn)彈性網(wǎng)絡(luò)回歸#導(dǎo)入必要的庫(kù)
importnumpyasnp
importpandasaspd
fromsklearn.linear_modelimportElasticNet
fromsklearn.model_selectionimporttrain_test_split
fromsklearn.metricsimportmean_squared_error
#創(chuàng)建示例數(shù)據(jù)
np.random.seed(0)
X=np.random.rand(100,10)
y=np.random.rand(100)
#將數(shù)據(jù)分為訓(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)建彈性網(wǎng)絡(luò)回歸模型
elastic_net=ElasticNet(alpha=0.1,l1_ratio=0.5)
#訓(xùn)練模型
elastic_net.fit(X_train,y_train)
#預(yù)測(cè)
y_pred=elastic_net.predict(X_test)
#計(jì)算均方誤差
mse=mean_squared_error(y_test,y_pred)
print(f'MeanSquaredError:{mse}')
#輸出模型系數(shù)
print(f'Coefficients:{elastic_net.coef_}')在這個(gè)例子中,我們首先生成了100個(gè)樣本,每個(gè)樣本有10個(gè)特征。然后,我們使用train_test_split函數(shù)將數(shù)據(jù)分為訓(xùn)練集和測(cè)試集。接下來(lái),我們創(chuàng)建了一個(gè)彈性網(wǎng)絡(luò)回歸模型,其中alpha參數(shù)控制正則化強(qiáng)度,l1_ratio參數(shù)控制L1和L2正則化之間的平衡。模型訓(xùn)練后,我們使用測(cè)試集進(jìn)行預(yù)測(cè),并計(jì)算了預(yù)測(cè)結(jié)果的均方誤差。最后,我們輸出了模型的系數(shù),這些系數(shù)反映了特征對(duì)響應(yīng)變量的影響程度。1.3.2數(shù)據(jù)預(yù)處理與特征工程在應(yīng)用彈性網(wǎng)絡(luò)回歸之前,數(shù)據(jù)預(yù)處理和特征工程是關(guān)鍵步驟。這包括:-數(shù)據(jù)清洗:處理缺失值、異常值和重復(fù)數(shù)據(jù)。-特征縮放:由于彈性網(wǎng)絡(luò)回歸對(duì)特征的尺度敏感,通常需要對(duì)特征進(jìn)行標(biāo)準(zhǔn)化或歸一化處理。-特征選擇:通過(guò)相關(guān)性分析、主成分分析(PCA)等方法減少特征數(shù)量,提高模型效率。-特征構(gòu)造:根據(jù)領(lǐng)域知識(shí)或數(shù)據(jù)探索結(jié)果,創(chuàng)建新的特征,以增強(qiáng)模型的預(yù)測(cè)能力。通過(guò)這些步驟,我們可以確保彈性網(wǎng)絡(luò)回歸模型在訓(xùn)練時(shí)能夠更準(zhǔn)確地捕捉數(shù)據(jù)中的模式,從而提高預(yù)測(cè)性能。2數(shù)據(jù)預(yù)處理2.11數(shù)據(jù)清洗:處理缺失值和異常值數(shù)據(jù)清洗是數(shù)據(jù)預(yù)處理的第一步,主要涉及處理數(shù)據(jù)集中的缺失值和異常值。這一步驟對(duì)于確保模型訓(xùn)練的準(zhǔn)確性和可靠性至關(guān)重要。2.1.1處理缺失值缺失值的處理方法包括刪除、填充和預(yù)測(cè)。在Python中,我們常用pandas庫(kù)來(lái)處理缺失值。2.1.1.1示例:使用pandas填充缺失值importpandasaspd
importnumpyasnp
#創(chuàng)建一個(gè)包含缺失值的數(shù)據(jù)框
data={'A':[1,2,np.nan,4],
'B':[5,np.nan,np.nan,8],
'C':[9,10,11,12]}
df=pd.DataFrame(data)
#使用平均值填充缺失值
df.fillna(df.mean(),inplace=True)
print(df)2.1.2處理異常值異常值的檢測(cè)和處理可以通過(guò)統(tǒng)計(jì)方法或機(jī)器學(xué)習(xí)方法進(jìn)行。常見的統(tǒng)計(jì)方法包括使用IQR(四分位數(shù)范圍)來(lái)識(shí)別異常值。2.1.2.1示例:使用IQR檢測(cè)異常值importpandasaspd
importnumpyasnp
#創(chuàng)建一個(gè)數(shù)據(jù)框
data={'A':[1,2,3,100,5,6],
'B':[5,6,7,8,9,10],
'C':[11,12,13,14,15,16]}
df=pd.DataFrame(data)
#計(jì)算IQR
Q1=df.quantile(0.25)
Q3=df.quantile(0.75)
IQR=Q3-Q1
#檢測(cè)異常值
outliers=((df<(Q1-1.5*IQR))|(df>(Q3+1.5*IQR)))
print(outliers)2.22數(shù)據(jù)轉(zhuǎn)換:標(biāo)準(zhǔn)化與歸一化數(shù)據(jù)轉(zhuǎn)換是將數(shù)據(jù)調(diào)整到適合模型訓(xùn)練的格式。標(biāo)準(zhǔn)化和歸一化是兩種常見的數(shù)據(jù)轉(zhuǎn)換方法。2.2.1標(biāo)準(zhǔn)化標(biāo)準(zhǔn)化(Standardization)將數(shù)據(jù)轉(zhuǎn)換為均值為0,標(biāo)準(zhǔn)差為1的分布。這在處理具有不同尺度的特征時(shí)特別有用。2.2.1.1示例:使用scikit-learn進(jìn)行標(biāo)準(zhǔn)化fromsklearn.preprocessingimportStandardScaler
importpandasaspd
importnumpyasnp
#創(chuàng)建一個(gè)數(shù)據(jù)框
data={'A':[1,2,3,4,5],
'B':[100,200,300,400,500],
'C':[10,20,30,40,50]}
df=pd.DataFrame(data)
#初始化標(biāo)準(zhǔn)化器
scaler=StandardScaler()
#擬合并轉(zhuǎn)換數(shù)據(jù)
df_scaled=scaler.fit_transform(df)
df_scaled=pd.DataFrame(df_scaled,columns=df.columns)
print(df_scaled)2.2.2歸一化歸一化(Normalization)將數(shù)據(jù)縮放到0到1的范圍內(nèi)。這在處理需要非負(fù)值的模型時(shí)特別有用。2.2.2.1示例:使用scikit-learn進(jìn)行歸一化fromsklearn.preprocessingimportMinMaxScaler
importpandasaspd
importnumpyasnp
#創(chuàng)建一個(gè)數(shù)據(jù)框
data={'A':[1,2,3,4,5],
'B':[100,200,300,400,500],
'C':[10,20,30,40,50]}
df=pd.DataFrame(data)
#初始化歸一化器
scaler=MinMaxScaler()
#擬合并轉(zhuǎn)換數(shù)據(jù)
df_normalized=scaler.fit_transform(df)
df_normalized=pd.DataFrame(df_normalized,columns=df.columns)
print(df_normalized)2.33數(shù)據(jù)劃分:訓(xùn)練集、驗(yàn)證集與測(cè)試集數(shù)據(jù)集的劃分是將數(shù)據(jù)分為訓(xùn)練集、驗(yàn)證集和測(cè)試集,以評(píng)估模型的性能和泛化能力。2.3.1劃分?jǐn)?shù)據(jù)集通常,數(shù)據(jù)集被劃分為70%的訓(xùn)練集,15%的驗(yàn)證集和15%的測(cè)試集,但這可以根據(jù)具體情況進(jìn)行調(diào)整。2.3.1.1示例:使用scikit-learn劃分?jǐn)?shù)據(jù)集fromsklearn.model_selectionimporttrain_test_split
importpandasaspd
importnumpyasnp
#創(chuàng)建一個(gè)數(shù)據(jù)框
data={'A':[1,2,3,4,5],
'B':[100,200,300,400,500],
'C':[10,20,30,40,50],
'target':[0,1,0,1,0]}
df=pd.DataFrame(data)
#分離特征和目標(biāo)變量
X=df.drop('target',axis=1)
y=df['target']
#劃分?jǐn)?shù)據(jù)集
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=42)
X_train,X_val,y_train,y_val=train_test_split(X_train,y_train,test_size=0.5,random_state=42)
#輸出劃分后的數(shù)據(jù)集
print("訓(xùn)練集特征:",X_train)
print("驗(yàn)證集特征:",X_val)
print("測(cè)試集特征:",X_test)
print("訓(xùn)練集目標(biāo):",y_train)
print("驗(yàn)證集目標(biāo):",y_val)
print("測(cè)試集目標(biāo):",y_test)以上示例展示了如何使用Python中的pandas和scikit-learn庫(kù)進(jìn)行數(shù)據(jù)清洗、數(shù)據(jù)轉(zhuǎn)換和數(shù)據(jù)集劃分。這些步驟是構(gòu)建機(jī)器學(xué)習(xí)模型前不可或缺的預(yù)處理過(guò)程。3特征工程基礎(chǔ)3.11特征選擇:相關(guān)性分析與遞歸特征消除3.1.1相關(guān)性分析相關(guān)性分析是一種統(tǒng)計(jì)方法,用于評(píng)估兩個(gè)變量之間的關(guān)系強(qiáng)度和方向。在機(jī)器學(xué)習(xí)中,我們通常使用相關(guān)性分析來(lái)識(shí)別哪些特征與目標(biāo)變量(我們?cè)噲D預(yù)測(cè)的變量)之間存在強(qiáng)相關(guān)性。這有助于我們理解數(shù)據(jù)集的結(jié)構(gòu),并可能幫助我們選擇最相關(guān)的特征進(jìn)行模型訓(xùn)練,從而提高模型的性能。3.1.1.1示例:使用皮爾遜相關(guān)系數(shù)進(jìn)行相關(guān)性分析importpandasaspd
importnumpyasnp
fromscipy.statsimportpearsonr
#創(chuàng)建示例數(shù)據(jù)
data={
'feature1':np.random.rand(100),
'feature2':np.random.rand(100)+np.random.normal(0,0.1,100),
'feature3':np.random.rand(100)+np.random.normal(0,0.5,100),
'target':np.random.rand(100)
}
df=pd.DataFrame(data)
#計(jì)算特征與目標(biāo)之間的皮爾遜相關(guān)系數(shù)
correlations=df.corr()['target'].abs()
#選擇相關(guān)性高于閾值的特征
threshold=0.5
selected_features=correlations[correlations>threshold].index
print("SelectedFeatures:",selected_features)此代碼示例首先創(chuàng)建了一個(gè)包含隨機(jī)特征和目標(biāo)變量的數(shù)據(jù)集。然后,它使用pandas的corr函數(shù)計(jì)算所有特征與目標(biāo)之間的皮爾遜相關(guān)系數(shù)。最后,它選擇相關(guān)性高于給定閾值的特征。3.1.2遞歸特征消除遞歸特征消除(RecursiveFeatureElimination,RFE)是一種特征選擇方法,它基于模型的系數(shù)來(lái)遞歸地消除最不重要的特征。RFE通常與交叉驗(yàn)證結(jié)合使用,以確保選擇的特征在不同數(shù)據(jù)子集上都表現(xiàn)良好。3.1.2.1示例:使用線性回歸模型進(jìn)行遞歸特征消除fromsklearn.feature_selectionimportRFE
fromsklearn.linear_modelimportLinearRegression
fromsklearn.datasetsimportload_boston
#加載波士頓房?jī)r(jià)數(shù)據(jù)集
boston=load_boston()
X=boston.data
y=boston.target
#創(chuàng)建線性回歸模型
model=LinearRegression()
#使用RFE進(jìn)行特征選擇
rfe=RFE(model,n_features_to_select=5)
fit=rfe.fit(X,y)
#輸出被選擇的特征
print("SelectedFeatures:",fit.support_)在這個(gè)示例中,我們使用了sklearn庫(kù)中的波士頓房?jī)r(jià)數(shù)據(jù)集。我們創(chuàng)建了一個(gè)線性回歸模型,并使用RFE來(lái)選擇最重要的5個(gè)特征。fit.support_輸出一個(gè)布爾數(shù)組,指示哪些特征被選擇。3.22特征創(chuàng)建:多項(xiàng)式特征與交互特征3.2.1多項(xiàng)式特征多項(xiàng)式特征是通過(guò)將現(xiàn)有特征的冪次組合來(lái)創(chuàng)建的。這可以捕捉特征之間的非線性關(guān)系,從而提高模型的預(yù)測(cè)能力。3.2.1.1示例:使用多項(xiàng)式特征轉(zhuǎn)換器創(chuàng)建多項(xiàng)式特征fromsklearn.preprocessingimportPolynomialFeatures
importnumpyasnp
#創(chuàng)建示例數(shù)據(jù)
X=np.array([[1,2],[3,4]])
#創(chuàng)建多項(xiàng)式特征轉(zhuǎn)換器
poly=PolynomialFeatures(degree=2)
#轉(zhuǎn)換數(shù)據(jù)
X_poly=poly.fit_transform(X)
print("PolynomialFeatures:",X_poly)此代碼示例創(chuàng)建了一個(gè)簡(jiǎn)單的2x2數(shù)據(jù)集,并使用sklearn的PolynomialFeatures類將其轉(zhuǎn)換為包含所有二次項(xiàng)的多項(xiàng)式特征。3.2.2交互特征交互特征是通過(guò)將兩個(gè)或多個(gè)特征相乘來(lái)創(chuàng)建的。這可以捕捉特征之間的相互作用,從而提高模型的預(yù)測(cè)能力。3.2.2.1示例:創(chuàng)建交互特征importpandasaspd
#創(chuàng)建示例數(shù)據(jù)
data={
'feature1':[1,2,3,4],
'feature2':[5,6,7,8]
}
df=pd.DataFrame(data)
#創(chuàng)建交互特征
df['interaction']=df['feature1']*df['feature2']
print(df)在這個(gè)示例中,我們創(chuàng)建了一個(gè)包含兩個(gè)特征的簡(jiǎn)單數(shù)據(jù)集,并通過(guò)將這兩個(gè)特征相乘來(lái)創(chuàng)建一個(gè)交互特征。3.33特征編碼:獨(dú)熱編碼與標(biāo)簽編碼3.3.1獨(dú)熱編碼獨(dú)熱編碼(One-HotEncoding)是一種將分類特征轉(zhuǎn)換為數(shù)值特征的方法。它將每個(gè)分類值轉(zhuǎn)換為一個(gè)新列,并使用0或1表示該分類值是否存在。3.3.1.1示例:使用pandas進(jìn)行獨(dú)熱編碼importpandasaspd
#創(chuàng)建示例數(shù)據(jù)
data={
'color':['red','blue','red','green','blue','blue']
}
df=pd.DataFrame(data)
#進(jìn)行獨(dú)熱編碼
df_encoded=pd.get_dummies(df,columns=['color'])
print(df_encoded)此代碼示例創(chuàng)建了一個(gè)包含顏色分類特征的數(shù)據(jù)集,并使用pandas的get_dummies函數(shù)進(jìn)行獨(dú)熱編碼。3.3.2標(biāo)簽編碼標(biāo)簽編碼(LabelEncoding)是一種將分類特征轉(zhuǎn)換為數(shù)值特征的方法,它將每個(gè)分類值映射到一個(gè)整數(shù)。3.3.2.1示例:使用sklearn進(jìn)行標(biāo)簽編碼fromsklearn.preprocessingimportLabelEncoder
importpandasaspd
#創(chuàng)建示例數(shù)據(jù)
data={
'color':['red','blue','red','green','blue','blue']
}
df=pd.DataFrame(data)
#創(chuàng)建標(biāo)簽編碼器
le=LabelEncoder()
#進(jìn)行標(biāo)簽編碼
df['color_encoded']=le.fit_transform(df['color'])
print(df)在這個(gè)示例中,我們使用了sklearn的LabelEncoder類來(lái)將顏色分類特征轉(zhuǎn)換為數(shù)值特征。通過(guò)以上示例,我們可以看到特征工程在機(jī)器學(xué)習(xí)中的重要性,它包括特征選擇、特征創(chuàng)建和特征編碼等步驟,這些步驟可以幫助我們構(gòu)建更強(qiáng)大、更準(zhǔn)確的模型。4彈性網(wǎng)絡(luò)回歸中的特征處理4.11特征縮放的重要性在進(jìn)行彈性網(wǎng)絡(luò)回歸分析之前,特征縮放是一個(gè)關(guān)鍵步驟。這是因?yàn)閺椥跃W(wǎng)絡(luò)回歸的懲罰項(xiàng)對(duì)特征的尺度敏感。如果特征之間尺度差異過(guò)大,算法可能會(huì)偏向于尺度較大的特征,導(dǎo)致模型的性能下降。特征縮放可以確保所有特征在相同尺度上,使算法能夠公平地評(píng)估每個(gè)特征的重要性。4.1.1示例代碼假設(shè)我們有一組數(shù)據(jù),其中包含兩個(gè)特征,一個(gè)特征的尺度遠(yuǎn)大于另一個(gè)特征。我們將使用Python的sklearn庫(kù)來(lái)展示特征縮放的重要性。importnumpyasnp
importpandasaspd
fromsklearn.linear_modelimportElasticNet
fromsklearn.preprocessingimportStandardScaler
fromsklearn.model_selectionimporttrain_test_split
fromsklearn.metricsimportmean_squared_error
#創(chuàng)建數(shù)據(jù)集
np.random.seed(0)
X=np.random.rand(100,2)
X[:,0]*=1000#使第一個(gè)特征的尺度遠(yuǎn)大于第二個(gè)特征
y=2*X[:,0]+3*X[:,1]+np.random.randn(100)*10
#不進(jìn)行特征縮放的彈性網(wǎng)絡(luò)回歸
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)
enet=ElasticNet(alpha=0.1,l1_ratio=0.5)
enet.fit(X_train,y_train)
y_pred=enet.predict(X_test)
mse=mean_squared_error(y_test,y_pred)
print("未縮放特征的MSE:",mse)
#進(jìn)行特征縮放的彈性網(wǎng)絡(luò)回歸
scaler=StandardScaler()
X_train_scaled=scaler.fit_transform(X_train)
X_test_scaled=scaler.transform(X_test)
enet_scaled=ElasticNet(alpha=0.1,l1_ratio=0.5)
enet_scaled.fit(X_train_scaled,y_train)
y_pred_scaled=enet_scaled.predict(X_test_scaled)
mse_scaled=mean_squared_error(y_test,y_pred_scaled)
print("縮放特征后的MSE:",mse_scaled)4.1.2解釋在上述代碼中,我們首先創(chuàng)建了一個(gè)數(shù)據(jù)集,其中第一個(gè)特征的尺度遠(yuǎn)大于第二個(gè)特征。然后,我們分別在未縮放和縮放后的特征上訓(xùn)練彈性網(wǎng)絡(luò)回歸模型,并計(jì)算預(yù)測(cè)誤差(MSE)。通常,縮放后的特征會(huì)得到更低的MSE,表明特征縮放對(duì)模型性能的提升。4.22使用彈性網(wǎng)絡(luò)回歸進(jìn)行特征選擇彈性網(wǎng)絡(luò)回歸不僅能夠進(jìn)行預(yù)測(cè),還能用于特征選擇。通過(guò)調(diào)整l1_ratio參數(shù),可以控制L1和L2正則化之間的平衡。當(dāng)l1_ratio接近1時(shí),模型更傾向于LASSO回歸,能夠?qū)⒁恍┨卣鞯南禂?shù)壓縮至0,從而實(shí)現(xiàn)特征選擇。4.2.1示例代碼我們將使用sklearn庫(kù)中的ElasticNet模型來(lái)展示如何進(jìn)行特征選擇。importnumpyasnp
importpandasaspd
fromsklearn.linear_modelimportElasticNet
fromsklearn.preprocessingimportStandardScaler
fromsklearn.model_selectionimporttrain_test_split
#創(chuàng)建數(shù)據(jù)集
np.random.seed(0)
X=np.random.rand(100,5)
y=2*X[:,0]+3*X[:,1]+np.random.randn(100)*0.1
#特征縮放
scaler=StandardScaler()
X_scaled=scaler.fit_transform(X)
#劃分?jǐn)?shù)據(jù)集
X_train,X_test,y_train,y_test=train_test_split(X_scaled,y,test_size=0.2,random_state=42)
#使用彈性網(wǎng)絡(luò)回歸進(jìn)行特征選擇
enet=ElasticNet(alpha=0.1,l1_ratio=0.9)
enet.fit(X_train,y_train)
#輸出特征系數(shù)
print("特征系數(shù):",enet.coef_)4.2.2解釋在本例中,我們創(chuàng)建了一個(gè)包含5個(gè)特征的數(shù)據(jù)集,但只有前兩個(gè)特征與目標(biāo)變量y相關(guān)。通過(guò)調(diào)整l1_ratio參數(shù),我們使用彈性網(wǎng)絡(luò)回歸模型來(lái)選擇特征。輸出的特征系數(shù)中,如果某些特征的系數(shù)接近或等于0,那么這些特征可以被認(rèn)為是不重要的,可以被排除在模型之外。4.33彈性網(wǎng)絡(luò)回歸參數(shù)調(diào)優(yōu):alpha與l1_ratio彈性網(wǎng)絡(luò)回歸有兩個(gè)關(guān)鍵參數(shù)需要調(diào)優(yōu):alpha和l1_ratio。alpha控制正則化的強(qiáng)度,l1_ratio控制L1和L2正則化之間的平衡。調(diào)優(yōu)這些參數(shù)可以提高模型的預(yù)測(cè)性能和穩(wěn)定性。4.3.1示例代碼我們將使用sklearn庫(kù)中的GridSearchCV來(lái)尋找最佳的alpha和l1_ratio參數(shù)組合。importnumpyasnp
importpandasaspd
fromsklearn.linear_modelimportElasticNet
fromsklearn.preprocessingimportStandardScaler
fromsklearn.model_selectionimporttrain_test_split,GridSearchCV
fromsklearn.metricsimportmean_squared_error
#創(chuàng)建數(shù)據(jù)集
np.random.seed(0)
X=np.random.rand(100,5)
y=2*X[:,0]+3*X[:,1]+np.random.randn(100)*0.1
#特征縮放
scaler=StandardScaler()
X_scaled=scaler.fit_transform(X)
#劃分?jǐn)?shù)據(jù)集
X_train,X_test,y_train,y_test=train_test_split(X_scaled,y,test_size=0.2,random_state=42)
#定義參數(shù)網(wǎng)格
param_grid={
'alpha':np.logspace(-4,0,50),
'l1_ratio':np.linspace(0,1,11)
}
#使用GridSearchCV進(jìn)行參數(shù)調(diào)優(yōu)
enet=ElasticNet()
grid_search=GridSearchCV(enet,param_grid,cv=5,scoring='neg_mean_squared_error')
grid_search.fit(X_train,y_train)
#輸出最佳參數(shù)組合
print("最佳參數(shù)組合:",grid_search.best_params_)
#使用最佳參數(shù)進(jìn)行預(yù)測(cè)
best_enet=ElasticNet(alpha=grid_search.best_params_['alpha'],l1_ratio=grid_search.best_params_['l1_ratio'])
best_enet.fit(X_train,y_train)
y_pred_best=best_enet.predict(X_test)
mse_best=mean_squared_error(y_test,y_pred_best)
print("最佳參數(shù)組合下的MSE:",mse_best)4.3.2解釋在本例中,我們使用GridSearchCV來(lái)遍歷不同的alpha和l1_ratio參數(shù)組合,尋找能夠最小化MSE的最佳參數(shù)。通過(guò)調(diào)優(yōu),我們能夠得到一個(gè)性能更優(yōu)的彈性網(wǎng)絡(luò)回歸模型。alpha參數(shù)的范圍使用了對(duì)數(shù)尺度,這是因?yàn)檎齽t化強(qiáng)度通常在對(duì)數(shù)尺度上變化。l1_ratio參數(shù)則在0到1之間均勻分布,以探索L1和L2正則化之間的不同平衡點(diǎn)。5實(shí)戰(zhàn)案例:應(yīng)用彈性網(wǎng)絡(luò)回歸進(jìn)行房?jī)r(jià)預(yù)測(cè)5.11數(shù)據(jù)集介紹:波士頓房?jī)r(jià)數(shù)據(jù)集波士頓房?jī)r(jià)數(shù)據(jù)集是一個(gè)經(jīng)典的數(shù)據(jù)集,用于回歸分析。它包含了波士頓郊區(qū)的506個(gè)樣本,每個(gè)樣本有13個(gè)特征,包括犯罪率、住宅的平均房間數(shù)、城鎮(zhèn)的可接近性等,以及一個(gè)目標(biāo)變量:房?jī)r(jià)的中位數(shù)。這個(gè)數(shù)據(jù)集非常適合用于演示彈性網(wǎng)絡(luò)回歸模型的構(gòu)建和評(píng)估。5.22數(shù)據(jù)預(yù)處理與特征工程實(shí)戰(zhàn)在應(yīng)用彈性網(wǎng)絡(luò)回歸之前,數(shù)據(jù)預(yù)處理和特征工程是必不可少的步驟。以下是一個(gè)使用Python和Pandas進(jìn)行數(shù)據(jù)預(yù)處理的示例:importpandasaspd
fromsklearn.datasetsimportload_boston
fromsklearn.model_selectionimporttrain_test_split
fromsklearn.preprocessingimportStandardScaler
#加載波士頓房?jī)r(jià)數(shù)據(jù)集
boston=load_boston()
data=pd.DataFrame(boston.data,columns=boston.feature_names)
target=pd.Series(boston.target)
#數(shù)據(jù)預(yù)處理
#分割數(shù)據(jù)集
X_train,X_test,y_train,y_test=train_test_split(data,target,test_size=0.2,random_state=42)
#特征縮放
scaler=StandardScaler()
X_train_scaled=scaler.fit_transform(X_train)
X_test_scaled=scaler.transform(X_test)5.2.1代碼解釋加載數(shù)據(jù)集:使用sklearn.datasets中的load_boston函數(shù)加載數(shù)據(jù),然后將數(shù)據(jù)和特征名稱轉(zhuǎn)換為PandasDataFrame和Series。分割數(shù)據(jù)集:使用sklearn.model_selection中的train_test_split函數(shù)將數(shù)據(jù)集分割為訓(xùn)練集和測(cè)試集,其中測(cè)試集占20%。特征縮放:使用sklearn.preprocessing中的StandardScaler對(duì)特征進(jìn)行標(biāo)準(zhǔn)化處理,確保每個(gè)特征的均值為0,標(biāo)準(zhǔn)差為1。這一步對(duì)于彈性網(wǎng)絡(luò)回歸尤為重要,因?yàn)槟P蛯?duì)特征的尺度敏感。5.33彈性網(wǎng)絡(luò)回歸模型的構(gòu)建與評(píng)估接下來(lái),我們將構(gòu)建一個(gè)彈性網(wǎng)絡(luò)回歸模型,并使用均方誤差(MSE)和決定系數(shù)(R^2)來(lái)評(píng)估模型的性能。fromsklearn.linear_modelimportElasticNet
fromsklearn.metricsimportmean_squared_error,r2_score
#構(gòu)建彈性網(wǎng)絡(luò)回歸模型
model=ElasticNet(alpha=1.0,l1_ratio=0.5)
model.fit(X_train_scaled,y_train)
#預(yù)測(cè)
y_pred_train=model.predict(X_train_scaled)
y_pred_test=model.predict(X_test_scaled)
#評(píng)估模型
mse_train=mean_squared_error(y_train,y_pred_train)
mse_test=mean_squared_error(y_test,y_pred_test)
r2_train=r2_score(y_train,y_pred_train)
r2_test=r2_score(y_test,y_pred_test)
print("訓(xùn)練集MSE:",mse_train)
print("測(cè)試集MSE:",mse_test)
print("訓(xùn)練集R^2:",r2_train)
print("測(cè)試集R^2:",r2_test)5.3.1代碼解釋構(gòu)建模型:使用sklearn.linear_model中的ElasticNet類創(chuàng)建模型。alpha參數(shù)控制正則化強(qiáng)度,l1_ratio參數(shù)控制L1和L2正則化之間的平衡。模型訓(xùn)練:使用訓(xùn)練集數(shù)據(jù)X_train_scaled和目標(biāo)變量y_train對(duì)模型進(jìn)行訓(xùn)練。預(yù)測(cè):對(duì)訓(xùn)練集和測(cè)試集進(jìn)行預(yù)測(cè),得到預(yù)測(cè)值y_pred_train和y_pred_test。評(píng)估模型:使用sklearn.metrics中的mean_squared_error和r2_score函數(shù)計(jì)算模型在訓(xùn)練集和測(cè)試集上的均方誤差和決定系數(shù)。這些指標(biāo)可以幫助我們了解模型的擬合程度和泛化能力。通過(guò)以上步驟,我們不僅能夠構(gòu)建一個(gè)彈性網(wǎng)絡(luò)回歸模型,還能夠?qū)ζ湫阅苓M(jìn)行初步評(píng)估,為后續(xù)的模型優(yōu)化和調(diào)整提供依據(jù)。6總結(jié)與進(jìn)階學(xué)習(xí)6.11彈性網(wǎng)絡(luò)回歸的優(yōu)缺點(diǎn)總結(jié)彈性網(wǎng)絡(luò)回歸(ElasticNetRegression)結(jié)合了嶺回歸(RidgeRegression)和lasso回歸(LassoRegression)的優(yōu)點(diǎn),通過(guò)同時(shí)使用L1和L2正則化項(xiàng),有效地解決了特征選擇和模型復(fù)雜度控制的問題。下面詳細(xì)總結(jié)彈性網(wǎng)絡(luò)回歸的優(yōu)缺點(diǎn):6.1.1優(yōu)點(diǎn)特征選擇與系數(shù)收縮:彈性網(wǎng)絡(luò)回歸能夠同時(shí)進(jìn)行特征選擇和系數(shù)收縮,這使得它在處理高維數(shù)據(jù)時(shí)特別有效,能夠篩選出重要的特征,同時(shí)避免過(guò)擬合。處理多重共線性:當(dāng)特征之間存在高度相關(guān)性時(shí),lasso回歸可能無(wú)法穩(wěn)定地選擇出一組特征。彈性網(wǎng)絡(luò)回歸通過(guò)引入L2正則化,可以更好地處理多重共線性問題。靈活性:通過(guò)調(diào)整混合參數(shù)α(alpha),可以靈活地在嶺回歸和lasso回歸之間進(jìn)行選擇,當(dāng)α接近0時(shí),模型更接近嶺回歸;當(dāng)α接近1時(shí),模型更接近lasso回歸。6.1.2缺點(diǎn)參數(shù)選擇:彈性網(wǎng)絡(luò)回歸需要選擇兩個(gè)參數(shù),λ(lambda)和α(alpha),這增加了模型調(diào)參的復(fù)雜度。計(jì)算成本:相比于單一的嶺回歸或lasso回歸,彈性網(wǎng)絡(luò)回歸的計(jì)算成本可能更高,尤其是在處理大規(guī)模數(shù)據(jù)集時(shí)。解釋性:雖然彈性網(wǎng)絡(luò)回歸能夠進(jìn)行特征選擇,但其選擇的特征可能不如lasso回歸那樣容易解釋,因?yàn)長(zhǎng)2正則化的影響。6.22進(jìn)階學(xué)習(xí):網(wǎng)格搜索與交叉驗(yàn)證6.2.1網(wǎng)
溫馨提示
- 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ù)覽,若沒有圖紙預(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年高中英語(yǔ) Unit 4 Grammar and usage教案 牛津譯林版選擇性必修第二冊(cè)
- 2024年春七年級(jí)地理下冊(cè) 第6章 第二節(jié) 非洲教案 (新版)湘教版
- 2024外匯擔(dān)保合同新
- 2024委托英語(yǔ)培訓(xùn)合同
- 《廉頗藺相如列傳》教學(xué)設(shè)計(jì)
- 中班綜合糖果教案
- 美容美發(fā)店員工培訓(xùn)手冊(cè)
- 網(wǎng)絡(luò)游戲運(yùn)營(yíng)與服務(wù)合同
- 智能物聯(lián)網(wǎng)應(yīng)用開發(fā)合同
- 《銀飾之美》說(shuō)課(教案)湘美版 美術(shù)四年級(jí)下冊(cè)
- 10.1國(guó)慶節(jié)演講崢嶸七十五載山河錦繡燦爛課件
- Unit 16 on the London eye (教學(xué)設(shè)計(jì))-2023-2024學(xué)年 新概念英語(yǔ)青少版 1B
- 人教版道德與法治九年級(jí)上冊(cè)第一單元測(cè)試卷
- 2024年銀行招聘筆試真題題庫(kù)
- 銀行領(lǐng)導(dǎo)學(xué)習(xí)二十屆三中全會(huì)精神心得體會(huì)
- 譯林版初中英語(yǔ)九年級(jí)上冊(cè)全冊(cè)教學(xué)課件-譯林版初中英語(yǔ)課件app
- 2024年工程機(jī)械維修工(技師)職業(yè)鑒定考試題庫(kù)(含答案)
- AQ/T 2061-2018 金屬非金屬地下礦山防治水安全技術(shù)規(guī)范(正式版)
- 2024年北京市中考道德與法治試卷附真題答案
- 中國(guó)民族鋼琴藝術(shù)鑒賞智慧樹知到期末考試答案章節(jié)答案2024年西安交通大學(xué)
- 小學(xué)數(shù)學(xué)二年級(jí)上冊(cè)《數(shù)松果》課件
評(píng)論
0/150
提交評(píng)論