本文**於網路
# 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三個型...
資料探勘演算法 整合學習演算法
簡介 整合學習,通過將多個單個的學習器整合在一起,使它們共同完成學習任務,也被稱為 多分類系統 其思想是使用一些不同的方法改變原始訓練樣本的分布,從而構建多個不同的分類器,並將這些分類器線性組合得到乙個更強大的分類器,來做最後的決策。整合模型是一種能在各種機器學習任務上提高準確率的強有力技術,整合演...
機器學習演算法之整合學習
在機器學習問題中,對於乙個複雜的任務來說,能否將很多的機器學習演算法組合在一起,這樣計算出來的結果會不會比使用單一的演算法效能更好?這樣的思路就是整合學習方法。三個臭皮匠,頂個諸葛亮。實際操作中,整合學習把大大小小的多種演算法融合在一起,共同協作來解決乙個問題。這些演算法可以是不同的演算法,也可以是...