総合学習 - 戦略とスタッキングの組み合わせ

統合された学習は、一緒に複数の分類器を組み合わせて、この記事をまとめるために、異なる組み合わせで異なる戦略を学ぶ統合する方法です。

 

平均法

の数値出力、平均法は、リターンの問題に取り組むための最も一般的な戦略です。

単純な平均法

    [H(X)は、出力グループ学習を表します]

 

加重平均

    [WをW、重量ベースの学習の重みである> 0}

 

権利ベースの学習は、一般的にデータを取得するために、ウェイトトレーニングに基づいており、それは学習の大規模な統合のために、完全に信頼できるものではありません、オーバーフィッティングが発生する可能性があるので、加重平均は、必ずしも単純平均よりも良いではありません。

一般的に、グループ学習性能差で単純平均を選択し、同様のベース学習のパフォーマンスで、加重平均を選択し、大規模です。

 

投票法

分類問題長さNのベクトルと、N個のクラスが存在すると仮定すると、分類出力を解きます

 

絶対多数決

50%以上に最も多くの票の投票とカテゴリは、そうでない場合は予測することが減少しました

Tは、集団学習機の数を表し、jはカテゴリを表し、Nは、カテゴリの数を表します

 

この方法は良い仕組みですが、結果が予測できないことが学習課題に高い精度を必要とする、予測することを拒否するためのオプションを提供します

 

多数決

50%以上を必要とせずに最も多くの票

場合に得票数が同じには、ランダムに選択されました。

 

加重投票方法

wは> 0 wは、重量で

 

分類器出力の2種類があります。

  • クラスラベル:直接出力ラベルのような{1,0}
  • クラス確率:出力のカテゴリに属する​​確率

1.出力の異なる種類を混合することができません。

出力カテゴリ分類の信頼を出力しながら2.いくつかの分類器はまた、確率的信頼のクラスとして使用することができます。

3.確率分類器の推定値は、一般的にあまり正確であるが、が、クラス確率のために、多くの場合、クラスラベルに結合するよりも良好な結合です

4.直接比較することはできない学習グループ、クラス確率値の異なるタイプの場合、この時間は、最初のクラス確率クラスのタグに変換され、次いで、結合しました

 

ラーニング

ときにトレーニングデータの多くは、「学習」と呼ばれる、より強力な戦略の組み合わせは、それが学習者によって合成される、この方法は、スタッキングと呼ばれています。

ここでのグループ学習と呼ばれている主な学習者の学習者が組み合わせると呼ばれ、二次学習者

 

主な学習者を訓練するために設定された初期データを開始スタッキング、一次調査の出力は、二次的学習者を訓練するために使用される新しいデータセットに統合しました。

主な学習が異なることに注意してください。

 

次のようなアルゴリズムがあります

注意を払います

二次訓練D「が一次学習者Hであり、T(X I)が生成され、もしX Iと、一次学習者HトレーニングTのオーバーフィッティング引き起こす可能性があるように、データを。

それは一般的に、クロスバリデーションの方法を採用し、または複数のデータセットを生成残しています。

学習者のプライマリを訓練するために使用されるクロスバリデーション、K-1の部分、D「を生成するための残りの1つ。

 

グレート入力二学習者の学習モデルと、研究によると、スタック上の二次的影響の学習への二次応答が優れているとして、マルチ線形回帰で、入力二学習者としてクラス確率を

 

サンプルコード

インポートのCSV
 インポートランダム
 インポートのNPとしてnumpyの
 インポートPLTとしてmatplotlib.pyplot
 から sklearn.cross_validationのインポートStratifiedKFold
 から sklearn.linear_model インポートロジスティック回帰
 から sklearn.preprocessing インポートLabelEncoderを
 から sklearnのインポートメトリック
 から sklearn.ensemble インポート、ExtraTreesClassifier、GradientBoostingClassifier RandomForestClassifier

