
- 機器學習基礎
- ML - 首頁
- ML - 簡介
- ML - 入門
- ML - 基本概念
- ML - 生態系統
- ML - Python 庫
- ML - 應用
- ML - 生命週期
- ML - 必備技能
- ML - 實現
- ML - 挑戰與常見問題
- ML - 侷限性
- ML - 真實案例
- ML - 資料結構
- ML - 數學基礎
- ML - 人工智慧
- ML - 神經網路
- ML - 深度學習
- ML - 獲取資料集
- ML - 分類資料
- ML - 資料載入
- ML - 資料理解
- ML - 資料準備
- ML - 模型
- ML - 監督學習
- ML - 無監督學習
- ML - 半監督學習
- ML - 強化學習
- ML - 監督學習 vs. 無監督學習
- 機器學習資料視覺化
- ML - 資料視覺化
- ML - 直方圖
- ML - 密度圖
- ML - 箱線圖
- ML - 相關矩陣圖
- ML - 散點矩陣圖
- 機器學習統計學
- ML - 統計學
- ML - 均值、中位數、眾數
- ML - 標準差
- ML - 百分位數
- ML - 資料分佈
- ML - 偏度和峰度
- ML - 偏差和方差
- ML - 假設
- ML中的迴歸分析
- ML - 迴歸分析
- ML - 線性迴歸
- ML - 簡單線性迴歸
- ML - 多元線性迴歸
- ML - 多項式迴歸
- ML中的分類演算法
- ML - 分類演算法
- ML - 邏輯迴歸
- ML - K近鄰演算法 (KNN)
- ML - 樸素貝葉斯演算法
- ML - 決策樹演算法
- ML - 支援向量機
- ML - 隨機森林
- ML - 混淆矩陣
- ML - 隨機梯度下降
- ML中的聚類演算法
- ML - 聚類演算法
- ML - 基於質心的聚類
- ML - K均值聚類
- ML - K中心點聚類
- ML - 均值漂移聚類
- ML - 層次聚類
- ML - 基於密度的聚類
- ML - DBSCAN 聚類
- ML - OPTICS 聚類
- ML - HDBSCAN 聚類
- ML - BIRCH 聚類
- ML - 親和傳播
- ML - 基於分佈的聚類
- ML - 凝聚層次聚類
- ML中的降維
- ML - 降維
- ML - 特徵選擇
- ML - 特徵提取
- ML - 向後消除法
- ML - 前向特徵構造
- ML - 高相關性過濾器
- ML - 低方差過濾器
- ML - 缺失值比例
- ML - 主成分分析
- 強化學習
- ML - 強化學習演算法
- ML - 利用與探索
- ML - Q學習
- ML - REINFORCE 演算法
- ML - SARSA 強化學習
- ML - 演員-評論家方法
- 深度強化學習
- ML - 深度強化學習
- 量子機器學習
- ML - 量子機器學習
- ML - 使用 Python 的量子機器學習
- 機器學習雜項
- ML - 效能指標
- ML - 自動化工作流程
- ML - 提升模型效能
- ML - 梯度提升
- ML - 自舉匯聚 (Bagging)
- ML - 交叉驗證
- ML - AUC-ROC 曲線
- ML - 網格搜尋
- ML - 資料縮放
- ML - 訓練和測試
- ML - 關聯規則
- ML - Apriori 演算法
- ML - 高斯判別分析
- ML - 成本函式
- ML - 貝葉斯定理
- ML - 精度和召回率
- ML - 對抗性
- ML - 堆疊
- ML - 輪次
- ML - 感知器
- ML - 正則化
- ML - 過擬合
- ML - P值
- ML - 熵
- ML - MLOps
- ML - 資料洩露
- ML - 機器學習的貨幣化
- ML - 資料型別
- 機器學習 - 資源
- ML - 快速指南
- ML - 速查表
- ML - 面試題
- ML - 有用資源
- ML - 討論
機器學習 - 特徵選擇
特徵選擇是機器學習中一個重要的步驟,它涉及選擇可用特徵的一個子集來提高模型的效能。以下是常用的一些特徵選擇技術:
過濾方法
此方法透過計算統計量(例如,相關性、互資訊、卡方檢驗等)來評估每個特徵的相關性,並根據其分數對特徵進行排序。然後,將得分低的特徵從模型中移除。
要在 Python 中實現過濾方法,可以使用 `sklearn.feature_selection` 模組中的 `SelectKBest` 或 `SelectPercentile` 函式。下面是一個實現特徵選擇的簡短程式碼片段。
from sklearn.feature_selection import SelectPercentile, chi2 selector = SelectPercentile(chi2, percentile=10) X_new = selector.fit_transform(X, y)
包裝方法
此方法透過新增或刪除特徵來評估模型的效能,並選擇產生最佳效能的特徵子集。這種方法計算成本很高,但比過濾方法更準確。
要在 Python 中實現包裝方法,可以使用 `sklearn.feature_selection` 模組中的 `RFE`(遞迴特徵消除)函式。下面是一個實現包裝方法的簡短程式碼片段。
from sklearn.feature_selection import RFE from sklearn.linear_model import LogisticRegression estimator = LogisticRegression() selector = RFE(estimator, n_features_to_select=5) selector = selector.fit(X, y) X_new = selector.transform(X)
嵌入方法
此方法涉及將特徵選擇融入模型構建過程中本身。這可以使用諸如 Lasso 迴歸、Ridge 迴歸或決策樹之類的技術來完成。這些方法為每個特徵分配權重,權重低的特徵將從模型中移除。
要在 Python 中實現嵌入方法,可以使用 `sklearn.linear_model` 模組中的 Lasso 或 Ridge 迴歸函式。下面是一個實現嵌入方法的簡短程式碼片段:
from sklearn.linear_model import Lasso lasso = Lasso(alpha=0.1) lasso.fit(X, y) coef = pd.Series(lasso.coef_, index = X.columns) important_features = coef[coef != 0]
主成分分析 (PCA)
這是一種無監督學習方法,它涉及將原始特徵轉換為一組不相關的解釋資料中最大方差的主成分。可以根據閾值選擇主成分的數量,從而降低資料集的維數。
要在 Python 中實現 PCA,可以使用 `sklearn.decomposition` 模組中的 PCA 函式。例如,要減少特徵數量,可以使用以下程式碼所示的 PCA:
from sklearn.decomposition import PCA pca = PCA(n_components=3) X_new = pca.fit_transform(X)
遞迴特徵消除 (RFE)
此方法涉及遞迴地消除最不重要的特徵,直到識別出最重要的特徵子集。它使用基於模型的方法,計算成本可能很高,但在高維資料集中可以產生良好的結果。
要在 Python 中實現 RFE,可以使用 `sklearn.feature_selection` 模組中的 `RFECV`(帶交叉驗證的遞迴特徵消除)函式。例如,以下是一個可以使用遞迴特徵消除的簡短程式碼片段:
from sklearn.feature_selection import RFECV from sklearn.tree import DecisionTreeClassifier estimator = DecisionTreeClassifier() selector = RFECV(estimator, step=1, cv=5) selector = selector.fit(X, y) X_new = selector.transform(X)
這些特徵選擇技術可以單獨使用或組合使用以提高機器學習模型的效能。根據資料集的大小、特徵的性質和所使用的模型型別選擇合適的技術非常重要。
示例
在下面的示例中,我們將實現三種特徵選擇方法:使用卡方檢驗的單變數特徵選擇、帶交叉驗證的遞迴特徵消除 (RFECV) 和主成分分析 (PCA)。
我們將使用包含在 scikit-learn 中的乳腺癌威斯康星州(診斷)資料集。該資料集包含 569 個樣本和 30 個特徵,任務是根據這些特徵對腫瘤是惡性還是良性進行分類。
以下是將這些特徵選擇方法應用於乳腺癌威斯康星州(診斷)資料集的 Python 程式碼:
# Import necessary libraries and dataset import pandas as pd from sklearn.datasets import load_diabetes from sklearn.feature_selection import SelectKBest, chi2 from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression # Load the dataset diabetes = pd.read_csv(r'C:\Users\Leekha\Desktop\diabetes.csv') # Split the dataset into features and target variable X = diabetes.drop('Outcome', axis=1) y = diabetes['Outcome'] # Apply univariate feature selection using the chi-square test selector = SelectKBest(chi2, k=4) X_new = selector.fit_transform(X, y) # Split the data into training and testing sets X_train, X_test, y_train, y_test = train_test_split(X_new, y, test_size=0.3, random_state=42) # Fit a logistic regression model on the selected features clf = LogisticRegression() clf.fit(X_train, y_train) # Evaluate the model on the test set accuracy = clf.score(X_test, y_test) print("Accuracy using univariate feature selection: {:.2f}".format(accuracy)) # Recursive feature elimination with cross-validation (RFECV) estimator = LogisticRegression() selector = RFECV(estimator, step=1, cv=5) selector.fit(X, y) X_new = selector.transform(X) scores = cross_val_score(LogisticRegression(), X_new, y, cv=5) print("Accuracy using RFECV feature selection: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2)) # PCA implementation pca = PCA(n_components=5) X_new = pca.fit_transform(X) scores = cross_val_score(LogisticRegression(), X_new, y, cv=5) print("Accuracy using PCA feature selection: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2))
輸出
執行此程式碼時,它將在終端上產生以下輸出:
Accuracy using univariate feature selection: 0.74 Accuracy using RFECV feature selection: 0.77 (+/- 0.03) Accuracy using PCA feature selection: 0.75 (+/- 0.07)