色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

探討機器學習中特征選擇的4種方法

454398 ? 來源:數據派 ? 作者:Sugandha Lahoti ? 2020-12-10 15:56 ? 次閱讀

作者:Sugandha Lahoti,翻譯:李潔,轉自:數據派(ID:datapi

注:本文節選自Ankit Dixit所著的《集成機器學習》(Ensemble Machine Learning)一書。這本書組合強大的機器學習算法來建立優化模型,可以作為初學者的指南。

在本文中,我們將研究從數據集中選擇特征的不同方法;同時通過使用Python中Scikit-learn (sklearn)庫實現討論了特征選擇算法的類型:

  • 單變量選擇
  • 遞歸特征消除(RFE)
  • 主成分分析(PCA)
  • 選擇重要特征(特征重要度)

我們簡要介紹了前三種算法及其實現。然后我們將詳細討論在數據科學社區中廣泛使用的選擇重要特征(特性重要度)部分的內容。

單變量選擇

統計測試可用于選擇那些與輸出變量關系最強的特征。

scikit-learn庫提供了SelectKBest類,它可以與一組不同的統計測試一起使用,以選擇特定數量的特征。

下面的例子使用chi2非負性特征的統計測試,從皮馬印第安人糖尿病發病數據集中選擇了四個最好的特征:
#Feature Extraction with Univariate Statistical Tests (Chi-squared for classification)

#Import the required packages

#Import pandas to read csv import pandas

#Import numpy for array related operations import numpy

#Import sklearn's feature selection algorithm

from sklearn.feature_selection import SelectKBest

#Import chi2 for performing chi square test from sklearn.feature_selection import chi2

#URL for loading the dataset

url ="https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians diabetes/pima-indians-diabetes.data"

#Define the attribute names

names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']

#Create pandas data frame by loading the data from URL

dataframe = pandas.read_csv(url, names=names)

#Create array from data values

array = dataframe.values

#Split the data into input and target

X = array[:,0:8]

Y = array[:,8]

#We will select the features using chi square

test = SelectKBest(score_func=chi2, k=4)

#Fit the function for ranking the features by score

fit = test.fit(X, Y)

#Summarize scores numpy.set_printoptions(precision=3) print(fit.scores_)

#Apply the transformation on to dataset

features = fit.transform(X)

#Summarize selected features print(features[0:5,:])

你可以看到每個參數的得分,以及所選擇的四個參數(得分最高的):plas、test、mass和age。

每個特征的分數為:
[111.52 1411.887 17.605 53.108 2175.565 127.669 5.393

181.304]

被選出的特征是:
[[148. 0. 33.6 50. ]

[85. 0. 26.6 31. ]

[183. 0. 23.3 32. ]

[89. 94. 28.1 21. ]

[137. 168. 43.1 33. ]]

遞歸特征消除(RFE)

RFE的工作方式是遞歸地刪除參數并在保留的參數上構建模型。它使用模型精度來判斷哪些屬性(以及屬性的組合)對預測目標參數貢獻最大。你可以在scikit-learn的文檔中了解更多關于RFE類的信息

下面的示例使用RFE和logistic回歸算法來選出前三個特征。算法的選擇并不重要,只需要熟練并且一致:
#Import the required packages

#Import pandas to read csv import pandas

#Import numpy for array related operations import numpy

#Import sklearn's feature selection algorithm from sklearn.feature_selection import RFE

#Import LogisticRegression for performing chi square test from sklearn.linear_model import LogisticRegression

#URL for loading the dataset

url =

"https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-dia betes/pima-indians-diabetes.data"

#Define the attribute names

names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']

#Create pandas data frame by loading the data from URL

dataframe = pandas.read_csv(url, names=names)

#Create array from data values

array = dataframe.values

#Split the data into input and target

X = array[:,0:8]

Y = array[:,8]

#Feature extraction

model = LogisticRegression() rfe = RFE(model, 3)

fit = rfe.fit(X, Y)

print("Num Features: %d"% fit.n_features_) print("Selected Features: %s"% fit.support_) print("Feature Ranking: %s"% fit.ranking_)

執行完上述代碼后,我們可以得到:
Num Features: 3

Selected Features: [ True False False False False True True False]

Feature Ranking: [1 2 3 5 6 1 1 4]

你可以看到RFE選擇了前三個特性,即preg、mass和pedi。這些在support_數組中被標記為True,在ranking_數組中被標記為首選(標記為1)。

主成分分析

PCA使用線性代數將數據集轉換為壓縮格式。通常,它被認為是一種數據約簡技術。PCA的一個屬性是,你可以選擇轉換結果中的維數或主成分的數量。

在接下來的例子中,我們使用PCA并選擇了三個主成分:
#Import the required packages

#Import pandas to read csv import pandas

#Import numpy for array related operations import numpy

#Import sklearn's PCA algorithm

from sklearn.decomposition import PCA

#URL for loading the dataset

url =

"https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians diabetes/pima-indians-diabetes.data"

#Define the attribute names

names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']

dataframe = pandas.read_csv(url, names=names)

#Create array from data values

array = dataframe.values

#Split the data into input and target

X = array[:,0:8]

Y = array[:,8]

#Feature extraction

pca = PCA(n_components=3) fit = pca.fit(X)

#Summarize components

print("Explained Variance: %s") % fit.explained_variance_ratio_

print(fit.components_)

你可以看到,轉換后的數據集(三個主成分)與源數據幾乎沒有相似之處:

Explained Variance: [ 0.88854663 0.06159078 0.02579012]

[[ -2.02176587e-03 9.78115765e-02 1.60930503e-02 6.07566861e-02

9.93110844e-01 1.40108085e-02 5.37167919e-04 -3.56474430e-03]

[ -2.26488861e-02 -9.72210040e-01 -1.41909330e-01 5.78614699e-02 9.46266913e-02 -4.69729766e-02 -8.16804621e-04 -1.40168181e-01

[ -2.24649003e-02 1.43428710e-01 -9.22467192e-01 -3.07013055e-01 2.09773019e-02 -1.32444542e-01 -6.39983017e-04 -1.25454310e-01]]

選擇重要特征(特性重要度)

特征重要度是一種利用訓練好的有監督分類器來選擇特征的技術。當我們訓練分類器(如決策樹)時,我們計算每個參數以創建分割;我們可以使用這個度量作為特征選擇器。讓我們來詳細了解一下。

隨機森林由于其相對較好的準確性、魯棒性和易用性而成為最受歡迎的機器學習方法之一。它們還提供了兩種簡單易行的特征選擇方法——均值降低雜質和均值降低準確度。

隨機森林由許多決策樹組成。決策樹中的每個節點都是一個基于單個特征的條件,其設計目的是將數據集分割成兩個,以便相似的響應值最終出現在相同的集合中。選擇(局部)最優條件的度量叫做雜質。對于分類問題,它通常是基尼雜質或信息增益/熵,而對于回歸樹,它是方差。因此,當訓練一棵樹時,可以通過每個特征減少的樹中加權雜質的多少來計算。對于森林,可以對每個特征的雜質減少量進行平均,并根據該方法對特征進行排序。

讓我們看一下如何使用隨機森林分類器來進行特征選擇,并評估特征選擇前后分類器的準確性。我們將使用Otto數據集。該數據集可從kaggle免費獲得(你需要注冊kaggle才能下載該數據集)。你可以從https://www.kaggle.com/c/otto-group-product- classifics-challenge/data下載訓練集train.csv.zip,然后將解壓縮的train.csv文件放在你的工作目錄中。

這個數據集描述了超過61,000個產品的93個模糊細節,這些產品被分成10個產品類別(例如,時尚類、電子產品類等)。輸入參數是某種類型的不同事件的計數。

訓練目標是對新產品作為10個類別中每一個類別的概率數組做出預測,并使用多級對數損失(也稱為交叉熵)對模型進行評估。

我們將從導入所有庫開始:

#Import the supporting libraries

#Import pandas to load the dataset from csv file

from pandas import read_csv

#Import numpy for array based operations and calculations

import numpy as np

#Import Random Forest classifier class from sklearn

from sklearn.ensemble import RandomForestClassifier

#Import feature selector class select model of sklearn

from sklearn.feature_selection

import SelectFromModel

np.random.seed(1)

定義一個方法用于將我們的數據集分為訓練數據和測試數據;我們將在訓練數據部分對數據集進行訓練,測試數據部分將用于訓練模型的評估:

#Function to create Train and Test set from the original dataset def getTrainTestData(dataset,split):

np.random.seed(0) training = [] testing = []

np.random.shuffle(dataset) shape = np.shape(dataset)

trainlength = np.uint16(np.floor(split*shape[0]))

for i in range(trainlength): training.append(dataset[i])

for i in range(trainlength,shape[0]): testing.append(dataset[i])

training = np.array(training) testing = np.array(testing)

return training,testing

還需要添加一個函數來評估模型的準確性;以預測輸出和實際輸出為輸入,計算準確率百分比:

#Function to evaluate model performance

def getAccuracy(pre,ytest): count = 0

for i in range(len(ytest)):

if ytest[i]==pre[i]: count+=1

acc = float(count)/len(ytest)

return acc

現在要導入數據集。我們將導入train.csv文件;該文件包含61,000多個訓練實例。我們的示例將使用50000個實例,其中使用35,000個實例來訓練分類器,并使用15,000個實例來測試分類器的性能:
#Load dataset as pandas data frame

data = read_csv('train.csv')

#Extract attribute names from the data frame

feat = data.keys()

feat_labels = feat.get_values()

#Extract data values from the data frame

dataset = data.values

#Shuffle the dataset

np.random.shuffle(dataset)

#We will select 50000 instances to train the classifier

inst = 50000

#Extract 50000 instances from the dataset

dataset = dataset[0:inst,:]

#Create Training and Testing data for performance evaluation

train,test = getTrainTestData(dataset, 0.7)

#Split data into input and output variable with selected features

Xtrain = train[:,0:94] ytrain = train[:,94] shape = np.shape(Xtrain)

print("Shape of the dataset ",shape)

#Print the size of Data in MBs

print("Size of Data set before feature selection: %.2f MB"%(Xtrain.nbytes/1e6))

注意下這里的數據大小;由于我們的數據集包含約35000個訓練實例,帶有94個參數;我們的數據集非常大。讓我們來看一下:

Shape of the dataset (35000, 94)

Size of Data set before feature selection: 26.32 MB

如你所見,我們的數據集中有35000行和94列,數據大小超過26MB。

在下一個代碼塊中,我們將配置我們的隨機森林分類器;我們會使用250棵樹,最大深度為30,隨機特征的數量為7。其他超參數將是sklearn的默認值:
#Lets select the test data for model evaluation purpose

Xtest = test[:,0:94] ytest = test[:,94]

#Create a random forest classifier with the following Parameters

trees = 250

max_feat = 7

max_depth = 30

min_sample = 2

clf = RandomForestClassifier(n_estimators=trees,

max_features=max_feat,

max_depth=max_depth,

min_samples_split= min_sample, random_state=0,

n_jobs=-1)

#Train the classifier and calculate the training time

import time

start = time.time() clf.fit(Xtrain, ytrain) end = time.time()

#Lets Note down the model training time

print("Execution time for building the Tree is: %f"%(float(end)- float(start)))

pre = clf.predict(Xtest)

Let's see how much time is required to train the model on the training dataset:

Execution time for building the Tree is: 2.913641

#Evaluate the model performance for the test data

acc = getAccuracy(pre, ytest)

print("Accuracy of model before feature selection is %.2f"%(100*acc))

模型的精確度是:

Accuracy of model before feature selection is 98.82

正如所看到的,我們獲得了非常好的精確度,因為我們將幾乎99%的測試數據分類為正確的類別。這意味著我們在15,000個實例中對大概14,823個實例進行了正確的分類。

所以,現在問題是:我們應該進一步改進嗎?好吧,為什么不呢?如果可能的話,我們一定需要進行更多的改進;在這里,我們將使用特征重要度來選擇特征。如你所知,在樹的建造過程中,我們使用雜質度量來選擇節點。選擇雜質最少的參數值作為樹中的節點。我們可以使用類似的標準來選擇特征。我們可以給雜質更少的特征更多的重要度,這可以使用sklearn庫的feature_importances_函數來實現。讓我們來看一下每個特征的重要度:

print(feature)

('id', 0.33346650420175183)

('feat_1', 0.0036186958628801214)

('feat_2', 0.0037243050888530957)

('feat_3', 0.011579217472062748)

('feat_4', 0.010297382675187445)

('feat_5', 0.0010359139416194116)

('feat_6', 0.00038171336038056165)

('feat_7', 0.0024867672489765021)

('feat_8', 0.0096689721610546085)

('feat_9', 0.007906150362995093)

('feat_10', 0.0022342480802130366)

正如你看到的,每個特征都有不同的重要度,這取決于它對最終預測的貢獻值。

我們將使用這些重要度評分來對我們的特征進行排序;在接下來的部分中,我們將選取特征重要度大于0.01的特征進行模型訓練:
#Select features which have higher contribution in the final prediction

sfm = SelectFromModel(clf, threshold=0.01) sfm.fit(Xtrain,ytrain)

這里,我們將根據所選的特征參數轉換輸入的數據集。在下一個代碼塊中,我們會轉換數據集。然后,我們將檢查新數據集的大小和形狀:
#Transform input dataset

Xtrain_1 = sfm.transform(Xtrain) Xtest_1 = sfm.transform(Xtest)

#Let's see the size and shape of new dataset print("Size of Data set before feature selection: %.2f MB"%(Xtrain_1.nbytes/1e6))

shape = np.shape(Xtrain_1)

print("Shape of the dataset ",shape)

Size of Data set before feature selection: 5.60 MB Shape of the dataset (35000, 20)

看到數據集的形狀了嗎?經過特征選擇后,我們只剩下20個特征,這使得數據庫的大小從26MB減少到了5.60 MB,比原來的數據集減少了80%左右。

在下一個代碼塊中,我們將使用與前面相同的超參數訓練一個新的隨機森林分類器,并在測試集上進行了測試。我們來看看修改訓練集后得到的精確度是多少:

#Model training time

start = time.time() clf.fit(Xtrain_1, ytrain) end = time.time()

print("Execution time for building the Tree is: %f"%(float(end)- float(start)))

#Let's evaluate the model on test data

pre = clf.predict(Xtest_1) count = 0

acc2 = getAccuracy(pre, ytest)

print("Accuracy after feature selection %.2f"%(100*acc2))

Execution time for building the Tree is: 1.711518 Accuracy after feature selection 99.97

看到了嗎!使用修改后的數據集,我們獲得了99.97%的準確率,這意味著我們把14,996個實例分到了正確的類別,而之前我們只正確地分類了14,823個實例。

這是我們在特征選擇過程中取得的巨大進步;我們可以將所有的結果總結如下表:

評估標準 特征選擇前 特征選擇后
特征數量 94 20
數據集大小 26.32MB 5.60MB
訓練時間 2.91s 1.71s
精確度 98.82% 99.97%

上表顯示了特征選擇的實際優勢。可以看到我們顯著地減少了特征的數量,這減少了模型的復雜性和數據集的維度。在減小維度后,我們需要更少的訓練時間,最終我們克服了過擬合的問題,獲得了比以前更高的精確度。

本文我們共探討了機器學習中特征選擇的4種方法。

編輯:hfy

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

    關注

    66

    文章

    8416

    瀏覽量

    132620
收藏 人收藏

    評論

    相關推薦

    先進的SSD故障預測特征選擇方法盤點

    本文比較了沒有特征選擇(即使用所有學習特征)和五最先進的特征
    發表于 07-12 09:09 ?1693次閱讀
    五<b class='flag-5'>種</b>先進的SSD故障預測<b class='flag-5'>特征</b><b class='flag-5'>選擇</b><b class='flag-5'>方法</b>盤點

    如何選擇機器學習的各種方法

    的這篇博客,講述了如何選擇機器學習的各種方法。 另外,Scikit-learn 也提供了一幅清晰的路線圖給大家選擇:其實機器
    發表于 03-07 20:18

    軟體機器人學習問題探討

    以軟體機器人為背景和主題,深入講解:(1) 軟體機器人的關節設計方法;(2) 有限元分析技巧;(3) 力學模型的建立方法; (4) 基于MA
    發表于 08-12 15:09

    初學機器學習的四種方法介紹

    學習機器學習有很多方法,大多數人選擇從理論開始。 如果你是個程序員,那么你已經掌握了把問題拆分成相應組成部分及設計小項目原型的能力,這些能力能幫助你
    的頭像 發表于 07-05 08:34 ?2822次閱讀

    機器學習特征選擇常用算法

    ) ,是指從全部特征中選取一個特征子集,使構造出來的模型更好。在機器學習的實際應用特征數量
    發表于 11-16 01:28 ?8541次閱讀
    <b class='flag-5'>機器</b><b class='flag-5'>學習</b><b class='flag-5'>特征</b><b class='flag-5'>選擇</b>常用算法

    克隆代碼有害性預測特征選擇模型

    特征并去除其他無關特征,減小特征的搜索空間;接著,采用基于樸素貝葉斯等六分類器分別與封裝型序列浮動前向選擇算法結合來確定最優
    發表于 12-04 10:09 ?0次下載
    克隆代碼有害性預測<b class='flag-5'>中</b>的<b class='flag-5'>特征</b><b class='flag-5'>選擇</b>模型

    機器學習特征選擇的5點詳細資料概述

    特征選擇是一個重要的“數據預處理” (data preprocessing) 過程,在現實機器學習任務,獲得數據之后通常先進行
    的頭像 發表于 06-18 17:24 ?7028次閱讀

    機器學習特征選擇的三種方法

    在一定程度上降低特征后,從直觀上來看,很多時候可以一目了然看到特征特征值之間的關聯,這個場景,需要實際業務的支撐,生產上的業務數據更加明顯,有興趣的同學可以私信我加群,一起研究。
    的頭像 發表于 04-15 15:56 ?1.5w次閱讀

    機器學習如何進行特征選擇

    想要找一個最好的特征子集,最簡單最笨的方法就是把所有的特征排列組合,遍歷每一個子集從中選擇里面最好的一個,這種方法必然不可取。對這
    發表于 05-20 08:00 ?0次下載
    <b class='flag-5'>機器</b><b class='flag-5'>學習</b>如何進行<b class='flag-5'>特征</b><b class='flag-5'>選擇</b>

    機器學習特征提取 VS 特征選擇

    機器學習特征選擇特征提取區別 demi 在 周四, 06/11/2020 - 16:08 提
    的頭像 發表于 09-14 16:23 ?4127次閱讀
    <b class='flag-5'>機器</b><b class='flag-5'>學習</b>之<b class='flag-5'>特征</b>提取 VS <b class='flag-5'>特征</b><b class='flag-5'>選擇</b>

    基于最大信息系數與冗余分攤策略的特征選擇方法

    特征選擇機器學習的關鍵環節,通常采用最小冗余最大相關法進行特征選擇,但該
    發表于 03-26 15:27 ?13次下載
    基于最大信息系數與冗余分攤策略的<b class='flag-5'>特征</b><b class='flag-5'>選擇</b><b class='flag-5'>方法</b>

    特征選擇機器學習的軟件缺陷跟蹤系統對比

    軟件缺陷報告嚴重程度。通過對4特征選擇算法及4機器
    發表于 06-10 10:50 ?12次下載

    通過強化學習策略進行特征選擇

    來源:DeepHubIMBA特征選擇是構建機器學習模型過程的決定性步驟。為模型和我們想要完成的任務選擇
    的頭像 發表于 06-05 08:27 ?356次閱讀
    通過強化<b class='flag-5'>學習</b>策略進行<b class='flag-5'>特征</b><b class='flag-5'>選擇</b>

    人臉檢測的五種方法各有什么特征和優缺點

    人臉檢測是計算機視覺領域的一個重要研究方向,主要用于識別和定位圖像的人臉。以下是五常見的人臉檢測方法及其特征和優缺點的介紹: 基于膚色的方法
    的頭像 發表于 07-03 14:47 ?835次閱讀

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

    機器學習的整個流程,數據預處理與特征工程是兩個至關重要的步驟。它們直接決定了模型的輸入質量,進而影響模型的訓練效果和泛化能力。本文將從數據預處理和
    的頭像 發表于 07-09 15:57 ?413次閱讀
    主站蜘蛛池模板: 果冻传媒视频在线观看完整版免费| gay吊粗大双龙| 男助理憋尿PLAY灌尿BL出去| 国产成人在线观看免费网站| 人与畜禽CROPROATION免费| 99久免费精品视频在线观看2| 女生下面免费看| YELLOW在线观看高清视频免费| 亚洲激情一区| 入禽太深视频免费视频| 国产三级精品三级男人的天堂| 999久久久国产| 色久天| 毛片在线网址| 国产主播福利一区二区| 第一次处破女完整版电影| 中国人泡妞www免费| 亚洲国产精品免费观看| 十次啦中文网| 九九色精品国偷自产视频| 国产精品99精品无码视亚| 亚洲欧美中文字幕网站大全| 肉耽高h一受n攻| 嗯啊快拔出来我是你老师视频| 久久re这里视频精品15| 韩国精品无码少妇在线观看网站 | 国产av在在免费线观看美女| 99国产精品综合AV无码| 稚嫩挤奶h调教h| 亚洲熟妇AV乱码在线观看| 亚色九九九全国免费视频| 十分钟免费看完整视频| 色AV色婷婷66人妻久久久| 欧美黑人巨大性极品hd欧| 国产一区免费在线观看| 国产精品视频成人| 国产成人精品区在线观看| 大胸美女裸身色诱网站| 成人在线视频在线观看| 成年美女黄网站色app| 成人免费在线视频|