使用python+sklearn實現單變量特徵選擇

2021-02-20 機器學習算法與知識圖譜

本文描述了一個單變量特徵選擇的示例。

本文我們將噪聲(無信息)特徵會添加到鳶尾花(iris)數據中,並應用單變量特徵選擇。對於每個特徵,我們繪製單變量特徵選擇的p值以及SVM的相應權重。我們可以看到單變量特徵選擇會選擇有信息的特徵,並且這些特徵具有較大的SVM權重。

在全部特徵中,只有前四個是有意義的。我們可以看到它們在單變量特徵選擇時得分最高。SVM會為這些特徵分配較大的權重,但會選擇許多其它無信息的特徵。在SVM之前應用單變量特徵選擇會增加重要特徵的SVM權重,從而改善分類結果。

sphx_glr_plot_feature_selection_001

輸出:

Classification accuracy without selecting features: 0.789
Classification accuracy after univariate feature selection: 0.868

print(__doc__)

import numpy as np
import matplotlib.pyplot as plt

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.svm import LinearSVC
from sklearn.pipeline import make_pipeline
from sklearn.feature_selection import SelectKBest, f_classif

# #############################################################################
# 導入一些數據進行訓練

# 鳶尾花植物數據集
X, y = load_iris(return_X_y=True)

# 一些不相關的噪聲數據
E = np.random.RandomState(42).uniform(0, 0.1, size=(X.shape[0], 20))

# 將噪聲數據添加到有信息的特徵中
X = np.hstack((X, E))

# 分割數據集以選擇特徵並評估分類器
X_train, X_test, y_train, y_test = train_test_split(
        X, y, stratify=y, random_state=0
)

plt.figure(1)
plt.clf()

X_indices = np.arange(X.shape[-1])

# #############################################################################
# 通過F檢驗進行單變量特徵選擇以進行特徵評分
# 我們使用默認選擇函數來選擇四個最重要的特徵
selector = SelectKBest(f_classif, k=4)
selector.fit(X_train, y_train)
scores = -np.log10(selector.pvalues_)
scores /= scores.max()
plt.bar(X_indices - .45, scores, width=.2,
        label=r'Univariate score ($-Log(p_{value})$)', color='darkorange',
        edgecolor='black')

# #############################################################################
# 與SVM的權重進行比較
clf = make_pipeline(MinMaxScaler(), LinearSVC())
clf.fit(X_train, y_train)
print('Classification accuracy without selecting features: {:.3f}'
      .format(clf.score(X_test, y_test)))

svm_weights = np.abs(clf[-1].coef_).sum(axis=0)
svm_weights /= svm_weights.sum()

plt.bar(X_indices - .25, svm_weights, width=.2, label='SVM weight',
        color='navy', edgecolor='black')

clf_selected = make_pipeline(
        SelectKBest(f_classif, k=4), MinMaxScaler(), LinearSVC()
)
clf_selected.fit(X_train, y_train)
print('Classification accuracy after univariate feature selection: {:.3f}'
      .format(clf_selected.score(X_test, y_test)))

svm_weights_selected = np.abs(clf_selected[-1].coef_).sum(axis=0)
svm_weights_selected /= svm_weights_selected.sum()

plt.bar(X_indices[selector.get_support()] - .05, svm_weights_selected,
        width=.2, label='SVM weights after selection', color='c',
        edgecolor='black')


plt.title("Comparing feature selection")
plt.xlabel('Feature number')
plt.yticks(())
plt.axis('tight')
plt.legend(loc='upper right')
plt.show()

腳本的總運行時間:(0分鐘0.441秒)

估計的內存使用量: 8 MB

下載Python原始碼:plot_feature_selection.py

下載Jupyter notebook原始碼:plot_feature_selection.ipynb

由Sphinx-Gallery生成的畫廊

☆☆☆為方便大家查閱,小編已將scikit-learn學習路線專欄文章統一整理到公眾號底部菜單欄,同步更新中,關注公眾號,點擊左下方「系列文章」,如圖:

歡迎大家和我一起沿著scikit-learn文檔這條路線,一起鞏固機器學習算法基礎。(添加微信:mthler,備註:sklearn學習,一起進【sklearn機器學習進步群】開啟打怪升級的學習之旅。)

