數(shù)據(jù)挖掘:特征工程:機(jī)器學(xué)習(xí)模型與特征工程_第1頁
數(shù)據(jù)挖掘:特征工程:機(jī)器學(xué)習(xí)模型與特征工程_第2頁
數(shù)據(jù)挖掘:特征工程:機(jī)器學(xué)習(xí)模型與特征工程_第3頁
數(shù)據(jù)挖掘:特征工程:機(jī)器學(xué)習(xí)模型與特征工程_第4頁
數(shù)據(jù)挖掘:特征工程:機(jī)器學(xué)習(xí)模型與特征工程_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

數(shù)據(jù)挖掘:特征工程:機(jī)器學(xué)習(xí)模型與特征工程1數(shù)據(jù)挖掘基礎(chǔ)1.1數(shù)據(jù)挖掘的定義與應(yīng)用數(shù)據(jù)挖掘(DataMining)是一種從大量數(shù)據(jù)中提取有用信息的過程,通過使用統(tǒng)計(jì)學(xué)、機(jī)器學(xué)習(xí)和數(shù)據(jù)庫技術(shù),自動或半自動地發(fā)現(xiàn)數(shù)據(jù)中的模式、關(guān)聯(lián)和趨勢。數(shù)據(jù)挖掘的應(yīng)用廣泛,包括但不限于:市場分析與管理:如客戶細(xì)分、市場籃子分析、交叉銷售、客戶忠誠度分析、市場趨勢分析。風(fēng)險(xiǎn)分析與管理:如信用風(fēng)險(xiǎn)評估、欺詐檢測。生產(chǎn)與質(zhì)量控制:如預(yù)測設(shè)備故障、優(yōu)化生產(chǎn)流程。生物醫(yī)學(xué)與健康:如疾病預(yù)測、基因序列分析。網(wǎng)絡(luò)與通信:如網(wǎng)絡(luò)流量分析、用戶行為預(yù)測。1.2數(shù)據(jù)預(yù)處理技術(shù)數(shù)據(jù)預(yù)處理是數(shù)據(jù)挖掘過程中的關(guān)鍵步驟,它包括數(shù)據(jù)清洗、數(shù)據(jù)集成、數(shù)據(jù)轉(zhuǎn)換和數(shù)據(jù)規(guī)約,目的是提高數(shù)據(jù)質(zhì)量,為后續(xù)的挖掘算法提供更可靠、更有效的數(shù)據(jù)。1.2.1數(shù)據(jù)清洗數(shù)據(jù)清洗涉及處理缺失值、噪聲數(shù)據(jù)和異常值。例如,使用Python的Pandas庫處理缺失值:importpandasaspd

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

data={'A':[1,2,np.nan],'B':[5,np.nan,np.nan],'C':[1,2,3]}

df=pd.DataFrame(data)

#使用平均值填充缺失值

df.fillna(df.mean(),inplace=True)1.2.2數(shù)據(jù)集成數(shù)據(jù)集成是將來自多個數(shù)據(jù)源的數(shù)據(jù)合并到一個一致的數(shù)據(jù)存儲中。例如,使用Pandas合并兩個數(shù)據(jù)框:#創(chuàng)建兩個數(shù)據(jù)框

df1=pd.DataFrame({'A':['A0','A1','A2','A3'],'B':['B0','B1','B2','B3'],'key':['K0','K1','K0','K1']})

df2=pd.DataFrame({'C':['C0','C1'],'D':['D0','D1'],'key':['K0','K1']})

#使用key進(jìn)行數(shù)據(jù)集成

df3=pd.merge(df1,df2,on='key')1.2.3數(shù)據(jù)轉(zhuǎn)換數(shù)據(jù)轉(zhuǎn)換包括數(shù)據(jù)規(guī)范化、數(shù)據(jù)離散化和數(shù)據(jù)泛化。例如,使用Pandas進(jìn)行數(shù)據(jù)規(guī)范化:#數(shù)據(jù)規(guī)范化

df['A']=(df['A']-df['A'].min())/(df['A'].max()-df['A'].min())1.2.4數(shù)據(jù)規(guī)約數(shù)據(jù)規(guī)約是減少數(shù)據(jù)量,同時保持?jǐn)?shù)據(jù)的完整性。例如,使用Pandas進(jìn)行數(shù)據(jù)采樣:#數(shù)據(jù)采樣

df_sample=df.sample(frac=0.5,random_state=1)1.3數(shù)據(jù)挖掘算法概覽數(shù)據(jù)挖掘算法是數(shù)據(jù)挖掘過程的核心,它們用于從數(shù)據(jù)中發(fā)現(xiàn)模式和知識。常見的數(shù)據(jù)挖掘算法包括:分類算法:如決策樹、支持向量機(jī)、K-近鄰算法。聚類算法:如K-means、層次聚類、DBSCAN。關(guān)聯(lián)規(guī)則學(xué)習(xí):如Apriori算法、FP-growth算法。回歸算法:如線性回歸、邏輯回歸、嶺回歸。降維算法:如主成分分析(PCA)、線性判別分析(LDA)。1.3.1決策樹示例決策樹是一種常用的分類算法,它通過樹結(jié)構(gòu)表示數(shù)據(jù)的決策規(guī)則。以下是一個使用Python的scikit-learn庫構(gòu)建決策樹的示例:fromsklearn.datasetsimportload_iris

