python機器學習-乳腺癌細胞挖掘(博主親自錄制視頻)
轉載:https://www.zhihu.com/question/28641663/answer/41653367
通常而言,特征選擇是指選擇獲得相應模型和算法最好性能的特征集,工程上常用的方法有以下:
1. 計算每一個特征與響應變量的相關性:工程上常用的手段有計算皮爾遜系數和互信息系數,皮爾遜系數只能衡量線性相關性而互信息系數能夠很好地度量各種相關性,但是計算相對復雜一些,好在很多toolkit里邊都包含了這個工具(如sklearn的MINE),得到相關性之后就可以排序選擇特征了;
2. 構建單個特征的模型,通過模型的准確性為特征排序,借此來選擇特征,另外,記得JMLR'03上有一篇論文介紹了一種基於決策樹的特征選擇方法,本質上是等價的。當選擇到了目標特征之后,再用來訓練最終的模型;
3. 通過L1正則項來選擇特征:L1正則方法具有稀疏解的特性,因此天然具備特征選擇的特性,但是要注意,L1沒有選到的特征不代表不重要,原因是兩個具有高相關性的特征可能只保留了一個,如果要確定哪個特征重要應再通過L2正則方法交叉檢驗;
4. 訓練能夠對特征打分的預選模型:RandomForest和Logistic Regression等都能對模型的特征打分,通過打分獲得相關性后再訓練最終模型;
5. 通過特征組合后再來選擇特征:如對用戶id和用戶特征最組合來獲得較大的特征集再來選擇特征,這種做法在推薦系統和廣告系統中比較常見,這也是所謂億級甚至十億級特征的主要來源,原因是用戶數據比較稀疏,組合特征能夠同時兼顧全局模型和個性化模型,這個問題有機會可以展開講。
6. 通過深度學習來進行特征選擇:目前這種手段正在隨着深度學習的流行而成為一種手段,尤其是在計算機視覺領域,原因是深度學習具有自動學習特征的能力,這也是深度學習又叫 unsupervised feature learning的原因。從深度學習模型中選擇某一神經層的特征后就可以用來進行最終目標模型的訓練了。
整體上來說,特征選擇是一個既有學術價值又有工程價值的問題,目前在研究領域也比較熱,值得所有做機器學習的朋友重視。
http://blog.csdn.net/ae5555/article/details/49534263
去除方差小的特征
設置一個方差閾值,沒有達到這個方差閾值的特征都會被丟棄。
VarianceThreshold,算法輸入只要求特征(X),不需要輸入結果(Y)。
from sklearn.feature_selection import VarianceThreshold
X=[[feature1,feature2,…],…]
sel=VarianceThreshold(threshold=xx)
print(sel.fit_transform(X))
單變量特征選取
單變量特征提取的原理是分別計算每個特征的某個統計指標,根據該指標來選取特征。
SelectKBest、SelectPercentile,前者選擇排名前k個的特征,后者選擇排名在前k%的特征。選擇的統計指標需要指定,對於regression問題,使用f_regression指標;對於classification問題,可以使用chi2或者f_classif指標。
from sklearn.feature_selection import SelectKBest,chi2
X_new=SelectKBest(chi2,k=2).fit_transform(test_X,test_Y)
- False Positive Rate,假陽性率
- chi2,卡方統計量,X中特征取值必須非負。卡方檢驗用來測度隨機變量之間的依賴關系。通過卡方檢驗得到的特征之間是最可能獨立的隨機變量,因此這些特征的區分度很高。
循環特征選取
不單獨地檢驗某個特征的價值,而是檢驗特征集的價值。對於一個數量為n的特征集合,子集的個數為2的n次方減一。通過指定一個學習算法,通過算法計算所有子集的error,選擇error最小的子集作為選取的特征。
RFE
- 對初始特征集合中每個特征賦予一個初始權重。
- 訓練,將權重最小的特征移除。
- 不斷迭代,直到特征集合的數目達到預定值。
from sklearn.svm import SVC
from sklearn.feature_selection import RFE
//X為樣本集合,每個樣本為一個數組,數組元素為各個特征值,Y樣本的評分
svc=SVC(kernel=”linear”,C=1)
rfe=RFE(estimator=svc,n_features_to_select=5,step=1)
X_new=rfe.fit_transform(X,Y)
RFECV
在RFE訓練時,增加交叉驗證。
L1-base
在線性回歸模型中,每一個特征代表一個w,若得到的w系數等於或接近0,則說明這些特征不重要。
LinearSVC
參數C控制特征系數稀疏度,C的值越小,選擇的特征數越少。
from sklearn.svm import LinearSVC
X_new=LinearSVC(C=0.01,penalty=”l1”,dual=False).fit_transform(x,y)
決策樹特征選取
通過決策樹可以計算特征的重要性,拋棄不太重要的特性。
from sklearn.ensemble import ExtraTreesClassifier
clf=ExtraTreesClassifier()
X_new=clf.fit(x,y).transform(x)
//各個特征重要性
print(clf.feature_importances)
sklearn分類數據
sklearn.datasets.make_classification用來隨機產生一個多分類問題。
n_features=n_informative+n_redundant+n_repeated。
n_clusters_per_class 每個分類的集群數
import sklearn.datasets
(x,y)=make_classification(n_samples=,
n_features=,
n_informative=,
n_redundant=,
n_repeated=,
n_classes=,
random_state=,
shuffle=False
)



