この記事では、[Python](https://www.zalou.cn/tag/python)によって実装される特徴抽出操作について説明します。次のように、参照用にあなたと共有してください:
# - *- coding: utf-8-*-"""
Created on Mon Aug 2110:57:292017
@ author:フローティングハート
"""
# フィルタリングされた機能の選択
# 差異に基づいて選択します。差異が小さいほど、属性を認識する能力が低下し、排除できます。
from sklearn.feature_selection import VarianceThreshold
x=[[100,1,2,3],[100,4,5,6],[100,7,8,9],[101,11,12,13]]
selector=VarianceThreshold(1) #分散しきい値、
selector.fit(x)
selector.variances_ #属性の分散を表示する
selector.transform(x)#機能の選択
selector.get_support(True) #結果を選択した後、機能の前のインデックス
selector.inverse_transform(selector.transform(x)) #機能選択の結果を元のデータに復元します
# 削除されたデータ、0として表示
# 単変量機能の選択
from sklearn.feature_selection import SelectKBest,f_classif
x=[[1,2,3,4,5],[5,4,3,2,1],[3,3,3,3,3],[1,1,1,1,1]]
y=[0,1,0,1]
selector=SelectKBest(score_func=f_classif,k=3)#3つの機能を選択すると、インジケーターは分散分析F値を使用します
selector.fit(x,y)
selector.scores_ #各機能のスコア
selector.pvalues_
selector.get_support(True) #trueの場合、選択した機能インデックスを返し、Falseを選択した場合は、
# 返されるのはブール値の配列であり、配列は選択された機能のみです
selector.transform(x)
# ラッピング時の機能選択
from sklearn.feature_selection import RFE
from sklearn.svm import LinearSVC #評価アルゴリズムとしてsvmを選択します
from sklearn.datasets import load_iris #データセットをロードする
iris=load_iris()
x=iris.data
y=iris.target
estimator=LinearSVC()
selector=RFE(estimator=estimator,n_features_to_select=2) #2つの機能を選択してください
selector.fit(x,y)
selector.n_features_ #選択した機能の数を指定します
selector.support_ #選択した機能のマスクを提供します
selector.ranking_ #機能のランク付け、選択した機能は1にランク付けされます
# 注:特徴の抽出は、必ずしも予測パフォーマンスの向上に関連しているとは限りません。
from sklearn.feature_selection import RFE
from sklearn.svm import LinearSVC
from sklearn import cross_validation
from sklearn.datasets import load_iris
# データのダウンロード
iris=load_iris()
X=iris.data
y=iris.target
# 特徴抽出
estimator=LinearSVC()
selector=RFE(estimator=estimator,n_features_to_select=2)
X_t=selector.fit_transform(X,y)
# テストセットと検証セットを分割
x_train,x_test,y_train,y_test=cross_validation.train_test_split(X,y,
test_size=0.25,random_state=0,stratify=y)
x_train_t,x_test_t,y_train_t,y_test_t=cross_validation.train_test_split(X_t,y,
test_size=0.25,random_state=0,stratify=y)
clf=LinearSVC()
clf_t=LinearSVC()
clf.fit(x_train,y_train)
clf_t.fit(x_train_t,y_train_t)print('origin dataset test score:',clf.score(x_test,y_test))
# origin dataset test score:0.973684210526print('selected Dataset:test score:',clf_t.score(x_test_t,y_test_t))
# selected Dataset:test score:0.947368421053import numpy as np
from sklearn.feature_selection import RFECV
from sklearn.svm import LinearSVC
from sklearn.datasets import load_iris
iris=load_iris()
x=iris.data
y=iris.target
estimator=LinearSVC()
selector=RFECV(estimator=estimator,cv=3)
selector.fit(x,y)
selector.n_features_
selector.support_
selector.ranking_
selector.grid_scores_
# 埋め込み機能の選択
import numpy as np
from sklearn.feature_selection import SelectFromModel
from sklearn.svm import LinearSVC
from sklearn.datasets import load_digits
digits=load_digits()
x=digits.data
y=digits.target
estimator=LinearSVC(penalty='l1',dual=False)
selector=SelectFromModel(estimator=estimator,threshold='mean')
selector.fit(x,y)
selector.transform(x)
selector.threshold_
selector.get_support(indices=True)
# scikitlearnは、パイプラインを形成する複数の学習者について話すためのパイプラインを提供します。通常はパイプラインの形式です。データの標準化、
#- - 》特徴抽出学習者—————— "最後の学習者の後を除いて、予測を実行する学習者、
# これまでのすべての学習者は、データ変換(正規化、正規化、正規化など)に使用される変換メソッドを提供する必要があります。
# そして特徴抽出
# 学習者パイプライン(パイプライン)
from sklearn.svm import LinearSVC
from sklearn.datasets import load_digits
from sklearn import cross_validation
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
def test_Pipeline(data):
x_train,x_test,y_train,y_test=data
steps=[('linear_svm',LinearSVC(C=1,penalty='l1',dual=False)),('logisticregression',LogisticRegression(C=1))]
pipeline=Pipeline(steps)
pipeline.fit(x_train,y_train)print('named steps',pipeline.named_steps)print('pipeline score',pipeline.score(x_test,y_test))if __name__=='__main__':
data=load_digits()
x=data.data
y=data.target
test_Pipeline(cross_validation.train_test_split(x,y,test_size=0.25,
random_state=0,stratify=y))
[Python](https://www.zalou.cn/tag/python)関連のコンテンツに興味のある読者は、このサイトのトピックを確認できます: "[Python](https://www.zalou.cn/tag/python)データ構造と[アルゴリズム](https://www.zalou.cn/tag/suanfa)[チュートリアル](https://www.zalou.cn/tag/jiaocheng)"、 "[Python]( https://www.zalou.cn/tag/python)コーディング操作スキルの概要」、「[Python](https://www.zalou.cn/tag/python)[関数](https://www.zalou.cn/tag/hanshu)使用スキルの概要」、「[Python](https://www.zalou.cn/tag/python)[文字列](https://www.zalou.cn/tag/zifuchuan)操作スキルの概要」および「[Python]( https://www.zalou.cn/tag/python)入門および高度なクラシック[チュートリアル](https://www.zalou.cn/tag/jiaocheng)」
この記事が[Python](https://www.zalou.cn/tag/python)[プログラム](https://www.zalou.cn/tag/chengxu)の設計に役立つことを願っています。
Recommended Posts