fromsklearn.treeimportDecisionTreeClassifier

fromsklearn.model_selectionimporttrain_test_split

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

iris=load_iris()

X=iris.data

y=iris.target

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

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

#創(chuàng)建決策樹分類器

clf=DecisionTreeClassifier()

#訓(xùn)練模型

clf.fit(X_train,y_train)

#預(yù)測

predictions=clf.predict(X_test)在這個例子中,我們使用了Iris數(shù)據(jù)集,這是一個經(jīng)典的多類分類數(shù)據(jù)集,包含了150個樣本,每個樣本有4個特征(萼片長度、萼片寬度、花瓣長度、花瓣寬度)和一個目標(biāo)變量(鳶尾花的種類)。我們首先加載數(shù)據(jù),然后使用train_test_split函數(shù)將數(shù)據(jù)劃分為訓(xùn)練集和測試集,接著創(chuàng)建一個決策樹分類器,并使用訓(xùn)練集數(shù)據(jù)訓(xùn)練模型,最后使用模型對測試集數(shù)據(jù)進(jìn)行預(yù)測。1.3.2K-means聚類示例K-means是一種常用的聚類算法,它將數(shù)據(jù)集劃分為K個簇,使得簇內(nèi)的數(shù)據(jù)點(diǎn)盡可能相似,而簇間的差異盡可能大。以下是一個使用Python的scikit-learn庫進(jìn)行K-means聚類的示例:fromsklearn.datasetsimportmake_blobs

fromsklearn.clusterimportKMeans

importmatplotlib.pyplotasplt

#生成模擬數(shù)據(jù)

X,_=make_blobs(n_samples=300,centers=4,random_state=0,cluster_std=0.60)

#創(chuàng)建K-means聚類器

kmeans=KMeans(n_clusters=4)

#訓(xùn)練模型

kmeans.fit(X)

#預(yù)測簇標(biāo)簽

labels=kmeans.predict(X)

#繪制聚類結(jié)果

plt.scatter(X[:,0],X[:,1],c=labels,s=50,cmap='viridis')

centers=kmeans.cluster_centers_

plt.scatter(centers[:,0],centers[:,1],c='red',s=200,alpha=0.5);在這個例子中,我們使用了make_blobs函數(shù)生成了300個樣本,這些樣本被分為4個簇。然后,我們創(chuàng)建了一個K-means聚類器,并使用這些數(shù)據(jù)訓(xùn)練模型。模型訓(xùn)練完成后,我們使用predict函數(shù)預(yù)測每個數(shù)據(jù)點(diǎn)的簇標(biāo)簽,并使用matplotlib庫繪制聚類結(jié)果。從圖中可以看出,K-means算法成功地將數(shù)據(jù)點(diǎn)分為了4個簇,簇中心用紅色標(biāo)記。1.3.3Apriori算法示例Apriori算法是一種用于關(guān)聯(lián)規(guī)則學(xué)習(xí)的算法,它用于發(fā)現(xiàn)數(shù)據(jù)集中的頻繁項(xiàng)集和關(guān)聯(lián)規(guī)則。以下是一個使用Python的mlxtend庫進(jìn)行Apriori算法的示例:frommlxtend.preprocessingimportTransactionEncoder

frommlxtend.frequent_patternsimportapriori

frommlxtend.frequent_patternsimportassociation_rules

#假設(shè)我們有以下交易數(shù)據(jù)

dataset=[['Milk','Onion','Nutmeg','Eggs','Yogurt'],

['Onion','Nutmeg','Eggs','Yogurt'],

['Milk','Apple','Eggs'],

['Milk','Unicorn','Corn','Yogurt'],

['Corn','Onion','Onion','Icecream','Eggs']]

#使用TransactionEncoder編碼數(shù)據(jù)

te=TransactionEncoder()

te_ary=te.fit(dataset).transform(dataset)

df=pd.DataFrame(te_ary,columns=te.columns_)

#應(yīng)用Apriori算法

frequent_itemsets=apriori(df,min_support=0.6,use_colnames=True)

#生成關(guān)聯(lián)規(guī)則

