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

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

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

3天內不再提示

對Python特征選擇最全面的解答

數據分析與開發 ? 來源:開源博客 ? 作者:算法進階 ? 2021-03-19 16:26 ? 次閱讀

1 特征選擇的目的

機器學習中特征選擇是一個重要步驟,以篩選出顯著特征、摒棄非顯著特征。這樣做的作用是:

減少特征(避免維度災難),提高訓練速度,降低運算開銷;

減少干擾噪聲,降低過擬合風險,提升模型效果;

更少的特征,模型可解釋性更好。

2 特征選擇方法

特征選擇方法一般分為三類:

2.1 過濾法--特征選擇

通過計算特征的缺失率、發散性、相關性、信息量、穩定性等指標對各個特征進行評估選擇,常用如缺失情況、單值率、方差驗證、pearson相關系數、chi2卡方檢驗、IV值、信息增益及PSI等方法。

2.1.1 缺失率

通過分析各特征缺失率,并設定閾值對特征進行篩選。閾值可以憑經驗值(如缺失率《0.9)或可觀察樣本各特征整體分布,確定特征分布的異常值作為閾值。

特征缺失率

miss_rate_df = df.isnull().sum().sort_values(ascending=False) / df.shape[0]

2.1.2 發散性

特征無發散性意味著該特征值基本一樣,無區分能力。通過分析特征單個值的最大占比及方差以評估特征發散性情況,并設定閾值對特征進行篩選。閾值可以憑經驗值(如單值率《0.9, 方差》0.001)或可觀察樣本各特征整體分布,以特征分布的異常值作為閾值。

分析方差

var_features = df.var().sort_values()

特征單值率

sigle_rate = {}

for var in df.columns:

sigle_rate[var]=(df[var].value_counts().max()/df.shape[0])

2.1.2 相關性

特征間相關性高會浪費計算資源,影響模型的解釋性。特別對線性模型來說,會導致擬合模型參數的不穩定。常用的分析特征相關性方法如:

方差膨脹因子VIF:

方差膨脹因子也稱為方差膨脹系數(Variance Inflation),用于計算數值特征間的共線性,一般當VIF大于10表示有較高共線性。

from statsmodels.stats.outliers_influence import variance_inflation_factor

截距項

df[‘c’] = 1

name = df.columns

x = np.matrix(df)

VIF_list = [variance_inflation_factor(x,i) for i in range(x.shape[1])]

VIF = pd.DataFrame({‘feature’:name,“VIF”:VIF_list})

person相關系數:

用于計算數值特征兩兩間的相關性,數值范圍[-1,1]。

import seaborn as sns

corr_df=df.corr()

熱力圖

sns.heatmap(corr_df)

剔除相關性系數高于threshold的corr_drop

threshold = 0.9

upper = corr_df.where(np.triu(np.ones(corr_df.shape), k=1).astype(np.bool))

corr_drop = [column for column in upper.columns if any(upper[column].abs() 》 threshold)]

Chi2檢驗

395f0718-888c-11eb-8b86-12bb97331649.png

經典的卡方檢驗是檢驗類別型變量對類別型變量的相關性。Sklearn的實現是通過矩陣相乘快速得出所有特征的觀測值和期望值,在計算出各特征的 χ2 值后排序進行選擇。在擴大了 chi2 的在連續型變量適用范圍的同時,也方便了特征選擇。

from sklearn.datasets import load_iris

from sklearn.feature_selection import SelectKBest

from sklearn.feature_selection import chi2

x, y = load_iris(return_X_y=True)

x_new = SelectKBest(chi2, k=2).fit_transform(x, y)

2.1.3 信息量

分類任務中,可以通過計算某個特征對于分類這樣的事件到底有多大信息量貢獻,然后特征選擇信息量貢獻大的特征。常用的方法有計算IV值、信息增益。

信息增益

如目標變量D的信息熵為 H(D),而D在特征A條件下的條件熵為 H(D|A),那么信息增益 G(D , A) 為:

