ipynb文件见:https://github.com/824024445/Machine-learning-notes/blob/master/7集成学习和随机森林.ipynb
《Sklearn与TensorFlow机器学习实用指南》学习笔记
一、集成学习
集成学习就是合并多个分类器的预测。
一般会在一个项目快结束的时候使用集成算法,一旦建立了一些好的分类器,就可以使用集成把它们合并成一个更好的分类器。
著名的集成方法:投票分类、bogging、pasting、boosting、stacking、和一些其它算法。
1.1 投票分类(少数服从多数)
令人惊奇的是这种投票分类器得出的结果经常会比集成中最好的一个分类器结果更好。
事实上,即使每一个分类器都是一个弱学习器(意味着它们也就比瞎猜好点),集成后仍然是一个强学习器(高准确率),只要有足够数量的弱学习者,他们就足够多样化。
如果每一个分类器都在同一个数据集上训练,会导致犯同一种类型的错误。相比较而言,每个分类器在不同的数据集上训练,集成后的结果会更好。
下面使用moons数据集,训练三个分类器,使用集成算法。
from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split
moons = make_moons(noise=0.3, random_state=0)
X, y = moons
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.4, random_state=42)
# print(X_train[10], y_train[0])
[-0.65805008 -0.12944211] 0
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import VotingClassifier #软投票/多数规则分类器
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
log_clf = LogisticRegression()
rnd_clf = RandomForestClassifier()
svm_clf = SVC()
voting_clf = VotingClassifier(estimators=[("lr", log_clf), ("rf", rnd_clf), ("svc", svm_clf)], voting="hard")
#voting:"soft"/"hard"
#硬投票,默认"hrad"。"hard",使用预测的类标签进行多数规则投票。
#软投票,"soft",基于预测概率之和的argmax来预测类别标签,这推荐用于经过良好校准的分类器的集合。
# voting_clf.fit(X_train, y_train)
测一下准确率:
from sklearn.metrics import accuracy_score #分类准确度得分
for clf in (log_clf, rnd_clf, svm_clf, voting_clf):
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
print(clf.__class__.__name__, accuracy_score(y_test, y_pred))
LogisticRegression 0.875
RandomForestClassifier 0.925
SVC 0.95
VotingClassifier 0.95
/usr/local/lib/python3.6/dist-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.
FutureWarning)
/usr/local/lib/python3.6/dist-packages/sklearn/ensemble/forest.py:245: FutureWarning: The default value of n_estimators will change from 10 in version 0.20 to 100 in 0.22.
"10 in version 0.20 to 100 in 0.22.", FutureWarning)
/usr/local/lib/python3.6/dist-packages/sklearn/svm/base.py:193: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.
"avoid this war