0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

機(jī)器學(xué)習(xí)算法學(xué)習(xí)之特征工程1

jf_78858299 ? 來源:人工智能大講堂 ? 作者:人工智能大講堂 ? 2023-04-19 11:38 ? 次閱讀

特征工程是將原始數(shù)據(jù)轉(zhuǎn)換為有意義的特征,以供機(jī)器學(xué)習(xí)算法使用并進(jìn)行準(zhǔn)確預(yù)測(cè)的過程。它涉及選擇、提取和轉(zhuǎn)換特征,以增強(qiáng)模型的性能。良好的特征工程可以極大地提高模型的準(zhǔn)確性,而糟糕的特征工程則可能導(dǎo)致性能不佳。

Fig.1 — Feature Engineering

在本指南中,我們將介紹一系列常用的特征工程技術(shù)。我們將從特征選擇和提取開始,這涉及識(shí)別數(shù)據(jù)中最重要的特征。然后,我們將轉(zhuǎn)向編碼分類變量,這是處理非數(shù)字?jǐn)?shù)據(jù)時(shí)的重要步驟。我們還將涵蓋縮放和歸一化、創(chuàng)建新特征、處理不平衡數(shù)據(jù)、處理偏斜和峰度、處理稀有類別、處理時(shí)間序列數(shù)據(jù)、特征變換、獨(dú)熱編碼、計(jì)數(shù)和頻率編碼、分箱、分組和文本預(yù)處理等內(nèi)容。

通過本指南,您將全面了解特征工程技術(shù)及其如何用于提高機(jī)器學(xué)習(xí)模型的性能。讓我們開始吧!

目錄

1.特征選擇和提取

2.編碼分類變量

3.縮放和歸一化

4.創(chuàng)建新特征

5.處理不平衡數(shù)據(jù)

6.處理偏斜和峰度

7.處理稀有類別

8.處理時(shí)間序列數(shù)據(jù)

9.文本預(yù)處理

特征選擇和提取

特征選擇和提取是機(jī)器學(xué)習(xí)中必不可少的部分,它涉及從數(shù)據(jù)集中選擇最相關(guān)的特征,以提高模型的準(zhǔn)確性和效率。在這里,我們將討論一些流行的特征選擇和提取方法,并提供 Python 代碼片段。

** 1.主成分分析(PCA)** :PCA 是一種降維技術(shù),通過找到一個(gè)能夠捕獲數(shù)據(jù)中最大方差的新特征集,從而減少數(shù)據(jù)集中的特征數(shù)量。新特征稱為主成分,它們彼此正交并可用于重構(gòu)原始數(shù)據(jù)集。

讓我們看看如何使用 scikit-learn 對(duì)數(shù)據(jù)集執(zhí)行 PCA:

from sklearn.decomposition import PCA


# create a PCA object
pca = PCA(n_components=2)


# fit and transform the data
X_pca = pca.fit_transform(X)


# calculate the explained variance ratio
print("Explained variance ratio:", pca.explained_variance_ratio_)

在這里,我們創(chuàng)建一個(gè) PCA 對(duì)象并指定要提取的主成分?jǐn)?shù)量。然后,我們擬合和轉(zhuǎn)換數(shù)據(jù)以獲得新的特征集。最后,我們計(jì)算解釋的方差比率以確定每個(gè)主成分捕獲了多少數(shù)據(jù)中的方差。

** 2.線性判別分析(LDA)** :LDA 是一種用于分類問題中的特征提取的監(jiān)督學(xué)習(xí)技術(shù)。它通過找到一個(gè)新的特征集,最大化數(shù)據(jù)中類別之間的分離程度。

讓我們看看如何使用 scikit-learn 在數(shù)據(jù)集上執(zhí)行 LDA:

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis


# create an LDA object
lda = LinearDiscriminantAnalysis(n_components=1)


# fit and transform the data
X_lda = lda.fit_transform(X, y)