398ea68a-888c-11eb-8b86-12bb97331649.png

信息增益(互信息)的大小即代表特征A的信息貢獻程度。

from sklearn.feature_selection import mutual_info_classif

from sklearn.datasets import load_iris

x, y = load_iris(return_X_y=True)

mutual_info_classif(x,y)

IV

IV值(Information Value),在風控領域是一個重要的信息量指標,衡量了某個特征(連續型變量需要先離散化)對目標變量的影響程度。其基本思想是根據該特征所命中黑白樣本的比率與總黑白樣本的比率,來對比和計算其關聯程度。【Github代碼鏈接】

2.1.4 穩定性

對大部分數據挖掘場景,特別是風控領域,很關注特征分布的穩定性,其直接影響到模型使用周期的穩定性。常用的是PSI(Population Stability Index,群體穩定性指標)。

PSI

PSI表示的是實際與預期分布的差異,SUM( (實際占比 - 預期占比)* ln(實際占比 / 預期占比) )。

3a17fa34-888c-11eb-8b86-12bb97331649.png

在建模時通常以訓練樣本(In the Sample, INS)作為預期分布,而驗證樣本作為實際分布。驗證樣本一般包括樣本外(Out of Sample,OOS)和跨時間樣本(Out of Time,OOT)【Github代碼鏈接】

2.2 嵌入法--特征選擇

嵌入法是直接使用模型訓練得到特征重要性,在模型訓練同時進行特征選擇。通過模型得到各個特征的權值系數,根據權值系數從大到小來選擇特征。常用如基于L1正則項的邏輯回歸、Lighgbm特征重要性選擇特征。

基于L1正則項的邏輯回歸

L1正則方法具有稀疏解的特性,直觀從二維解空間來看L1-ball 為正方形,在頂點處時(如W2=C, W1=0的稀疏解),更容易達到最優解。可見基于L1正則方法的會趨向于產生少量的特征,而其他的特征都為0。

from sklearn.feature_selection import SelectFromModel

from sklearn.linear_model import LogisticRegression

x_new = SelectFromModel(LogisticRegression(penalty=“l1”, C=0.1)).fit_transform(x, y)

基于樹模型的特征排序

基于決策樹的樹模型(隨機森林,Lightgbm,Xgboost等),樹生長過程中也是啟發式搜索特征子集的過程,可以直接用訓練后模型來輸出特征重要性。

import matplotlib.pyplot as plt

from lightgbm import plot_importance

from lightgbm import LGBMClassifier

model = LGBMClassifier()

model.fit(x, y)

plot_importance(model, max_num_features=20, figsize=(10,5),importance_type=‘split’)

plt.show()

feature_importance = pd.DataFrame({

‘feature’: model.booster_.feature_name(),

‘gain’: model.booster_.feature_importance(‘gain’),

‘split’: model.booster_.feature_importance(‘split’)

}).sort_values(‘gain’,ascending=False)

當特征數量多時,對于輸出的特征重要性,通常可以按照重要性的拐點劃定下閾值選擇特征。

2.3 包裝法--特征選擇

包裝法是通過每次選擇部分特征迭代訓練模型,根據模型預測效果評分選擇特征的去留。一般包括產生過程,評價函數,停止準則,驗證過程,這4個部分。

(1) 產生過程( Generation Procedure )是搜索特征子集的過程,首先從特征全集中產生出一個特征子集。搜索方式有完全搜索(如廣度優先搜索、定向搜索)、啟發式搜索(如雙向搜索、后向選擇)、隨機搜索(如隨機子集選擇、模擬退火、遺傳算法)。(2) 評價函數( Evaluation Function ) 是評價一個特征子集好壞程度的一個準則。(3) 停止準則( Stopping Criterion )停止準則是與評價函數相關的,一般是一個閾值,當評價函數值達到這個閾值后就可停止搜索。(4) 驗證過程( Validation Procedure )是在驗證數據集上驗證選出來的特征子集的實際效果。