rules=association_rules(frequent_itemsets,metric="confidence",min_threshold=0.7)在這個例子中,我們首先定義了一個交易數(shù)據(jù)集,然后使用TransactionEncoder對數(shù)據(jù)進(jìn)行編碼,將商品名稱轉(zhuǎn)換為二進(jìn)制表示。接著,我們應(yīng)用Apriori算法,設(shè)置最小支持度為0.6,這意味著只有在至少60%的交易中出現(xiàn)的項(xiàng)集才會被認(rèn)為是頻繁的。最后,我們生成關(guān)聯(lián)規(guī)則,設(shè)置最小置信度為0.7,這意味著只有當(dāng)規(guī)則的置信度至少為70%時,規(guī)則才會被保留。通過這種方式,我們可以發(fā)現(xiàn)數(shù)據(jù)集中的頻繁項(xiàng)集和關(guān)聯(lián)規(guī)則,這對于市場籃子分析等場景非常有用。2特征工程核心概念2.1特征選擇的重要性在數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí)項(xiàng)目中,特征選擇(FeatureSelection)是一個關(guān)鍵步驟,它涉及從原始數(shù)據(jù)集中挑選出最相關(guān)的特征,以用于模型構(gòu)建。特征選擇的重要性在于:減少維度:降低數(shù)據(jù)的維度,減少計(jì)算復(fù)雜度,提高模型訓(xùn)練速度。提高模型性能:去除無關(guān)或冗余特征,可以減少過擬合,提高模型的泛化能力。增強(qiáng)模型可解釋性:較少的特征使得模型更容易理解和解釋。2.1.1示例:使用遞歸特征消除(RFE)進(jìn)行特征選擇假設(shè)我們有一個包含多個特征的數(shù)據(jù)集,我們使用RFE方法來選擇最重要的特征。#導(dǎo)入必要的庫

fromsklearn.datasetsimportload_iris

fromsklearn.feature_selectionimportRFE

fromsklearn.svmimportSVC

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

iris=load_iris()

X=iris.data

y=iris.target

#創(chuàng)建SVM分類器

svc=SVC(kernel="linear")

#使用RFE進(jìn)行特征選擇,選擇3個特征

rfe=RFE(estimator=svc,n_features_to_select=3)

rfe.fit(X,y)

#輸出選擇的特征

print("Selectedfeatures:",iris.feature_names[rfe.support_])2.2特征構(gòu)建與轉(zhuǎn)換特征構(gòu)建(FeatureEngineering)是指通過數(shù)據(jù)的領(lǐng)域知識,創(chuàng)建新的特征或轉(zhuǎn)換現(xiàn)有特征,以提高模型的預(yù)測能力。特征轉(zhuǎn)換(FeatureTransformation)則包括對特征進(jìn)行數(shù)學(xué)操作,如歸一化、標(biāo)準(zhǔn)化、對數(shù)轉(zhuǎn)換等,以改善特征的分布或滿足模型的假設(shè)。2.2.1示例:使用對數(shù)轉(zhuǎn)換處理偏斜數(shù)據(jù)假設(shè)我們有一個特征,其數(shù)據(jù)分布嚴(yán)重偏斜,我們可以通過對數(shù)轉(zhuǎn)換來改善其分布。importnumpyasnp

importpandasaspd

importmatplotlib.pyplotasplt

#創(chuàng)建一個偏斜的特征數(shù)據(jù)

data=np.random.exponential(scale=2.0,size=1000)

#使用對數(shù)轉(zhuǎn)換

log_data=np.log(data)

#創(chuàng)建DataFrame

df=pd.DataFrame({'Original':data,'LogTransformed':log_data})

#繪制直方圖

df.plot(kind='hist',bins=50,alpha=0.6,color=['blue','green'])

plt.show()2.3特征選擇方法特征選擇方法可以分為三類:過濾式(FilterMethods)、包裹式(WrapperMethods)和嵌入式(EmbeddedMethods)。過濾式方法:基于特征與目標(biāo)變量之間的統(tǒng)計(jì)關(guān)系進(jìn)行特征選擇,如相關(guān)系數(shù)、卡方檢驗(yàn)等。包裹式方法:使用模型的性能作為特征選擇的標(biāo)準(zhǔn),如遞歸特征消除(RFE)。嵌入式方法:在模型訓(xùn)練過程中進(jìn)行特征選擇,如LASSO回歸、隨機(jī)森林的特征重要性。2.3.1示例:使用隨機(jī)森林進(jìn)行特征選擇隨機(jī)森林(RandomForest)是一種可以評估特征重要性的模型,我們可以利用這一點(diǎn)來進(jìn)行特征選擇。fromsklearn.datasetsimportload_boston

fromsklearn.ensembleimportRandomForestRegressor

importmatplotlib.pyplotasplt

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

boston=load_boston()

X=boston.data

y=boston.target

#創(chuàng)建隨機(jī)森林回歸模型

rf=RandomForestRegressor(n_estimators=100,random_state=42)

rf.fit(X,y)

#輸出特征重要性

importances=rf.feature_importances_

indices=np.argsort(importances)[::-1]

#繪制特征重要性圖

plt.figure()

plt.title("Featureimportances")

plt.bar(range(X.shape[1]),importances[indices],

color="r",align="center")

plt.xticks(range(X.shape[1]),boston.feature_names[indices],rotation=90)

plt.xlim([-1,X.shape[1]])

