那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

機器學習算法學習之特征工程1

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

特征工程是將原始數據轉換為有意義的特征,以供機器學習算法使用并進行準確預測的過程。它涉及選擇、提取和轉換特征,以增強模型的性能。良好的特征工程可以極大地提高模型的準確性,而糟糕的特征工程則可能導致性能不佳。

Fig.1 — Feature Engineering

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

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

目錄

1.特征選擇和提取

2.編碼分類變量

3.縮放和歸一化

4.創建新特征

5.處理不平衡數據

6.處理偏斜和峰度

7.處理稀有類別

8.處理時間序列數據

9.文本預處理

特征選擇和提取

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

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

讓我們看看如何使用 scikit-learn 對數據集執行 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_)

在這里,我們創建一個 PCA 對象并指定要提取的主成分數量。然后,我們擬合和轉換數據以獲得新的特征集。最后,我們計算解釋的方差比率以確定每個主成分捕獲了多少數據中的方差。

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

讓我們看看如何使用 scikit-learn 在數據集上執行 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)

在這里,我們創建一個 LDA 對象并指定要提取的主成分數量。然后,我們擬合和轉換數據以獲得新的特征集。

3.相關分析 :相關分析用于識別數據集中特征之間的相關性。高度相關的特征可以從數據集中刪除,因為它們提供了冗余信息

讓我們看看如何使用 pandas 在數據集上執行相關分析:

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 計算相關矩陣并選擇高度相關的特征。然后,我們使用 drop 方法從數據集中刪除高度相關的特征。

圖片

Fig.2 — Feature Selection Measures

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

以下是使用 RFE 進行特征選擇的示例:

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.基于樹的方法** :決策樹和隨機森林是用于這個目的的流行的基于樹的方法。在這些方法中,基于最重要的特征來預測目標變量創建了一個樹結構。每個特征的重要性是通過基于該特征拆分數據導致的不純度減少來計算的。

在決策樹中,選擇信息增益最高的特征作為根節點,并基于該特征拆分數據。這個過程遞歸重復,直到滿足停止標準,例如最大樹深度或每個葉子節點的最小樣本數。

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

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)

基于樹的方法也可以用于特征提取。在這種情況下,我們可以基于樹的決策邊界提取新的特征。例如,我們可以使用決策樹的葉節點作為新的二元特征,指示數據點是否落在特征空間的該區域內。

** 6.包裝方法** :這是一種特征選擇方法,其中模型在不同的特征子集上進行訓練和評估。對于每個特征子集,模型的性能進行測量,并選擇基于模型性能的最佳特征子集。

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

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_)

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

** 前向選擇:** 前向選擇是一種包裝方法,它涉及迭代地將一個特征添加到模型中,直到模型的性能停止提高。以下是它在 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_)

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

后向消除: 后向消除是一種包裝方法,它涉及迭代地將一個特征從模型中逐步刪除,直到模型的性能停止提高。以下是它在 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_)

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

窮盡搜索: 窮盡搜索是一種過濾方法,它涉及評估所有可能的特征子集,并根據評分標準選擇最佳的特征子集。以下是它在 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)

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

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

Lasso 回歸 Lasso 回歸也會向損失函數添加懲罰項,但它使用的是模型系數的絕對值而不是平方。這導致了一種更加激進的特征選擇過程,因為一些系數可以被設置為精確的零。Lasso 回歸在處理高維數據時特別有用,因為它可以有效地減少模型使用的特征數量。

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 回歸向損失函數添加懲罰項,這鼓勵模型選擇一組更重要的特征來預測目標變量。懲罰項與模型系數的大小的平方成正比,因此它傾向于將系數縮小到零,而不是將它們精確地設置為零。

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_

在這兩種情況下,正則化參數 alpha 控制懲罰項的強度。alpha 值越高,特征選擇越稀疏。

編碼分類變量

編碼分類變量是特征工程中的一個關鍵步驟,它涉及將分類變量轉換為機器學習算法可以理解的數字形式。以下是用于編碼分類變量的一些常見技術:

1.獨熱編碼:

獨熱編碼是一種將分類變量轉換為一組二進制特征的技術,其中每個特征對應于原始變量中的一個唯一類別。在這種技術中,為每個類別創建一個新的二進制列,如果存在該類別,則將值設置為1,否則設置為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.標簽編碼:

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

以下是使用 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.序數編碼:

序數編碼是一種根據類別的順序或排名為原始變量中的每個類別分配一個數字值的技術。在這種技術中,類別根據特定標準排序,然后根據它們在排序中的位置分配數字值。

以下是使用 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)
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 編碼
    +關注

    關注

    6

    文章

    957

    瀏覽量

    54950
  • 機器學習
    +關注

    關注

    66

    文章

    8438

    瀏覽量

    133080
  • 預處理
    +關注

    關注

    0

    文章

    33

    瀏覽量

    10514
