【特征選擇】嵌入式特征選擇法


原創博文,轉載請注明出處!

    嵌入式特征選擇法使用機器學習模型進行特征選擇。特征選擇過程與學習器相關,特征選擇過程與學習器訓練過程融合,在學習器訓練過程中自動進行特征選擇。

 

通過L1正則化來選擇特征

 

      sklearn在feature_selection模塊中集成的模型SelectFromModel實現了嵌入式特征選擇,SelectFromModel模型通過sklearn內置的機器學習模型提供的特征重要性指標coef_或feature_importance對特征進行選擇,即如果特征的coef_或feature_importance的值低於預設的閾值,則移除低於閾值的特征。其中閾值的設定可以指定,也可以通過啟發式方法選擇合適的閾值。啟發式的方法通常有mean、median等。

# L1+LR特征選擇

# -*- coding: utf-8 -*-
"""
# author: wanglei5205
# blog:http://cnblogs.com/wanglei5205
# github:http://github.com/wanglei5205

"""
### 生成數據
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=1000,         # 樣本個數
                           n_features=25,          # 特征個數
                           n_informative=3,        # 有效特征個數
                           n_redundant=2,          # 冗余特征個數(有效特征的隨機組合)
                           n_repeated=0,           # 重復特征個數(有效特征和冗余特征的隨機組合)
                           n_classes=8,            # 樣本類別
                           n_clusters_per_class=1, # 簇的個數
                           random_state=0)

### 特征選擇
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression(penalty="l1",C=0.1)

from sklearn.feature_selection import SelectFromModel
X_L1 = SelectFromModel(estimator = lr).fit_transform(X,y)

### 數據划分
from sklearn.model_selection import train_test_split
x_a_train,x_a_test,y_a_train,y_a_test = train_test_split(X,y,random_state = 33,test_size = 0.25)
x_b_train,x_b_test,y_b_train,y_b_test = train_test_split(X_L1,y,random_state = 33,test_size = 0.25)

### 效果比較
from sklearn.svm import SVC
svc1 = SVC().fit(x_a_train,y_a_train)
print(svc1.score(x_a_test,y_a_test))

from sklearn.svm import SVC
svc2 = SVC().fit(x_b_train,y_b_train)
print(svc2.score(x_b_test,y_b_test))

# 參考博客

http://www.cnblogs.com/stevenlk/p/6543646.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM