人工智能和機(jī)器學(xué)習(xí)之回歸算法:彈性網(wǎng)絡(luò)回歸:數(shù)據(jù)預(yù)處理與特征工程_第1頁(yè)
人工智能和機(jī)器學(xué)習(xí)之回歸算法:彈性網(wǎng)絡(luò)回歸:數(shù)據(jù)預(yù)處理與特征工程_第2頁(yè)
人工智能和機(jī)器學(xué)習(xí)之回歸算法:彈性網(wǎng)絡(luò)回歸:數(shù)據(jù)預(yù)處理與特征工程_第3頁(yè)
人工智能和機(jī)器學(xué)習(xí)之回歸算法:彈性網(wǎng)絡(luò)回歸:數(shù)據(jù)預(yù)處理與特征工程_第4頁(yè)
人工智能和機(jī)器學(xué)習(xí)之回歸算法:彈性網(wǎng)絡(luò)回歸:數(shù)據(jù)預(yù)處理與特征工程_第5頁(yè)
已閱讀5頁(yè),還剩13頁(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í)之回歸算法:彈性網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論