收藏 人收藏

    評論

    相關推薦

    機器學習算法特征工程與意義詳解

    1特征工程與意義 特征就是從數據中抽取出來的對結果預測有用的信息。 特征工程是使用專業知識背景
    發表于 10-08 15:24 ?2961次閱讀
    <b class='flag-5'>機器</b><b class='flag-5'>學習</b><b class='flag-5'>算法</b>的<b class='flag-5'>特征</b><b class='flag-5'>工程</b>與意義詳解

    機器算法學習比較

    轉本文主要回顧下幾個常用算法的適應場景及其優缺點!機器學習算法太多了,分類、回歸、聚類、推薦、圖像識別領域等等,要想找到一個合適算法真的不容
    發表于 09-27 10:48

    貪心算法學習

    算法學習之路——貪心
    發表于 09-04 07:17

    模擬退火的算法學習

    模擬退火算法學習
    發表于 06-16 11:02

    有感FOC算法學習與實現總結

    原文:https://blog.csdn.net/u010632165/article/details/103656254文章目錄基于STM32的有感FOC算法學習與實現總結1 前言2 FOC算法
    發表于 07-05 06:45

    機器學習特征工程的五個方面優點

    特征工程是用數學轉換的方法將原始輸入數據轉換為用于機器學習模型的新特征特征
    的頭像 發表于 03-15 16:57 ?4007次閱讀

    SVPWM的原理與算法學習課件免費下載

    本文檔的主要內容詳細介紹的是SVPWM的原理與算法學習課件免費下載包括了:SVPWM原理,SVPWM算法,SVPWM的Matlab仿真,SVPWM的DSP實現。
    發表于 03-08 08:00 ?23次下載
    SVPWM的原理與<b class='flag-5'>算法學習</b>課件免費下載

    機器學習算法學習特征工程2

    特征工程機器學習過程中的關鍵步驟,涉及將原始數據轉換為機器學習
    的頭像 發表于 04-19 11:38 ?883次閱讀
    <b class='flag-5'>機器</b><b class='flag-5'>學習</b><b class='flag-5'>算法學習</b><b class='flag-5'>之</b><b class='flag-5'>特征</b><b class='flag-5'>工程</b>2

    機器學習算法學習特征工程3

    特征工程機器學習過程中的關鍵步驟,涉及將原始數據轉換為機器學習
    的頭像 發表于 04-19 11:38 ?1064次閱讀
    <b class='flag-5'>機器</b><b class='flag-5'>學習</b><b class='flag-5'>算法學習</b><b class='flag-5'>之</b><b class='flag-5'>特征</b><b class='flag-5'>工程</b>3

    機器學習的經典算法與應用

    ? 一、機器學習基礎概念 ? 關于數據 ? 機器學習就是喂入算法和數據,讓算法從數據中尋找一種相
    的頭像 發表于 05-28 11:29 ?1351次閱讀
    <b class='flag-5'>機器</b><b class='flag-5'>學習</b>的經典<b class='flag-5'>算法</b>與應用

    機器學習算法匯總 機器學習算法分類 機器學習算法模型

    機器學習算法匯總 機器學習算法分類 機器
    的頭像 發表于 08-17 16:11 ?1168次閱讀

    機器學習算法總結 機器學習算法是什么 機器學習算法優缺點

    對數據的學習和分析,機器學習能夠自動發現數據中的規律和模式,進而預測未來的趨勢。 機器學習算法
    的頭像 發表于 08-17 16:11 ?2048次閱讀

    機器學習算法入門 機器學習算法介紹 機器學習算法對比

    機器學習算法入門 機器學習算法介紹 機器
    的頭像 發表于 08-17 16:27 ?1004次閱讀

    機器學習有哪些算法機器學習分類算法有哪些?機器學習預判有哪些算法

    許多不同的類型和應用。根據機器學習的任務類型,可以將其分為幾種不同的算法類型。本文將介紹機器學習算法
    的頭像 發表于 08-17 16:30 ?2070次閱讀

    機器學習中的數據預處理與特征工程

    機器學習的整個流程中,數據預處理與特征工程是兩個至關重要的步驟。它們直接決定了模型的輸入質量,進而影響模型的訓練效果和泛化能力。本文將從數據預處理和
    的頭像 發表于 07-09 15:57 ?590次閱讀
    百家乐官网游戏开发技术| A8百家乐赌场娱乐网规则| 做生意门面朝向风水| 杨公24山分金兼向吉凶| 百家乐官网免费体验金| 百家乐游戏怎样玩| 百家乐博彩软件| 百家乐画面| 巨星百家乐的玩法技巧和规则 | 百家乐官网游戏机论坛| 香港百家乐官网玩| 中国百家乐官网软件| 百家乐官网筹码皇冠| 太阳城百家乐作弊| 24山天机申山寅向择日| 澳门百家乐博牌| 百家百家乐视频游戏世界| 大发888下载英皇国际| 必博备用网站| 百家乐官网怎样捉住长开| 法拉利百家乐官网的玩法技巧和规则 | 线上百家乐官网是如何作弊| 百家乐官网职业打| 百家乐赢谷输缩| 大发888娱乐城官方lm0| 娱乐城开户送彩金| 澳门百家乐官网赌技术| 永利百家乐官网赌场娱乐网规则| A8百家乐娱乐城| 威尼斯人娱乐城导航网| 皇冠网小说网站网址| 百家乐官网博彩优惠论坛| 风水97年农历6月24八字| 迪威百家乐娱乐网| 德州扑克发牌员| 澳门百家乐官网视频| 尊龙百家乐官网娱乐城| 网上百家乐作弊法| 六合彩最快开奖| 百家乐官网开庄几率| 百家乐推广|