plt.show()以上示例中,我們使用隨機(jī)森林回歸模型對波士頓房價數(shù)據(jù)集的特征進(jìn)行了重要性評估,并繪制了特征重要性的條形圖。通過觀察圖表,我們可以選擇重要性較高的特征用于后續(xù)的模型訓(xùn)練。3數(shù)據(jù)挖掘:特征工程:機(jī)器學(xué)習(xí)模型與特征工程3.1機(jī)器學(xué)習(xí)模型簡介3.1.1監(jiān)督學(xué)習(xí)模型監(jiān)督學(xué)習(xí)是機(jī)器學(xué)習(xí)中最常見的類型之一,它通過給模型提供帶有標(biāo)簽的訓(xùn)練數(shù)據(jù),使模型能夠?qū)W習(xí)到輸入與輸出之間的映射關(guān)系。監(jiān)督學(xué)習(xí)模型可以分為兩大類:分類模型和回歸模型。3.1.1.1分類模型分類模型用于預(yù)測離散的類別輸出。例如,預(yù)測一封電子郵件是否為垃圾郵件,或者識別一張圖片中的物體是貓還是狗。示例:邏輯回歸邏輯回歸是一種廣泛使用的分類算法,盡管其名稱中包含“回歸”,但它主要用于解決二分類問題。下面是一個使用Python的scikit-learn庫實(shí)現(xiàn)邏輯回歸的示例:#導(dǎo)入必要的庫

fromsklearn.datasetsimportload_iris

fromsklearn.linear_modelimportLogisticRegression

fromsklearn.model_selectionimporttrain_test_split

fromsklearn.metricsimportaccuracy_score

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

iris=load_iris()

X=iris.data

y=iris.target

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

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

#創(chuàng)建邏輯回歸模型

model=LogisticRegression()

#訓(xùn)練模型

model.fit(X_train,y_train)

#預(yù)測

y_pred=model.predict(X_test)

#評估模型

accuracy=accuracy_score(y_test,y_pred)

print(f"模型準(zhǔn)確率:{accuracy}")在這個例子中,我們使用了著名的Iris數(shù)據(jù)集,它包含了150個樣本,每個樣本有4個特征(萼片長度、萼片寬度、花瓣長度、花瓣寬度)和一個標(biāo)簽(鳶尾花的種類)。我們首先加載數(shù)據(jù),然后將其劃分為訓(xùn)練集和測試集,接著創(chuàng)建并訓(xùn)練邏輯回歸模型,最后評估模型的準(zhǔn)確率。3.1.1.2回歸模型回歸模型用于預(yù)測連續(xù)的數(shù)值輸出。例如,預(yù)測房價、股票價格等。示例:線性回歸線性回歸是最基本的回歸算法,它假設(shè)輸入特征與輸出之間存在線性關(guān)系。下面是一個使用Python的scikit-learn庫實(shí)現(xiàn)線性回歸的示例:#導(dǎo)入必要的庫

fromsklearn.datasetsimportfetch_california_housing

fromsklearn.linear_modelimportLinearRegression

fromsklearn.model_selectionimporttrain_test_split

fromsklearn.metricsimportmean_squared_error

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

housing=fetch_california_housing()

X=housing.data

y=housing.target

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

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

#創(chuàng)建線性回歸模型

model=LinearRegression()

#訓(xùn)練模型

model.fit(X_train,y_train)

#預(yù)測

y_pred=model.predict(X_test)

#評估模型

mse=mean_squared_error(y_test,y_pred)

print(f"模型均方誤差:{mse}")在這個例子中,我們使用了CaliforniaHousing數(shù)據(jù)集,它包含了20640個樣本,每個樣本有8個特征(如人口、收入、房屋年齡等)和一個標(biāo)簽(房屋的中位數(shù)價格)。我們首先加載數(shù)據(jù),然后將其劃分為訓(xùn)練集和測試集,接著創(chuàng)建并訓(xùn)練線性回歸模型,最后評估模型的均方誤差。3.1.2非監(jiān)督學(xué)習(xí)模型非監(jiān)督學(xué)習(xí)與監(jiān)督學(xué)習(xí)不同,它不需要帶有標(biāo)簽的訓(xùn)練數(shù)據(jù)。非監(jiān)督學(xué)習(xí)模型主要用于發(fā)現(xiàn)數(shù)據(jù)中的結(jié)構(gòu)和模式,如聚類和降維。3.1.2.1聚類聚類是將數(shù)據(jù)集中的樣本分組到不同的簇中,使得同一簇內(nèi)的樣本相似度高,而不同簇之間的樣本相似度低。示例:K-means聚類K-means是一種常用的聚類算法,它試圖將數(shù)據(jù)集中的樣本劃分為K個簇,使得簇內(nèi)的樣本距離最小。下面是一個使用Python的scikit-learn庫實(shí)現(xiàn)K-means聚類的示例:#導(dǎo)入必要的庫

fromsklearn.datasetsimportmake_blobs

fromsklearn.clusterimportKMeans

importmatplotlib.pyplotasplt

#生成模擬數(shù)據(jù)

X,_=make_blobs(n_samples=300,centers=4,random_state=42)

#創(chuàng)建K-means模型

model=KMeans(n_clusters=4)

#訓(xùn)練模型

model.fit(X)

#預(yù)測簇標(biāo)簽

y_pred=model.predict(X)

#可視化結(jié)果

plt.scatter(X[:,0],X[:,1],c=y_pred)

