整合學習演算法

2021-08-19 08:09:30 字數 2728 閱讀 4427

本文**於網路

# coding=utf8

from sklearn.model_selection import cross_val_score

cross_val_score()

from sklearn import datasets

from sklearn.ensemble import randomforestclassifier, extratreesclassifier, gradientboostingclassifier

from sklearn.model_selection import train_test_split

from sklearn.model_selection import stratifiedkfold

import numpy as np

from sklearn.metrics import roc_auc_score

from sklearn.datasets.samples_generator import make_blobs

'''建立訓練的資料集'''

data, target = make_blobs(n_samples=50000, centers=2, random_state=0, cluster_std=0.60)

'''模型融合中使用到的各個單模型'''

clfs = [randomforestclassifier(n_estimators=5, n_jobs=-1, criterion='gini'),

randomforestclassifier(n_estimators=5, n_jobs=-1, criterion='entropy'),

extratreesclassifier(n_estimators=5, n_jobs=-1, criterion='gini'),

extratreesclassifier(n_estimators=5, n_jobs=-1, criterion='entropy'),

gradientboostingclassifier(learning_rate=0.05, subsample=0.5, max_depth=6, n_estimators=5)]

'''切分一部分資料作為測試集'''

x, x_predict, y, y_predict = train_test_split(data, target, test_size=0.33, random_state=2017)

dataset_blend_train = np.zeros((x.shape[0], len(clfs)))

dataset_blend_test = np.zeros((x_predict.shape[0], len(clfs)))

'''5折stacking'''

n_folds = 5

skf = list(stratifiedkfold(y, n_folds))

for j, clf in enumerate(clfs):

'''依次訓練各個單模型'''

# print(j, clf)

dataset_blend_test_j = np.zeros((x_predict.shape[0], len(skf)))

for i, (train, test) in enumerate(skf):

'''使用第i個部分作為**,剩餘的部分來訓練模型,獲得其**的輸出作為第i部分的新特徵。'''

# print("fold", i)

x_train, y_train, x_test, y_test = x[train], y[train], x[test], y[test]

clf.fit(x_train, y_train)

y_submission = clf.predict_proba(x_test)[:, 1]

dataset_blend_train[test, j] = y_submission

dataset_blend_test_j[:, i] = clf.predict_proba(x_predict)[:, 1]

'''對於測試集,直接用這k個模型的**值均值作為新的特徵。'''

dataset_blend_test[:, j] = dataset_blend_test_j.mean(1)

print("val auc score: %f" % roc_auc_score(y_predict, dataset_blend_test[:, j]))

# clf = logisticregression()

clf = gradientboostingclassifier(learning_rate=0.02, subsample=0.5, max_depth=6, n_estimators=30)

clf.fit(dataset_blend_train, y)

y_submission = clf.predict_proba(dataset_blend_test)[:, 1]

print("linear stretch of predictions to [0,1]")

y_submission = (y_submission - y_submission.min()) / (y_submission.max() - y_submission.min())

print("blend result")

print("val auc score: %f" % (roc_auc_score(y_predict, y_submission)))

整合學習演算法

整合學習,是在各種有監督學習演算法上進行一種或者多種演算法進行 然後通過最高投票選出分類 或者通過平均 或者通過 結果作為新的樣本進行訓練的方法。這樣可以避免單一弱分類器上遇到的各種問題,當然訓練的時間和效能要求也會高些。整合學習演算法可以分為boosting bagging stacking三個型...

資料探勘演算法 整合學習演算法

簡介 整合學習,通過將多個單個的學習器整合在一起,使它們共同完成學習任務,也被稱為 多分類系統 其思想是使用一些不同的方法改變原始訓練樣本的分布,從而構建多個不同的分類器,並將這些分類器線性組合得到乙個更強大的分類器,來做最後的決策。整合模型是一種能在各種機器學習任務上提高準確率的強有力技術,整合演...

機器學習演算法之整合學習

在機器學習問題中,對於乙個複雜的任務來說,能否將很多的機器學習演算法組合在一起,這樣計算出來的結果會不會比使用單一的演算法效能更好?這樣的思路就是整合學習方法。三個臭皮匠,頂個諸葛亮。實際操作中,整合學習把大大小小的多種演算法融合在一起,共同協作來解決乙個問題。這些演算法可以是不同的演算法,也可以是...