特徵工程之特徵選擇

2021-08-15 11:50:30 字數 2609 閱讀 9789

特徵選擇其實就是減少屬性個數,為什麼要這麼做呢?直接使用原始資料來訓練模型的話,雖然說在訓練模型上的準確率會非常高,但是在測試樣本上的準確率將會大打折扣,也就是會產生過擬合的現象。所以說需要選擇出最適合的屬性進行訓練。

特徵選擇的原因:

2、雜訊:部分特徵對**結果又影響

進行特徵選擇的時候有兩種情況:一種是知道特徵和專案目的及背景的時候,手動的去選擇一些合適的特徵。另一種是在公司進行開發的時候,資料已經有了並且屬性的量比較多,在這個時候人工去選擇特徵是不可能的事情,這個時候就只能借助工具來實現特徵選擇這一需求了。

特徵選擇主要方法

filter:variance threshold

embedded:正則化、決策樹

variance threshold

刪除所有低方差特徵,因為方差值越低,特徵的接近程度也就越高,當方差為0的時候,當前特徵所有的特徵值是一樣的。(threshold:閥值,閥值的大小根據實際需求進行調整)

下面是**:

def var():

"""特徵選擇-刪除低方差的特徵

:return: none

"""var = variancethreshold(threshold=0.0)

data = var.fit_transform([[0,2,0,3],[0,1,4,3],[0,1,1,3]])

print(data)

執行結果

主成分分析

pca本質:pca是一種分析、簡化資料集的技術

目的:使資料維數壓縮,盡可能降低原資料的維數(複雜度),損失少量資訊。

作用:可以削減回歸分析或則聚類分析中特徵的數量

應用場景:特徵數量達到上百的時候,考慮資料的簡化(資料會改變,特徵也會減少)

使用pca進行降維的**:

def pca():

"""主成分分析進行降維

:return: none

"""pca = pca(n_components=0.9)#n_component填小數時,表示保留百分之多少的資訊,填整數表示降多少維

data = pca.fit_transform([[2,8,4,5],[6,3,0,8],[5,4,9,1]])

print(data)

return none

執行結果

下面是對資料進行降維處理的乙個小案例(kaggle上的instacart)

首先需求是把資料處理成乙個使用者代表乙個資料項,屬性為商品類別,即每個使用者買了多少該類別的商品

資料集上中有四張表分別是

products.csv:商品資訊

order_products_train.csv:訂單與商品資訊

orders.csv:使用者的訂單資訊

aisles.csv:商品所屬具體物品分類

我們要做的工作如下:

1、將四張表合成一張表(使用pandas.merge()實現)

2、建立類似行,列資料即演算法可用的形式(使用交叉表實現)

3、進行主成分分析

**如下:

def instacart():

"""處理市場籃子資料

:return: none

"""#讀取四張表的資料

train = pd.read_csv("./data/instacart/order_products__train.csv")

products = pd.read_csv("./data/instacart/products.csv")

orders = pd.read_csv("./data/instacart/orders.csv")

aisles = pd.read_csv("./data/instacart/aisles.csv")

#合併四張表到一張表(使用者-物品類別)

#merge()引數說明:合併的兩張表的名字,以什麼鍵合併

_mg = pd.merge(train,products,on=['product_id','product_id'])

_mg = pd.merge(_mg,orders,on=['order_id','order_id'])

mt = pd.merge(_mg,aisles,on=['aisle_id','aisle_id'])

print(mt.head(10))

#交叉表(特殊的分組工具)

#crosstab()第乙個引數代表行屬性,第二個引數代表列屬性

cross = pd.crosstab(mt['user_id'],mt['aisle'])

print(cross.head(10))

#進行主成分分析

pca = pca(n_components=0.9)

data = pca.fit_transform(cross)

print(data)

return none

特徵工程之特徵選擇

在前一篇文章中我介紹了一些資料預處理的方法,原始資料在經過預處理之後可以被演算法處理了,但是實際中可能有一些特徵是沒有必要的,比如在中國採集的一些資料,那麼國籍就都是中國,其實也就沒有意義了,反映在統計量上就是方差過小,也就是樣本在這個特徵上變化很小。還有一種情況是特徵和最後的結果相關性很小,也就是...

特徵工程之特徵選擇

在做資料分析的時候,特徵的 一般有兩塊,一塊是業務已經整理好各種特徵資料,我們需要去找出適合我們問題需要的特徵 另一塊是我們從業務特徵中自己去尋找高階資料特徵。我們就針對這兩部分來分別討論。2.選擇合適的特徵 我們首先看當業務已經整理好各種特徵資料時,我們如何去找出適合我們問題需要的特徵,此時特徵數...

特徵工程之特徵表達

在特徵工程之特徵選擇中,我們講到了特徵選擇的一些要點。本篇我們繼續討論特徵工程,不過會重點關注於特徵表達部分,即如果對某乙個特徵的具體表現形式做處理。主要包括缺失值處理,特殊的特徵處理比如時間和地理位置處理,離散特徵的連續化和離散化處理,連續特徵的離散化處理幾個方面。特徵有缺失值是非常常見的,大部分...