plt.show()在這個例子中,我們使用了make_blobs函數(shù)生成了300個樣本,這些樣本被分為4個簇。我們創(chuàng)建并訓(xùn)練了K-means模型,然后預(yù)測了每個樣本的簇標(biāo)簽,并將結(jié)果可視化。3.1.3模型評估與選擇模型評估是衡量模型性能的過程,而模型選擇是在多個模型中選擇最佳模型的過程。評估和選擇模型時,我們通常會使用交叉驗(yàn)證、網(wǎng)格搜索等技術(shù)。3.1.3.1交叉驗(yàn)證交叉驗(yàn)證是一種評估模型性能的方法,它將數(shù)據(jù)集劃分為多個子集,然后在不同的子集上訓(xùn)練和測試模型,以獲得模型性能的平均值。示例:K折交叉驗(yàn)證K折交叉驗(yàn)證是一種常用的交叉驗(yàn)證方法,它將數(shù)據(jù)集劃分為K個子集,然后在K-1個子集上訓(xùn)練模型,在剩下的1個子集上測試模型,重復(fù)K次,每次選擇不同的子集作為測試集。#導(dǎo)入必要的庫

fromsklearn.datasetsimportload_iris

fromsklearn.linear_modelimportLogisticRegression

fromsklearn.model_selectionimportcross_val_score

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

iris=load_iris()

X=iris.data

y=iris.target

#創(chuàng)建邏輯回歸模型

model=LogisticRegression()

#使用K折交叉驗(yàn)證評估模型

scores=cross_val_score(model,X,y,cv=5)

print(f"交叉驗(yàn)證得分:{scores.mean()}")在這個例子中,我們使用了Iris數(shù)據(jù)集和邏輯回歸模型。我們使用了5折交叉驗(yàn)證來評估模型的性能,最后輸出了平均得分。3.1.3.2網(wǎng)格搜索網(wǎng)格搜索是一種模型選擇技術(shù),它通過在預(yù)定義的參數(shù)網(wǎng)格上訓(xùn)練和評估模型,以找到最佳的參數(shù)組合。示例:使用網(wǎng)格搜索選擇最佳參數(shù)網(wǎng)格搜索可以與交叉驗(yàn)證結(jié)合使用,以在多個模型中選擇最佳模型。下面是一個使用Python的scikit-learn庫實(shí)現(xiàn)網(wǎng)格搜索的示例:#導(dǎo)入必要的庫

fromsklearn.datasetsimportload_iris

fromsklearn.linear_modelimportLogisticRegression

fromsklearn.model_selectionimportGridSearchCV

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

iris=load_iris()

X=iris.data

y=iris.target

#創(chuàng)建邏輯回歸模型

model=LogisticRegression()

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

param_grid={'C':[0.001,0.01,0.1,1,10,100,1000]}

#使用網(wǎng)格搜索和交叉驗(yàn)證選擇最佳參數(shù)

grid_search=GridSearchCV(model,param_grid,cv=5)

grid_search.fit(X,y)

#輸出最佳參數(shù)

print(f"最佳參數(shù):{grid_search.best_params_}")在這個例子中,我們使用了Iris數(shù)據(jù)集和邏輯回歸模型。我們定義了一個參數(shù)網(wǎng)格,其中包含不同的正則化參數(shù)C。我們使用了5折交叉驗(yàn)證和網(wǎng)格搜索來選擇最佳的參數(shù)組合,最后輸出了最佳參數(shù)。通過上述示例,我們可以看到,無論是監(jiān)督學(xué)習(xí)還是非監(jiān)督學(xué)習(xí),選擇合適的模型和參數(shù)對于獲得良好的預(yù)測結(jié)果至關(guān)重要。模型評估和選擇技術(shù),如交叉驗(yàn)證和網(wǎng)格搜索,可以幫助我們找到最佳的模型和參數(shù)組合。4特征選擇技術(shù)特征選擇是數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí)中一個關(guān)鍵步驟,它旨在從原始特征集中選擇最相關(guān)的特征子集,以提高模型的性能和解釋性。特征選擇技術(shù)可以分為三類:過濾式、包裹式和嵌入式。4.1過濾式特征選擇過濾式特征選擇方法是基于特征與目標(biāo)變量之間的統(tǒng)計(jì)相關(guān)性來評估特征的重要性,而無需考慮模型的性能。這種方法簡單快速,但可能忽略特征之間的相互作用。4.1.1原理過濾式特征選擇通常使用統(tǒng)計(jì)測試,如卡方檢驗(yàn)、ANOVA、皮爾遜相關(guān)系數(shù)等,來評估特征與目標(biāo)變量之間的關(guān)系。特征根據(jù)這些測試的結(jié)果進(jìn)行排序,然后選擇排名靠前的特征。4.1.2示例代碼假設(shè)我們有一個數(shù)據(jù)集data,其中包含多個特征和一個目標(biāo)變量target。importpandasaspd

fromsklearn.feature_selectionimportSelectKBest,f_classif

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

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

#分離特征和目標(biāo)變量

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

y=data['target']

#使用ANOVAF值進(jìn)行特征選擇

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

X_new=k_best.fit_transform(X,y)

#打印被選擇的特征

selected_features=X.columns[k_best.get_support()]

print(selected_features)4.2包裹式特征選擇包裹式特征選擇方法將特征選擇視為一個搜索問題,通過評估不同特征組合在模型上的性能來選擇最佳特征子集。這種方法通常更準(zhǔn)確,但計(jì)算成本較高。4.2.1原理包裹式特征選擇使用模型的性能作為特征子集的評價標(biāo)準(zhǔn)。常見的包裹式方法包括遞歸特征消除(RFE)、遺傳算法和基于搜索的方法,如網(wǎng)格搜索或隨機(jī)搜索。4.2.2示例代碼使用遞歸特征消除(RFE)進(jìn)行特征選擇。importpandasaspd

fromsklearn.feature_selectionimportRFE

fromsklearn.linear_modelimportLogisticRegression

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

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

#分離特征和目標(biāo)變量

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

y=data['target']

#創(chuàng)建模型

model=LogisticRegression()

#使用RFE進(jìn)行特征選擇

rfe=RFE(estimator=model,n_features_to_select=5)

X_rfe=rfe.fit_transform(X,y)

#打印被選擇的特征

selected_features=X.columns[rfe.support_]

print(selected_features)4.3嵌入式特征選擇嵌入式特征選擇方法在模型訓(xùn)練過程中同時進(jìn)行特征選擇,通過模型的內(nèi)部機(jī)制來評估特征的重要性。這種方法結(jié)合了過濾式和包裹式的優(yōu)點(diǎn),既考慮了特征與目標(biāo)變量的關(guān)系,也考慮了特征之間的相互作用。4.3.1原理嵌入式特征選擇通常使用正則化模型,如Lasso回歸或隨機(jī)森林,這些模型在訓(xùn)練過程中能夠自動降低不重要特征的權(quán)重,從而實(shí)現(xiàn)特征選擇。4.3.2示例代碼使用隨機(jī)森林進(jìn)行特征選擇。importpandasaspd

fromsklearn.ensembleimportRandomForestClassifier

fromsklearn.feature_selectionimportSelectFromModel

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

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

#分離特征和目標(biāo)變量

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

y=data['target']

#創(chuàng)建隨機(jī)森林模型

model=RandomForestClassifier()

#使用SelectFromModel進(jìn)行特征選擇

sfm=SelectFromModel(estimator=model,threshold=0.2)

X_sfm=sfm.fit_transform(X,y)

#打印被選擇的特征

selected_features=X.columns[sfm.get_support()]

print(selected_features)以上示例展示了如何使用過濾式、包裹式和嵌入式特征選擇技術(shù)來優(yōu)化特征集。每種方法都有其優(yōu)缺點(diǎn),選擇哪種方法取決于數(shù)據(jù)集的大小、特征的性質(zhì)以及模型的類型。5特征構(gòu)建與轉(zhuǎn)換5.1特征編碼技術(shù)5.1.1獨(dú)熱編碼(One-HotEncoding)獨(dú)熱編碼是一種將分類特征轉(zhuǎn)換為數(shù)值特征的方法,特別適用于機(jī)器學(xué)習(xí)模型中需要數(shù)值輸入的情況。例如,假設(shè)我們有一個特征“顏色”,它有三個可能的值:“紅”,“綠”,“藍(lán)”。獨(dú)熱編碼會將這個特征轉(zhuǎn)換為三個二進(jìn)制特征:“顏色_紅”,“顏色_綠”,“顏色_藍(lán)”,每個特征表示顏色是否為相應(yīng)的值。5.1.1.1示例代碼importpandasaspd

fromsklearn.preprocessingimportOneHotEncoder

#創(chuàng)建一個包含分類特征的DataFrame

data=pd.DataFrame({

'顏色':['紅','綠','藍(lán)','紅','綠']

})

#使用pandas的get_dummies函數(shù)進(jìn)行獨(dú)熱編碼

one_hot_data=pd.get_dummies(data,columns=['顏色'])

#輸出編碼后的數(shù)據(jù)

print(one_hot_data)5.1.1.2輸出結(jié)果顏色_藍(lán)顏色_綠顏色_紅

0001

1010

2100

3001

40105.1.2標(biāo)簽編碼(LabelEncoding)標(biāo)簽編碼是將分類特征轉(zhuǎn)換為整數(shù)編碼的一種方法。這種方法簡單直接,但可能引入特征之間的順序關(guān)系,這在某些情況下可能不適用。5.1.2.1示例代碼fromsklearn.preprocessingimportLabelEncoder

#創(chuàng)建一個包含分類特征的列表

colors=['紅','綠','藍(lán)','紅','綠']

#創(chuàng)建并應(yīng)用標(biāo)簽編碼器

label_encoder=LabelEncoder()

encoded_colors=label_encoder.fit_transform(colors)

#輸出編碼后的結(jié)果