在這里,我們創(chuàng)建一個(gè) LDA 對(duì)象并指定要提取的主成分?jǐn)?shù)量。然后,我們擬合和轉(zhuǎn)換數(shù)據(jù)以獲得新的特征集。

3.相關(guān)分析 :相關(guān)分析用于識(shí)別數(shù)據(jù)集中特征之間的相關(guān)性。高度相關(guān)的特征可以從數(shù)據(jù)集中刪除,因?yàn)樗鼈兲峁┝巳哂?a target="_blank">信息。

讓我們看看如何使用 pandas 在數(shù)據(jù)集上執(zhí)行相關(guān)分析:

import pandas as pd


# calculate the correlation matrix
corr_matrix = df.corr()


# select highly correlated features
high_corr = corr_matrix[abs(corr_matrix) > 0.8]


# drop highly correlated features
df = df.drop(high_corr.columns, axis=1)

在這里,我們使用 pandas 計(jì)算相關(guān)矩陣并選擇高度相關(guān)的特征。然后,我們使用 drop 方法從數(shù)據(jù)集中刪除高度相關(guān)的特征。

圖片

Fig.2 — Feature Selection Measures

** 4. 遞歸特征消除(RFE)** :RFE 是一種通過逐步考慮越來越小的特征子集來選擇特征的方法。在每次迭代中,模型使用剩余的特征進(jìn)行訓(xùn)練,并對(duì)每個(gè)特征的重要性進(jìn)行排名。然后消除最不重要的特征,并重復(fù)該過程,直到獲得所需數(shù)量的特征為止。

以下是使用 RFE 進(jìn)行特征選擇的示例:

from sklearn.feature_selection import RFE
from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_boston


data = load_boston()
X, y = data.data, data.target


model = LinearRegression()
rfe = RFE(model, n_features_to_select=5)
rfe.fit(X, y)


selected_features = data.feature_names[rfe.support_]
print(selected_features)

** 5.基于樹的方法** :決策樹和隨機(jī)森林是用于這個(gè)目的的流行的基于樹的方法。在這些方法中,基于最重要的特征來預(yù)測(cè)目標(biāo)變量創(chuàng)建了一個(gè)樹結(jié)構(gòu)。每個(gè)特征的重要性是通過基于該特征拆分?jǐn)?shù)據(jù)導(dǎo)致的不純度減少來計(jì)算的。

在決策樹中,選擇信息增益最高的特征作為根節(jié)點(diǎn),并基于該特征拆分?jǐn)?shù)據(jù)。這個(gè)過程遞歸重復(fù),直到滿足停止標(biāo)準(zhǔn),例如最大樹深度或每個(gè)葉子節(jié)點(diǎn)的最小樣本數(shù)。

在隨機(jī)森林中,使用特征和數(shù)據(jù)的隨機(jī)子集來建立多個(gè)決策樹。每個(gè)特征的重要性是通過在所有樹中平均減少不純度來計(jì)算的。這有助于降低模型的方差并提高其可推廣性。

from sklearn.ensemble import RandomForestRegressor


# Load the data
X, y = load_data()


# Create a random forest regressor
rf = RandomForestRegressor(n_estimators=100, random_state=42)


# Fit the model
rf.fit(X, y)


# Get feature importances
importances = rf.feature_importances_


# Print feature importances
for feature, importance in zip(X.columns, importances):
    print(feature, importance)

基于樹的方法也可以用于特征提取。在這種情況下,我們可以基于樹的決策邊界提取新的特征。例如,我們可以使用決策樹的葉節(jié)點(diǎn)作為新的二元特征,指示數(shù)據(jù)點(diǎn)是否落在特征空間的該區(qū)域內(nèi)。

** 6.包裝方法** :這是一種特征選擇方法,其中模型在不同的特征子集上進(jìn)行訓(xùn)練和評(píng)估。對(duì)于每個(gè)特征子集,模型的性能進(jìn)行測(cè)量,并選擇基于模型性能的最佳特征子集。

下面是一個(gè)使用遞歸特征消除(RFE)和支持向量機(jī)(SVM)分類器在 scikit-learn 中實(shí)現(xiàn)包裝方法的示例:

from sklearn.svm import SVC
from sklearn.feature_selection import RFE
from sklearn.datasets import load_iris


# load the iris dataset
data = load_iris()
X = data.data
y = data.target


# create an SVM classifier
svm = SVC(kernel='linear')


# create a feature selector using RFE with SVM
selector = RFE(svm, n_features_to_select=2)


# fit the selector to the data
selector.fit(X, y)


# print the selected features
print(selector.support_)
print(selector.ranking_)

在這個(gè)例子中,我們首先加載鳶尾花數(shù)據(jù)集,并將其分為特征(X)和目標(biāo)(y)。然后我們使用線性核創(chuàng)建一個(gè) SVM 分類器。然后,我們使用 RFE 和 SVM 創(chuàng)建一個(gè)特征選擇器,并將其擬合到數(shù)據(jù)。最后,我們使用選擇器的 support_ 和 ranking_ 屬性打印所選特征。

** 前向選擇:** 前向選擇是一種包裝方法,它涉及迭代地將一個(gè)特征添加到模型中,直到模型的性能停止提高。以下是它在 Python 中的工作方式:

from sklearn.feature_selection import SequentialFeatureSelector
from sklearn.linear_model import LinearRegression


# Load the dataset
X, y = load_dataset()


# Initialize the feature selector
selector = SequentialFeatureSelector(LinearRegression(), n_features_to_select=5, direction='forward')


# Fit the feature selector
selector.fit(X, y)


# Print the selected features
print(selector.support_)

在上面的代碼中,我們首先加載數(shù)據(jù)集,然后使用線性回歸模型和一個(gè)指定要選擇的特征數(shù)量的參數(shù) n_features_to_select 來初始化 SequentialFeatureSelector 對(duì)象。然后,我們?cè)跀?shù)據(jù)集上擬合選擇器并打印所選特征。

后向消除: 后向消除是一種包裝方法,它涉及迭代地將一個(gè)特征從模型中逐步刪除,直到模型的性能停止提高。以下是它在 Python 中的工作方式:

from sklearn.feature_selection import SequentialFeatureSelector
from sklearn.linear_model import LinearRegression


# Load the dataset
X, y = load_dataset()


# Initialize the feature selector
selector = SequentialFeatureSelector(LinearRegression(), n_features_to_select=5, direction='backward')


# Fit the feature selector
selector.fit(X, y)


# Print the selected features
print(selector.support_)

在上面的代碼中,我們使用線性回歸模型和一個(gè)參數(shù) direction='backward' 來初始化 SequentialFeatureSelector 對(duì)象,以執(zhí)行后向消除。然后,我們?cè)跀?shù)據(jù)集上擬合選擇器并打印所選特征。

窮盡搜索: 窮盡搜索是一種過濾方法,它涉及評(píng)估所有可能的特征子集,并根據(jù)評(píng)分標(biāo)準(zhǔn)選擇最佳的特征子集。以下是它在 Python 中的工作方式:

from itertools import combinations
from sklearn.metrics import r2_score
from sklearn.linear_model import LinearRegression


# Load the dataset
X, y = load_dataset()


# Initialize variables
best_score = -float('inf')
best_features = None


# Loop over all possible subsets of features
for k in range(1, len(X.columns) + 1):
    for subset in combinations(X.columns, k):
        # Train a linear regression model
        X_subset = X[list(subset)]
        model = LinearRegression().fit(X_subset, y)
        # Compute the R2 score
        score = r2_score(y, model.predict(X_subset))
        # Update the best subset of features
        if score > best_score:
            best_score = score
            best_features = subset


# Print the best subset of features
print(best_features)

在上面的代碼中,我們首先加載數(shù)據(jù)集,然后使用 itertools.combinations 函數(shù)循環(huán)遍歷所有可能的特征子集。對(duì)于每個(gè)子集,我們訓(xùn)練一個(gè)線性回歸模型并計(jì)算 R2 分?jǐn)?shù)。然后,根據(jù)最高的 R2 分?jǐn)?shù)更新最佳特征子集,并打印所選特征。