相關焦點

  • 特徵工程總結:R與python的比較實現
    特徵選擇的主要方法和python與R的比較實現目錄1.特徵工程概述2.特徵工程知識框架3.特徵工程的一般步驟4.特徵選擇的python與R實現比較4.1 導入數據4.2 數據預處理4.2.1 標準化4.2.2 區間放縮法  4.2.3 歸一化  4.2.4 對定量特徵二值化
  • 機器學習--特徵選擇(Python實現)
    1.過濾式filter:通過方差選擇法、相關係數法、卡方檢驗法、互信息法來對特徵進行評分,設定閾值或者待選擇的閾值的個數來選擇;1.1方差選擇法   計算各個特徵的方差,剔除小於設定的閾值的特徵,剔除特徵值 波動較小的特徵,例如一個特徵的所有值都為1,那這個特徵對於預測目標變量就沒什麼作用;方法很簡單,但實際應用中只有少數變量才會存在只取某個值的情況,對特徵選擇作用比較小
  • 使用python+sklearn實現Lasso 模型選擇:交叉驗證/ AIC / BIC
    使用Akaike信息標準(AIC),貝葉斯信息標準(BIC)和交叉驗證來選擇Lasso
  • 機器學習之特徵工程Feature-Engineering及sklearn代碼實現
    那麼做好特徵工程,就非常有利於我們得到一個「更好的」模型;在機器學習的整個過程中特徵工程佔用了70~80%的時間,其完成質量也直接影響模型最終的輸出結果。就特徵工程的流程、類型、工具、數據預處理、特徵選擇、降維在學習之餘,做簡單的總結和介紹、附可執行的python代碼。
  • 獨家 | 使用Python實現機器學習特徵選擇的4種方法(附代碼)
    本文中,我們將研究從數據集中選擇特徵的不同方法;同時通過使用Python中Scikit-learn (sklearn)庫實現討論了特徵選擇算法的類型。註:本文節選自Ankit Dixit所著的《集成機器學習》(Ensemble Machine Learning)一書。這本書組合強大的機器學習算法來建立優化模型,可以作為初學者的指南。
  • 推薦 :使用Python實現機器學習特徵選擇的4種方法(附代碼)
    本文中,我們將研究從數據集中選擇特徵的不同方法;同時通過使用Python中Scikit-learn (sklearn)庫實現討論了特徵選擇算法的類型。註:本文節選自Ankit Dixit所著的《集成機器學習》(Ensemble Machine Learning)一書。這本書組合強大的機器學習算法來建立優化模型,可以作為初學者的指南。
  • 使用python+sklearn實現度量和評分
    scoring=ftwo_scorer, cv=5)第二個用法是使用make_scorer,從一個簡單的python函數構建一個完全自定義的評分對象,該函數可以接收多個參數:您想使用的python函數(下面的示例中的my_custom_loss_func )您的python函數返回分數(greater_is_better=True默認值)還是損失(loss)(greater_is_better
  • 使用python+sklearn實現估計器的調參方法
    GridSearchCV 實例實現估計器API:當將其「擬合」到一個數據集上時,所有可能的參數值組合都將被計算並保留最佳組合。關於數字數據集上的網格搜索計算示例,請參見使用交叉驗證網格搜索的參數估計。有關使用pipeline.Pipeline實例的帶分類器(這裡是一個使用彈性網(elastic net)和L2懲罰項的SGD訓練的線性支持向量機)的文本文檔特徵提取器(n-gram計數矢量器(count vectorizer)和TF-IDF轉換器)的網格搜索耦合參數示例,請參見文本特徵提取和評估的示例管道。有關在iris數據集上交叉驗證循環內網格搜索的示例,請參嵌套交叉驗證與非嵌套交叉驗證。
  • 使用python+sklearn實現多任務Lasso的聯合特徵選擇
    多任務Lasso允許同時解決多個回歸問題,從而使所選特徵在各個任務之間保持相同。
  • 專欄 | 基於 Jupyter 的特徵工程手冊:特徵選擇(四)
    但實際上,部分新生成的變量可能是多餘:一方面它們本身不一定包含有用的信息,故無法提高模型性能;另一方面過這些多餘變量在構建模型時會消耗大量內存和計算能力。因此,我們應該進行特徵選擇並選擇特徵子集進行建模。
  • 使用python+sklearn實現在20newgroups上進行多類稀疏邏輯回歸
    在這裡,我們使用 l1 稀疏(l1 sparsity)將無信息特徵的權重調整為零。如果目標是提取每個班級的強判別詞彙,那麼這是一個很好的方法。如果目標是獲得最佳的預測準確性,則最好改用非稀疏誘導l2懲罰(non sparsity-inducing l2 penalty)。
  • 特徵工程系列:特徵篩選的原理與實現(上)
    python實現,大家在做特徵工程的時候,可以有所借鑑。0x03 特徵選擇實現方法一:去掉取值變化小的特徵(Removing features with low variance)該方法一般用在特徵選擇前作為一個預處理的工作,即先去掉取值變化小的特徵,然後再使用其他特徵選擇方法選擇特徵
  • 使用sklearn輕鬆實現數據縮放
    數據準備的過程主要包括3個步驟:本文會告訴你兩種方法,即如何使用Python的Scikit-Learn庫進行簡單的數據轉換。from sklearn.datasets import load_irisfrom sklearn import preprocessing# 加載數據iris = load_iris()print(iris.data.shape)# 分離原始數據集,分為自變量和因變量X = iris.datay = iris.target#
  • 帶你了解sklearn中特徵工程的幾個使用方法
    特徵工程數據和特徵決定了機器學習的上限,而模型和算法只是逼近這個上 限而已。根據特徵使用方案,有計劃地獲取、處理和監控數據和特徵的工作稱之為特徵工程,目的是 最大限度地從原始數據中提取特徵以供算法和模型使用。
  • 基於 Python 語言的機器學習工具Sklearn
    sklearn建立在NumPy和matplotlib庫的基礎上。利用這幾大模塊的優勢,可以大大提高機器學習的效率。sklearn擁有著完善的文檔,上手容易,具有著豐富的API,在學術界頗受歡迎。sklearn已經封裝了大量的機器學習算法,可以簡單高效的數據挖掘和數據分析。sklearn可供大家使用,可在各種環境中重複使用。sklearn開放源碼,可商業使用 - BSD license。
  • 使用python+sklearn實現交叉驗證
    可以使用scoring參數更改此設置:>>> from sklearn import metrics>>> scores = cross_val_score(...正如在測試集上測試預測器(predictor)很重要一樣,預處理(如標準化、特徵選擇等)和數據轉換也應該從訓練集中學習,並應用到測試集中以進行預測:>>> from sklearn import preprocessing>>> X_train, X_test, y_train, y_test = train_test_split
  • 技術乾貨 | Sklearn機器學習基礎
    Pandas(numpy)安裝l mac&windows:使用 python 3+:pip3 install pandas(numpy)使用 python 2+:pip install pandas(numpy)如果遇到管理員權限問題, 請在 pip 前加上 sudo.
  • Python之特徵選擇實戰
    通過總結和歸納,人們認為特徵工程包括以下方面:  特徵處理是特徵工程的核心部分,sklearn提供了較為完整的特徵處理方法,包括數據預處理,特徵選擇,降維等。首次接觸到sklearn,通常會被其豐富且方便的算法模型庫吸引,但是這裡介紹的特徵處理庫也十分強大!  本文中使用sklearn中的IRIS(鳶尾花)數據集來對特徵處理功能進行說明。
  • 手把手教你用Python實現針對時間序列預測的特徵選擇
    要將機器學習算法應用於時間序列數據,需要特徵工程的幫助。例如,單變量的時間序列數據集由一系列觀察結果組成,它們必須被轉換成輸入和輸出特徵,才能用於監督性學習算法。但這裡有一個問題:針對每個時間序列問題,你可以處理的特徵類型和數量,卻並沒有明確的限制。
  • 專欄 | 基於 Jupyter 的特徵工程手冊:特徵選擇(一)
    1.1.1 Univariate Filter Methods 單變量特徵過濾單變量過濾方法依據單變量統計量或統計檢驗選擇最佳特徵。其僅僅考慮單個變量與目標變量的關係(方差選擇法僅基於單個變量)。1.1.1.1 Variance Threshold 方差選擇法方差選擇法刪除變量方差低於某個閾值的所有特徵。例如,我們應刪除方差為零的特徵(所有觀測點中具有相同值的特徵),因為該特徵無法解釋目標變量的任何變化。