首先從特征全集中產生出一個特征子集,然后用評價函數對該特征子集進行評價,評價的結果與停止準則進行比較,若評價結果比停止準則好就停止,否則就繼續產生下一組特征子集,繼續進行特征選擇。最后選出來的特征子集一般還要驗證其實際效果。

RFE

RFE遞歸特征消除是常見的特征選擇方法。原理是遞歸地在剩余的特征上構建模型,使用模型判斷各特征的貢獻并排序后做特征選擇。

from sklearn.feature_selection import RFE

rfe = RFE(estimator,n_features_to_select,step)

rfe = rfe.fit(x, y)

print(rfe.support_)

print(rfe.ranking_)

雙向搜索特征選擇

鑒于RFE僅是后向迭代的方法,容易陷入局部最優,而且不支持Lightgbm等模型自動處理缺失值/類別型特征,便基于啟發式雙向搜索及模擬退火算法思想,簡單碼了一個特征選擇的方法【Github代碼鏈接】,如下代碼:

“”“

Author: 公眾號-算法進階

基于啟發式雙向搜索及模擬退火的特征選擇方法。

”“”

import pandas as pd

import random

from sklearn.metrics import precision_score, recall_score, f1_score, accuracy_score, roc_curve, auc

def model_metrics(model, x, y, pos_label=1):

“”“

評價函數

”“”

yhat = model.predict(x)

yprob = model.predict_proba(x)[:,1]

fpr, tpr, _ = roc_curve(y, yprob, pos_label=pos_label)

result = {‘accuracy_score’:accuracy_score(y, yhat),

‘f1_score_macro’: f1_score(y, yhat, average = “macro”),

‘precision’:precision_score(y, yhat,average=“macro”),

‘recall’:recall_score(y, yhat,average=“macro”),

‘auc’:auc(fpr,tpr),

‘ks’: max(abs(tpr-fpr))

}

return result

def bidirectional_selection(model, x_train, y_train, x_test, y_test, annealing=True, anneal_rate=0.1, iters=10,best_metrics=0,

metrics=‘auc’,threshold_in=0.0001, threshold_out=0.0001,early_stop=True,

verbose=True):

“”“

model 選擇的模型

annealing 模擬退火算法

threshold_in 特征入模的》閾值

threshold_out 特征剔除的《閾值

”“”

included = []

best_metrics = best_metrics

for i in range(iters):

# forward step

print(“iters”, i)

changed = False

excluded = list(set(x_train.columns) - set(included))

random.shuffle(excluded)

for new_column in excluded:

model.fit(x_train[included+[new_column]], y_train)

latest_metrics = model_metrics(model, x_test[included+[new_column]], y_test)[metrics]

if latest_metrics - best_metrics 》 threshold_in:

included.append(new_column)

change = True

if verbose:

print (‘Add {} with metrics gain {:.6}’.format(new_column,latest_metrics-best_metrics))

best_metrics = latest_metrics

elif annealing:

if random.randint(0, iters) 《= iters * anneal_rate:

included.append(new_column)

if verbose:

print (‘Annealing Add {} with metrics gain {:.6}’.format(new_column,latest_metrics-best_metrics))

# backward step

random.shuffle(included)

for new_column in included:

included.remove(new_column)

model.fit(x_train[included], y_train)

latest_metrics = model_metrics(model, x_test[included], y_test)[metrics]

if latest_metrics - best_metrics 《 threshold_out:

included.append(new_column)

else:

changed = True

best_metrics= latest_metrics

if verbose:

print(‘Drop{} with metrics gain {:.6}’.format(new_column,latest_metrics-best_metrics))

if not changed and early_stop:

break

return included

#示例

from sklearn.model_selection import train_test_split

x_train, x_test, y_train, y_test = train_test_split(x, y)

model = LGBMClassifier()