** 7.嵌入方法** :這些方法涉及在模型訓(xùn)練過程中選擇特征。例如,Lasso 回歸和 Ridge 回歸會(huì)向損失函數(shù)添加懲罰項(xiàng)以鼓勵(lì)稀疏特征選擇。

Lasso 回歸 Lasso 回歸也會(huì)向損失函數(shù)添加懲罰項(xiàng),但它使用的是模型系數(shù)的絕對(duì)值而不是平方。這導(dǎo)致了一種更加激進(jìn)的特征選擇過程,因?yàn)橐恍┫禂?shù)可以被設(shè)置為精確的零。Lasso 回歸在處理高維數(shù)據(jù)時(shí)特別有用,因?yàn)樗梢杂行У販p少模型使用的特征數(shù)量。

from sklearn.linear_model import Lasso
from sklearn.datasets import load_boston
from sklearn.preprocessing import StandardScaler


data = load_boston()
X = data.data
y = data.target


# Standardize the features
scaler = StandardScaler()
X = scaler.fit_transform(X)


# Fit the Lasso model
lasso = Lasso(alpha=0.1)
lasso.fit(X, y)


# Get the coefficients
coefficients = lasso.coef_

Ridge 回歸:Ridge 回歸向損失函數(shù)添加懲罰項(xiàng),這鼓勵(lì)模型選擇一組更重要的特征來預(yù)測(cè)目標(biāo)變量。懲罰項(xiàng)與模型系數(shù)的大小的平方成正比,因此它傾向于將系數(shù)縮小到零,而不是將它們精確地設(shè)置為零。

from sklearn.linear_model import Ridge
from sklearn.datasets import load_boston
from sklearn.preprocessing import StandardScaler


data = load_boston()
X = data.data
y = data.target


# Standardize the features
scaler = StandardScaler()
X = scaler.fit_transform(X)


# Fit the Ridge model
ridge = Ridge(alpha=0.1)
ridge.fit(X, y)


# Get the coefficients
coefficients = ridge.coef_

在這兩種情況下,正則化參數(shù) alpha 控制懲罰項(xiàng)的強(qiáng)度。alpha 值越高,特征選擇越稀疏。

編碼分類變量

編碼分類變量是特征工程中的一個(gè)關(guān)鍵步驟,它涉及將分類變量轉(zhuǎn)換為機(jī)器學(xué)習(xí)算法可以理解的數(shù)字形式。以下是用于編碼分類變量的一些常見技術(shù):

1.獨(dú)熱編碼:

獨(dú)熱編碼是一種將分類變量轉(zhuǎn)換為一組二進(jìn)制特征的技術(shù),其中每個(gè)特征對(duì)應(yīng)于原始變量中的一個(gè)唯一類別。在這種技術(shù)中,為每個(gè)類別創(chuàng)建一個(gè)新的二進(jìn)制列,如果存在該類別,則將值設(shè)置為1,否則設(shè)置為0。

以下是使用 pandas 庫的示例:

import pandas as pd


# create a sample dataframe
df = pd.DataFrame({
   'color': ['red', 'blue', 'green', 'red', 'yellow', 'blue']
})


# apply one-hot encoding
one_hot_encoded = pd.get_dummies(df['color'])
print(one_hot_encoded)

2.標(biāo)簽編碼:

標(biāo)簽編碼是一種將原始變量中的每個(gè)類別分配一個(gè)唯一數(shù)字值的技術(shù)。在這種技術(shù)中,每個(gè)類別被賦予一個(gè)數(shù)字標(biāo)簽,其中標(biāo)簽的分配基于變量中類別的順序。

以下是使用 scikit-learn 庫的示例:

from sklearn.preprocessing import LabelEncoder


# create a sample dataframe
df = pd.DataFrame({
   'color': ['red', 'blue', 'green', 'red', 'yellow', 'blue']
})


