特徵選擇其實就是減少屬性個數,為什麼要這麼做呢?直接使用原始資料來訓練模型的話,雖然說在訓練模型上的準確率會非常高,但是在測試樣本上的準確率將會大打折扣,也就是會產生過擬合的現象。所以說需要選擇出最適合的屬性進行訓練。
特徵選擇的原因:
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.選擇合適的特徵 我們首先看當業務已經整理好各種特徵資料時,我們如何去找出適合我們問題需要的特徵,此時特徵數...
特徵工程之特徵表達
在特徵工程之特徵選擇中,我們講到了特徵選擇的一些要點。本篇我們繼續討論特徵工程,不過會重點關注於特徵表達部分,即如果對某乙個特徵的具體表現形式做處理。主要包括缺失值處理,特殊的特徵處理比如時間和地理位置處理,離散特徵的連續化和離散化處理,連續特徵的離散化處理幾個方面。特徵有缺失值是非常常見的,大部分...