included = bidirectional_selection(model, x_train, y_train, x_test, y_test, annealing=True, iters=50,best_metrics=0.5,

metrics=‘auc’,threshold_in=0.0001, threshold_out=0,

early_stop=False,verbose=True)

- EOF -
編輯:lyn

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

    關注

    66

    文章

    8425

    瀏覽量

    132770
  • 特征選擇
    +關注

    關注

    0

    文章

    12

    瀏覽量

    7189

原文標題:Python特征選擇(全)

文章出處:【微信號:DBDevs,微信公眾號:數據分析與開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    請問使用AFE4400SPO2EVM測試完之后,GUI里面的數據如何作為原始數據導入到python操作界面里呢?

    請問使用AFE4400SPO2EVM測試完之后,GUI里面的數據如何作為原始數據導入到python操作界面里呢?
    發表于 01-03 07:38

    鐵威馬九款NAS新品震撼上市,全面升級數據存儲體驗

    鐵威馬此次新品發布不僅體現了鐵威馬在技術創新方面的實力,也展示了其對用戶需求的深刻理解。從硬件到軟件,從性能到安全,鐵威馬都致力于為用戶提供最全面、最可靠的數據存儲解決方案。相信隨著這九款新品的上市,鐵威馬將在數據存儲領域繼續引領潮流,為用戶帶來更加便捷、高效的數據存儲體
    的頭像 發表于 09-07 14:38 ?365次閱讀
    鐵威馬九款NAS新品震撼上市,<b class='flag-5'>全面</b>升級數據存儲體驗

    如何幫助孩子高效學習Python:開源硬件實踐是最優選擇

    家長們常常擔心孩子在學習Python時所面臨的挑戰,如復雜性、興趣保持、學習進度和可用資源。對于希望有效教授孩子Python的家長而言,了解硬件的作用至關重要,因為結合硬件項目的Python學習能夠
    的頭像 發表于 09-06 09:49 ?335次閱讀

    【「時間序列與機器學習」閱讀體驗】時間序列的信息提取

    的穩健縮放、時間序列的標準化。 時間序列的特征工程、時間序列的統計特征、時間序列的熵特征、時間序列的降維特征這些小節,涉及到比較多的數學公式,包含有概率論與樹林里統計、高等數學等方
    發表于 08-17 21:12

    pytorch和python的關系是什么

    在當今的人工智能領域,Python已經成為了最受歡迎的編程語言之一。Python的易學易用、豐富的庫和框架以及強大的社區支持,使其成為了數據科學、機器學習和深度學習等領域的首選語言。而在深度學習領域
    的頭像 發表于 08-01 15:27 ?2082次閱讀

    用pycharm進行python爬蟲的步驟

    提供了許多有用的功能,如代碼自動完成、調試和版本控制等。您可以從JetBrains的官方網站下載PyCharm,并根據您的需求選擇免費社區版或付費專業版。 創建一個新的Python項目 打開
    的頭像 發表于 07-11 10:11 ?889次閱讀

    esp32啟用ble后用自己的iOS app能夠發現service,但沒有發現service里面的特征,為什么?

    esp32,啟用ble后用自己的iOS app能夠發現service,但沒有發現service里面的特征,在創建服務或特征的時候需要進行什么特別的設置嗎?
    發表于 06-13 06:24

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

    來源:DeepHubIMBA特征選擇是構建機器學習模型過程中的決定性步驟。為模型和我們想要完成的任務選擇好的特征,可以提高性能。如果我們處理的是高維數據集,那么
    的頭像 發表于 06-05 08:27 ?375次閱讀
    通過強化學習策略進行<b class='flag-5'>特征</b><b class='flag-5'>選擇</b>

    python讀取stm32串口讀不了是哪里的問題?

    =ser.readlines()print(s) 可是什么都讀取不了。如果用買的STM32開發板送的串口助手,能接收到數據。板子上燒錄的printf輸出程序。 請問各位大神,Python程序要怎么寫才能讀取串口數據呢?跪求大神解答。現在是51的串口能讀,但是32的還是不能
    發表于 04-24 08:07

    Python怎么讀取STM32串口數據?

    =ser.readlines()print(s) 可是什么都讀取不了。如果用買的STM32開發板送的串口助手,能接收到數據。板子上燒錄的printf輸出程序。 請問各位大神,Python程序要怎么寫才能讀取串口數據呢?跪求大神解答
    發表于 04-24 07:30

    選擇振動傳感器,測量精度越高越好?

    如何選擇振動傳感器?測量精度越高越好?快來聽聽專業人士的解答吧!
    的頭像 發表于 03-21 11:40 ?650次閱讀
    <b class='flag-5'>選擇</b>振動傳感器,測量精度越高越好?

    教你一招,簡化儀器Python編程控制!

    許多行業的工程師都使用自動化來擴展其測試儀器的功能,而大多是選擇免費的編程語言——Python來完成。作為適用于自動化的主要編程語言,Python具備許多顯著優勢
    的頭像 發表于 03-15 14:31 ?2448次閱讀
    教你一招,簡化儀器<b class='flag-5'>Python</b>編程控制!

    這可能是電機知識最全面的一篇文章了,電機的各部位名稱及介紹

    通又叫磁通量:設在勻強磁場中有一個與磁場方向垂直的平面,磁場的磁感應強度為B,平面的面積為S,我們定義磁感應強度 B 與面積 S 的乘積,叫做穿過這個面的磁通量。 7.什么是定子? 有刷或無刷電機
    發表于 03-12 09:26

    較為全面的倉庫溫濕度管理知識

    溫濕度管理是倉庫管理中的重要環節,它關乎著貨品質量的安全。同時,做好溫濕度管理更是訂單能夠及時履行的關鍵所在。很多倉庫管理人員大致了解一些關于溫濕度管理方面的知識,但還不夠全面。搜集總結一些有關倉庫
    的頭像 發表于 01-27 00:00 ?2273次閱讀
    較為<b class='flag-5'>全面的</b>倉庫溫濕度管理知識

    如何使用Python進行圖像識別的自動學習自動訓練?

    圖像識別的自動學習和自動訓練。 首先,讓我們了解一下圖像識別的基本概念。圖像識別是指通過計算機程序識別和理解圖像內容的過程。自動學習和自動訓練是指計算機通過觀察和學習數據,自動提取特征并訓練模型來實現圖像識別的能力。 在Python中,有許
    的頭像 發表于 01-12 16:06 ?610次閱讀
    主站蜘蛛池模板: 人妻体体内射精一区二区| 亚洲精品影院久久久久久| 黑人巨大两根一起挤进欧美| 免费三级黄色| xxxxx69hd杨幂| 免费在线观看的毛片| 啊灬啊灬啊灬快高潮视频| 两个奶头被吃得又翘又痛| qvod 韩国| 小xav导航| 国产精品成人久久久久A伋| 欧美最猛黑人XXXXWWW| 国产精品嫩草影视在线观看| 日日噜噜夜夜狠狠视频| BL低喘贯穿顶弄老师H| 手机在线观看毛片| 精品久久久久久无码人妻国产馆| 2021国产精品一卡2卡三卡4卡| 九九热精品在线| 99久在线国内在线播放免费观看| 天天影视网网色色欲| 久久久久国产一级毛片高清片| 一区在线观看在线| 人曽交Z00Z0OA片| 狠狠狠狠狠狠干| 扒开老师大腿猛进AAA片软件| 亚洲日本欧美产综合在线| 久久久久久久电影| 处xxxx.88| 19十主播福利视频| 蜜柚视频高清在线| 91九色网址| 羞羞漫画在线播放| 狠狠啪在线香蕉| www.黄色| 中文字幕乱码一区久久麻豆樱花| 少妇第一次交换| 免费观看激烈日板子| 好紧好湿太硬了我太爽了小说| 成人亚洲视频| 亚洲国产高清视频在线观看|