# apply label encoding
label_encoder = LabelEncoder()
df['color_encoded'] = label_encoder.fit_transform(df['color'])
print(df)

圖片

Fig.3 — Encoding Data

3.序數(shù)編碼:

序數(shù)編碼是一種根據(jù)類別的順序或排名為原始變量中的每個(gè)類別分配一個(gè)數(shù)字值的技術(shù)。在這種技術(shù)中,類別根據(jù)特定標(biāo)準(zhǔn)排序,然后根據(jù)它們?cè)谂判蛑械奈恢梅峙鋽?shù)字值。

以下是使用 category_encoders 庫的示例:

import category_encoders as ce


# create a sample dataframe
df = pd.DataFrame({
   'size': ['S', 'M', 'L', 'XL', 'M', 'S']
})


# apply ordinal encoding
ordinal_encoder = ce.OrdinalEncoder(cols=['size'], order=['S', 'M', 'L', 'XL'])
df = ordinal_encoder.fit_transform(df)
print(df)
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編碼
    +關(guān)注

    關(guān)注

    6

    文章

    942

    瀏覽量

    54831
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8418

    瀏覽量

    132646
  • 預(yù)處理
    +關(guān)注

    關(guān)注

    0

    文章

    33

    瀏覽量

    10485
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    機(jī)器學(xué)習(xí)算法特征工程與意義詳解

    1、特征工程與意義 特征就是從數(shù)據(jù)中抽取出來的對(duì)結(jié)果預(yù)測(cè)有用的信息。 特征工程是使用專業(yè)知識(shí)背景
    發(fā)表于 10-08 15:24 ?2912次閱讀
    <b class='flag-5'>機(jī)器</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>算法</b>的<b class='flag-5'>特征</b><b class='flag-5'>工程</b>與意義詳解

    機(jī)器算法學(xué)習(xí)比較

    轉(zhuǎn)本文主要回顧下幾個(gè)常用算法的適應(yīng)場(chǎng)景及其優(yōu)缺點(diǎn)!機(jī)器學(xué)習(xí)算法太多了,分類、回歸、聚類、推薦、圖像識(shí)別領(lǐng)域等等,要想找到一個(gè)合適算法真的不容
    發(fā)表于 09-27 10:48

    貪心算法學(xué)習(xí)

    算法學(xué)習(xí)之路——貪心
    發(fā)表于 09-04 07:17

    模擬退火的算法學(xué)習(xí)

    模擬退火算法學(xué)習(xí)
    發(fā)表于 06-16 11:02

    有感FOC算法學(xué)習(xí)與實(shí)現(xiàn)總結(jié)

    原文:https://blog.csdn.net/u010632165/article/details/103656254文章目錄基于STM32的有感FOC算法學(xué)習(xí)與實(shí)現(xiàn)總結(jié)1 前言2 FOC算法
    發(fā)表于 07-05 06:45

    機(jī)器學(xué)習(xí)特征工程的五個(gè)方面優(yōu)點(diǎn)

    特征工程是用數(shù)學(xué)轉(zhuǎn)換的方法將原始輸入數(shù)據(jù)轉(zhuǎn)換為用于機(jī)器學(xué)習(xí)模型的新特征。特征
    的頭像 發(fā)表于 03-15 16:57 ?3970次閱讀

    SVPWM的原理與算法學(xué)習(xí)課件免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是SVPWM的原理與算法學(xué)習(xí)課件免費(fèi)下載包括了:SVPWM原理,SVPWM算法,SVPWM的Matlab仿真,SVPWM的DSP實(shí)現(xiàn)。
    發(fā)表于 03-08 08:00 ?23次下載
    SVPWM的原理與<b class='flag-5'>算法學(xué)習(xí)</b>課件免費(fèi)下載

    機(jī)器學(xué)習(xí)算法學(xué)習(xí)特征工程2

    特征工程機(jī)器學(xué)習(xí)過程中的關(guān)鍵步驟,涉及將原始數(shù)據(jù)轉(zhuǎn)換為機(jī)器學(xué)習(xí)
    的頭像 發(fā)表于 04-19 11:38 ?846次閱讀
    <b class='flag-5'>機(jī)器</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>算法學(xué)習(xí)</b><b class='flag-5'>之</b><b class='flag-5'>特征</b><b class='flag-5'>工程</b>2

    機(jī)器學(xué)習(xí)算法學(xué)習(xí)特征工程3

    特征工程機(jī)器學(xué)習(xí)過程中的關(guān)鍵步驟,涉及將原始數(shù)據(jù)轉(zhuǎn)換為機(jī)器學(xué)習(xí)
    的頭像 發(fā)表于 04-19 11:38 ?1023次閱讀
    <b class='flag-5'>機(jī)器</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>算法學(xué)習(xí)</b><b class='flag-5'>之</b><b class='flag-5'>特征</b><b class='flag-5'>工程</b>3

    機(jī)器學(xué)習(xí)的經(jīng)典算法與應(yīng)用

    ? 一、機(jī)器學(xué)習(xí)基礎(chǔ)概念 ? 關(guān)于數(shù)據(jù) ? 機(jī)器學(xué)習(xí)就是喂入算法和數(shù)據(jù),讓算法從數(shù)據(jù)中尋找一種相
    的頭像 發(fā)表于 05-28 11:29 ?1278次閱讀
    <b class='flag-5'>機(jī)器</b><b class='flag-5'>學(xué)習(xí)</b>的經(jīng)典<b class='flag-5'>算法</b>與應(yīng)用

    機(jī)器學(xué)習(xí)算法匯總 機(jī)器學(xué)習(xí)算法分類 機(jī)器學(xué)習(xí)算法模型

    機(jī)器學(xué)習(xí)算法匯總 機(jī)器學(xué)習(xí)算法分類 機(jī)器
    的頭像 發(fā)表于 08-17 16:11 ?1111次閱讀

    機(jī)器學(xué)習(xí)算法總結(jié) 機(jī)器學(xué)習(xí)算法是什么 機(jī)器學(xué)習(xí)算法優(yōu)缺點(diǎn)

    對(duì)數(shù)據(jù)的學(xué)習(xí)和分析,機(jī)器學(xué)習(xí)能夠自動(dòng)發(fā)現(xiàn)數(shù)據(jù)中的規(guī)律和模式,進(jìn)而預(yù)測(cè)未來的趨勢(shì)。 機(jī)器學(xué)習(xí)算法優(yōu)
    的頭像 發(fā)表于 08-17 16:11 ?1920次閱讀

    機(jī)器學(xué)習(xí)算法入門 機(jī)器學(xué)習(xí)算法介紹 機(jī)器學(xué)習(xí)算法對(duì)比

    機(jī)器學(xué)習(xí)算法入門 機(jī)器學(xué)習(xí)算法介紹 機(jī)器
    的頭像 發(fā)表于 08-17 16:27 ?956次閱讀

    機(jī)器學(xué)習(xí)有哪些算法?機(jī)器學(xué)習(xí)分類算法有哪些?機(jī)器學(xué)習(xí)預(yù)判有哪些算法?

    許多不同的類型和應(yīng)用。根據(jù)機(jī)器學(xué)習(xí)的任務(wù)類型,可以將其分為幾種不同的算法類型。本文將介紹機(jī)器學(xué)習(xí)算法
    的頭像 發(fā)表于 08-17 16:30 ?1997次閱讀

    機(jī)器學(xué)習(xí)中的數(shù)據(jù)預(yù)處理與特征工程

    機(jī)器學(xué)習(xí)的整個(gè)流程中,數(shù)據(jù)預(yù)處理與特征工程是兩個(gè)至關(guān)重要的步驟。它們直接決定了模型的輸入質(zhì)量,進(jìn)而影響模型的訓(xùn)練效果和泛化能力。本文將從數(shù)據(jù)預(yù)處理和
    的頭像 發(fā)表于 07-09 15:57 ?420次閱讀