print(encoded_colors)5.1.2.2輸出結(jié)果[01201]5.2特征縮放與標(biāo)準(zhǔn)化5.2.1標(biāo)準(zhǔn)化(Standardization)標(biāo)準(zhǔn)化(也稱為Z-score標(biāo)準(zhǔn)化)是一種將特征縮放到具有零均值和單位方差的分布的方法。這在許多機(jī)器學(xué)習(xí)算法中是必要的,因?yàn)樗鼈兛赡軐μ卣鞯某叨让舾小?.2.1.1示例代碼fromsklearn.preprocessingimportStandardScaler

importnumpyasnp

#創(chuàng)建一個包含數(shù)值特征的數(shù)組

features=np.array([[1.0,2.0],[2.0,3.0],[3.0,4.0],[4.0,5.0]])

#創(chuàng)建并應(yīng)用標(biāo)準(zhǔn)化器

scaler=StandardScaler()

standardized_features=scaler.fit_transform(features)

#輸出標(biāo)準(zhǔn)化后的特征

print(standardized_features)5.2.1.2輸出結(jié)果[[-1.34164079-1.34164079]

[-0.4472136-0.4472136]

[0.44721360.4472136]

[1.341640791.34164079]]5.2.2歸一化(Normalization)歸一化是一種將特征縮放到固定范圍(通常是0到1)的方法。這在處理具有不同尺度的特征時特別有用,例如在神經(jīng)網(wǎng)絡(luò)中。5.2.2.1示例代碼fromsklearn.preprocessingimportMinMaxScaler

#使用相同的特征數(shù)組

scaler=MinMaxScaler()

normalized_features=scaler.fit_transform(features)

#輸出歸一化后的特征

print(normalized_features)5.2.2.2輸出結(jié)果[[0.0.]

[0.330.33]

[0.670.67]

[1.1.]]5.3高維特征降維5.3.1主成分分析(PCA)主成分分析是一種統(tǒng)計(jì)方法,用于識別數(shù)據(jù)中的模式并以較少的維度表示數(shù)據(jù),同時盡可能保留原始數(shù)據(jù)的方差。這在處理高維數(shù)據(jù)時特別有用,可以減少計(jì)算成本并避免維度災(zāi)難。5.3.1.1示例代碼fromsklearn.decompositionimportPCA

importnumpyasnp

#創(chuàng)建一個高維數(shù)據(jù)集

data=np.random.rand(100,10)

#創(chuàng)建并應(yīng)用PCA

pca=PCA(n_components=2)

reduced_data=pca.fit_transform(data)

#輸出降維后的數(shù)據(jù)

print(reduced_data)5.3.1.2輸出結(jié)果由于數(shù)據(jù)是隨機(jī)生成的,輸出將是一組100行2列的數(shù)值,代表降維后的數(shù)據(jù)點(diǎn)。5.3.2t-分布鄰域嵌入(t-SNE)t-SNE是一種非線性降維技術(shù),特別適用于可視化高維數(shù)據(jù)。它通過保持?jǐn)?shù)據(jù)點(diǎn)之間的相對距離來創(chuàng)建低維嵌入。5.3.2.1示例代碼fromsklearn.manifoldimportTSNE

importnumpyasnp

#使用相同的高維數(shù)據(jù)集

tsne=TSNE(n_components=2,random_state=0)

tsne_data=tsne.fit_transform(data)

#輸出t-SNE降維后的數(shù)據(jù)

print(tsne_data)5.3.2.2輸出結(jié)果同樣,輸出將是一組100行2列的數(shù)值,代表t-SNE降維后的數(shù)據(jù)點(diǎn),這些點(diǎn)在二維空間中更好地保持了原始高維數(shù)據(jù)的結(jié)構(gòu)。6模型與特征工程的結(jié)合6.1特征工程對模型性能的影響特征工程是機(jī)器學(xué)習(xí)項(xiàng)目中至關(guān)重要的一步,它直接影響模型的性能。特征工程包括數(shù)據(jù)清洗、特征選擇、特征創(chuàng)建、特征轉(zhuǎn)換等過程,目的是將原始數(shù)據(jù)轉(zhuǎn)化為對模型訓(xùn)練更有利的形式。例如,通過編碼處理類別特征,可以將其轉(zhuǎn)換為數(shù)值型,便于模型理解;通過歸一化或標(biāo)準(zhǔn)化,可以消除特征間的量綱影響,提高模型的收斂速度和預(yù)測準(zhǔn)確性。6.1.1示例:類別特征編碼假設(shè)我們有一個數(shù)據(jù)集,其中包含一個類別特征color,有三個可能的值:red、green、blue。我們可以使用pandas和sklearn的LabelEncoder進(jìn)行編碼。importpandasaspd

fromsklearn.preprocessingimportLabelEncoder

#創(chuàng)建數(shù)據(jù)集

data={'color':['red','green','blue','red','green']}

df=pd.DataFrame(data)

#初始化LabelEncoder

le=LabelEncoder()

#對類別特征進(jìn)行編碼

df['color_encoded']=le.fit_transform(df['color'])

print(df)輸出結(jié)果:colorcolor_encoded

0red0

1green1