デフ(データ)を実行します。
    X = np.array([I [ - 1] のための I におけるデータ]、DTYPE = フロート)
    Y = np.array([I [-1] のための I におけるデータ])
    
    私たちは、数値に文字列の出力を変換する必要が 
    label_encoder = LabelEncoder()
    label_encoder.fit(Y)
    Y = label_encoder.transform(Y)
    
    DEV SETはすべてのトレーニングと検証の目的のために使用されます
    TEST SETが訓練のために使用されることはありません、それは目に見えないセットです。
    dev_cutoff = LEN(Y)* 4/5 
    X_dev = X [:dev_cutoff]
    Y_dev = Y [:dev_cutoff]
    X_test =のX [dev_cutoff:]
    Y_test = Y [dev_cutoff:]
    
    n_trees = 10 
    n_folds = 5
    
    私たちのレベル0の分類の 
    CLFSの= [
        RandomForestClassifier(n_estimatorsの =のn_trees、基準= ' ジニ' )、
        ExtraTreesClassifier(n_estimatorsの =のn_trees * 2、基準= ' ジニ' )、
        GradientBoostingClassifier(n_estimatorsの =のn_trees)
    ]
    
    相互検証のための準備 
    SKF = リスト(StratifiedKFold(Y_dev、n_folds))
    
    #は、事前に割り当てるデータ 
    blend_train = np.zeros((X_dev.shape [0]、lenの(CLFS))) 分類器の訓練データx個の数 
    blend_test = np.zeros((X_test.shape [0]、LEN (CLFS)))#1 分類の試験データx個の数
    
    印刷 ' X_test.shape =%S '(STR(X_test.shape))
     印刷 ' blend_train.shape =%S '(STR(blend_train.shape))
     印刷 ' blend_test.shape =%S '(STR(blend_test 。形状))
    
    各分類器のために、我々は倍の時間(= LEN(SKF))の数を訓練
    するために CLF、J :列挙(CLFS)
         印刷 ' トレーニング分類器[%s]は'(J)
        blend_test_j = np.zeros((X_test.shape [0]、LEN(SKF))) 折り目のテストデータx数の数、我々は後の予測の平均を取る
        ために、I(train_index、cv_index)(列挙SKF):
             印刷 ' 折り[%のS] '(I)
            
            これは訓練と検証セットです 
            X_train = X_dev [train_index]
            Y_train = Y_dev [train_index]
            X_cv = X_dev [cv_index]
            Y_cv = Y_dev [cv_index]
            
            clf.fit(X_train、Y_train)
            
            この出力は、我々のブレンド分類器に対して訓練するための基礎になります
            また、我々の分類器の出力である 
            blend_train [cv_index、J = clf.predict(X_cv)
            blend_test_j [:, i]は = clf.predict(X_test)
        、クロスバリデーションの予測の平均値を取る設定 
        blend_test [:, J] = blend_test_j.mean(1 
    
    印刷 ' Y_dev.shape =%S '(Y_dev.shape)
    
    ブレンドスタート!
    bclf = ロジスティック回帰()
    bclf.fit(blend_train、Y_dev)
    
    今予測 
    Y_test_predict = bclf.predict(blend_testを)
    スコア = metrics.accuracy_score(Y_test、Y_test_predict)
     印刷 ' 精度=%S '(スコア)
    
    リターン・スコア

もし __name__ == ' __main__ ' 
    train_file = ' データ/ column_3C.dat '

    データ = [I  I  csv.reader(ファイル(train_file、' RB ')、デリミタ= '  ' )]
    データ =データ[1] 削除ヘッダ
    
    best_score = 0.0
    
    #は、それは非常に安定していないですが、より良い結果を得るために多くの時間を実行します。
    以下のためのはxrange(1 ):
         印刷 ' 反復[%のS] '(I)
        random.shuffle(データ)
        スコア = ラン(データ)
        best_score = MAX(best_score、スコア)
         印刷
        
    印刷 ' ベストスコア=%sの'%(best_score)

参照目的のみ。

 

 

 

参考文献:

「機械学習」ズハウ・ジワ

おすすめ

転載: www.cnblogs.com/yanshw/p/11112712.html