資料特徵選定
阿新 • • 發佈:2018-11-12
資料特徵選定
目的:最大限度地從原始資料中提取出合適的特徵。
單變數特徵選定
- 統計分析可以用來分析和選擇對結果影響最大的資料特徵;
- 可以選用一系列統計方法來選定資料特徵;
- 卡方檢驗就是統計樣本的實際觀測值與理論推斷值之間的偏離程度,偏離程度決定了卡方值的大小;
- 卡方值越大,越不符合
- 卡方值越小,偏差越小,越趨於符合;
- 若兩個值完全相等,卡方值就為 0,表示理論值完全符合。
# 通過卡方檢驗選定資料特徵
import numpy as np
import pandas as pd
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
# 匯入資料
filename = 'pima_data.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = pd.read_csv(filename, names=names)
# 將資料分為輸入資料和輸出結果
array = data.values
X = array[:, 0:8]
Y = array[:, 8]
# 特徵選定
test = SelectKBest( score_func=chi2, k=4)
fit = test.fit(X, Y)
np.set_printoptions(precision=3)
print(fit.scores_)
features = fit.transform(X)
print(features)
遞迴特徵消除(RFE)
- RFE 使用一個基模型來進行多輪訓練,每輪訓練以後,消除若干權值係數的特徵,再基於新的特徵集進行下一輪訓練;
- 通過每一個基礎模型的精度,找到對最終的預測結果影響最大的資料特徵;
# 通過遞迴消除來選定特徵
import pandas as pd
import numpy as np
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
# 匯入資料
filename = 'pima_data.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = pd.read_csv(filename, names=names)
# 將資料分為輸入資料和輸出結果
array = data.values
X = array[:, 0:8]
Y = array[:, 8]
# 特徵選定
model = LogisticRegression()
rfe = RFE(model, 3)
fit = rfe.fit(X, Y)
print("特徵個數:")
print(fit.n_features_)
print("被選定的特徵:")
print(fit.support_)
for feature, selected in zip(names, fit.support_):
if selected:
print(feature)
print("特徵排名:")
# 被標記為 1 的特徵是被選定的特徵
print(fit.ranking_)
主成分分析
- PCA 為了讓對映後的樣本具有最大的發散性,無監督降維
- LDA 是為了讓對映後的樣本具有最好的分類效能,有監督降維
# 通過主要成分分析選定資料特徵
import pandas as pd
from sklearn.decomposition import PCA
# 匯入資料
filename = 'pima_data.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = pd.read_csv(filename, names=names)
# 將資料分為輸入資料和輸出結果
array = data.values
X = array[:, 0:8]
Y = array[:, 8]
# 特徵選定
pca = PCA(n_components=3)
fit = pca.fit(X)
print("解釋方差:%s" % fit.explained_variance_ratio_)
print(fit.components_)
print(fit.components_.shape)
特徵的重要性
- 決策樹演算法、隨機森林演算法、極端隨機樹演算法都可以用來計算資料特徵的重要性。
# 通過決策樹計算特徵的重要性
import pandas as pd
from sklearn.ensemble import ExtraTreesClassifier
# 匯入資料
filename = 'pima_data.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = pd.read_csv(filename, names=names)
# 將資料分為輸入資料和輸出結果
array = data.values
X = array[:, 0:8]
Y = array[:, 8]
# 特徵選定
model = ExtraTreesClassifier()
fit = model.fit(X, Y)
print(fit.feature_importances_)
另外,線性迴歸以及正則化的線性迴歸(嶺迴歸、LASSO 迴歸)、邏輯迴歸都可以計算得到特徵的權重,通過權重的大小,也能反映特徵的重要性,特別地,LASSO 迴歸會讓一些特徵的權重變為 0。
參考資料:
1、使用 scikit-learn 進行特徵選擇
Read more: http://bluewhale.cc/2016-11-25/use-scikit-learn-for-feature-selection.html#ixzz5UMdz0779
說明:這篇文章中還介紹了使用方差的閾值進行特徵選擇的操作。