2blue2

3red0

4green1通過編碼,color特征被轉(zhuǎn)換為數(shù)值型,這有助于模型的訓(xùn)練。6.2模型選擇與特征工程的迭代過程模型選擇和特征工程是一個迭代的過程。首先,基于初步的特征集選擇模型,然后評估模型性能。如果性能不佳,可以回過頭來調(diào)整特征工程策略,如增加新特征、刪除無關(guān)特征、改變特征的表示形式等,再重新選擇模型并評估。這個過程可能需要多次迭代,直到找到最佳的特征組合和模型。6.2.1示例:特征選擇與模型評估使用sklearn的SelectKBest進(jìn)行特征選擇,結(jié)合RandomForestClassifier進(jìn)行分類任務(wù)。fromsklearn.datasetsimportload_iris

fromsklearn.feature_selectionimportSelectKBest,chi2

fromsklearn.ensembleimportRandomForestClassifier

fromsklearn.model_selectionimporttrain_test_split

fromsklearn.metricsimportaccuracy_score

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

iris=load_iris()

X,y=iris.data,iris.target

#特征選擇

kbest=SelectKBest(score_func=chi2,k=2)

X_new=kbest.fit_transform(X,y)

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

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

#訓(xùn)練模型

clf=RandomForestClassifier(n_estimators=100,random_state=42)

clf.fit(X_train,y_train)

#預(yù)測并評估

y_pred=clf.predict(X_test)

print("Accuracy:",accuracy_score(y_test,y_pred))在這個例子中,我們首先使用SelectKBest選擇最佳的兩個特征,然后使用RandomForestClassifier進(jìn)行分類,最后評估模型的準(zhǔn)確性。6.3案例分析:特征工程在實(shí)際項(xiàng)目中的應(yīng)用在實(shí)際項(xiàng)目中,特征工程的應(yīng)用更為復(fù)雜。例如,在預(yù)測房價的項(xiàng)目中,可能需要處理缺失值、創(chuàng)建新的特征(如房屋的年齡)、轉(zhuǎn)換特征(如對數(shù)值特征進(jìn)行對數(shù)轉(zhuǎn)換)等。6.3.1示例:房價預(yù)測項(xiàng)目中的特征工程使用pandas處理數(shù)據(jù),sklearn進(jìn)行特征轉(zhuǎn)換和模型訓(xùn)練。importpandasaspd

fromsklearn.model_selectionimporttrain_test_split

fromsklearn.preprocessingimportStandardScaler

fromsklearn.linear_modelimportLinearRegression

fromsklearn.metricsimportmean_squared_error

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

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

#處理缺失值

data.fillna(data.mean(),inplace=True)

#創(chuàng)建新特征:房屋年齡

data['house_age']=data['year_built']-data['year_sold']

#特征轉(zhuǎn)換:對數(shù)值特征進(jìn)行對數(shù)轉(zhuǎn)換

data['log_sqft']=np.log(data['sqft'])

#選擇特征

features=['bedrooms','bathrooms','sqft','log_sqft','house_age']

X=data[features]

y=data['price']

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

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.3,random_state=42)

#訓(xùn)練模型

model=LinearRegression()

model.fit(X_train,y_train)

#預(yù)測并評估

y_pred=model.predict(X_test)

print("MSE:",mean_squared_error(y_test,y_pred))在這個例子中,我們處理了數(shù)據(jù)集中的缺失值,創(chuàng)建了house_age新特征,對sqft特征進(jìn)行了對數(shù)轉(zhuǎn)換,然后使用StandardScaler進(jìn)行數(shù)據(jù)標(biāo)準(zhǔn)化,最后使用LinearRegression進(jìn)行預(yù)測,并評估模型的均方誤差(MSE)。7高級主題7.1特征重要性評估特征重要性評估是機(jī)器學(xué)習(xí)中一個關(guān)鍵步驟,它幫助我們理解哪些特征對模型的預(yù)測能力貢獻(xiàn)最大。這不僅有助于模型解釋,還能用于特征選擇,減少模型復(fù)雜度,提高訓(xùn)練效率。7.1.1原理特征重要性可以通過多種方式評估,包括但不限于:基于模型的特征重要性:某些模型,如隨機(jī)森林和梯度提升樹,可以直接提供特征重要性的度量。基于統(tǒng)計(jì)的特征重要性:如卡方檢驗(yàn)、ANOVA等,用于評估特征與目標(biāo)變量之間的統(tǒng)計(jì)關(guān)系?;谛阅艿奶卣髦匾裕和ㄟ^移除或添加特征觀察模型性能的變化來評估特征的重要性。7.1.2示例:基于模型的特征重要性評估假設(shè)我們有一個數(shù)據(jù)集,包含房屋的多個特征(如面積、臥室數(shù)量、地理位置等),以及房屋的價格。我們將使用隨機(jī)森林回歸模型來評估特征的重要性。importpandasaspd

fromsklearn.ensembleimportRandomForestRegressor

fromsklearn.model_selectionimporttrain_test_spli

溫馨提示

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

最新文檔

評論

0/150

提交評論