1、集成学习
在面临选择的时候需要作出决策,这时候你就会去询问不同的人该做怎样的决断,最后将询问后的决策进行投票,选择投票个数最多的那个。对同一个问题,可以有不同的算法,也会给出不同的结果,在这种情况下,可以集成不同的算法,少数服从多数,选择结果数最多的那类算法。
下面是用逻辑回归、SVM、决策树三种算法进行的集成学习过程
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
x,y=datasets.make_moons(n_samples=500,noise=0.3,random_state=42)
plt.scatter(x[y==0,0],x[y==0,1])
plt.scatter(x[y==1,0],x[y==1,1])
plt.show()
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=42)
#使用逻辑回归
from sklearn.linear_model import LogisticRegression
log_clf=LogisticRegression()
log_clf.fit(x_train,y_train)
print(log_clf.score(x_test,y_test))
#使用SVM
from sklearn.svm import SVC
svm_clf=SVC()
svm_clf.fit(x_train,y_train)
print(svm_clf.score(x_test,y_test))
#使用决策树
from sklearn.tree import DecisionTreeClassifier
dt_tree=DecisionTreeClassifier()
dt_tree.fit(x_train,y_train)
print(dt_tree.score(x_test,y_test))
#进行投票
y_predict1=log_clf.predict(x_test)
y_predict2=svm_clf.predict(x_test)
y_predict3=dt_tree.predict(x_test)
#如果三个值相加大于等于2,说明至少有两个模型的结果是1,那就定为1
y_predict=np.array((y_predict1+y_predict2+y_predict3)>=2,dtype='int')
print(y_predict[:10])
from sklearn.metrics import accuracy_score
print(accuracy_score(y_test,y_predict))
0.864
0.888
0.872
[1 0 0 1 1 1 0 0 0 0]
0.896
可以看出通过集成学习得到的准确度是大于其中任意一个算法的。
(1)Hard Voting,少数服从多数
当然也可以使用sklearn中的集成算法VotingClassifier
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
x,y=datasets.make_moons(n_samples=500,noise=0.3,random_state=42)
plt.scatter(x[y==0,0],x[y==0,1])
plt.scatter(x[y==1,0],x[y==1,1])
plt.show()
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=666)
#载入三种算法
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier
#传入多个估计器(算法),元祖形式
from sklearn.ensemble import VotingClassifier
voting_clf=VotingClassifier(estimators=[
("log_clf",LogisticRegression()),
("svm_clf",SVC()),
("dt_clf",DecisionTreeClassifier())
],voting='hard')
voting_clf.fit(x_train,y_tra