数据:卫星数据集
学习器:随机森林、逻辑回归、支持向量机、投票分类器
from sklearn.datasets import make_moons # 卫星数据集
from sklearn.ensemble import VotingClassifier # 分类投票器
from sklearn.ensemble import RandomForestClassifier # 随机森林分类器
from sklearn.linear_model import LogisticRegression # 逻辑回归
from sklearn.svm import SVC # 支持向量机
from sklearn.model_selection import train_test_split
x,y = make_moons(n_samples=2000,noise=0.40) # 生成卫星数量集,noise:添加到数据中的高斯噪声的标准偏差
x_train,x_test,y_train,y_test = train_test_split(x, y, test_size=0.2, random_state=1)
# 构建学习器
rnd_clf = RandomForestClassifier()
log_clf = LogisticRegression()
svm_clf = SVC()
# 集成到分类投票器
voting_clf = VotingClassifier(estimators=[('l',log_clf),('r',rnd_clf),('svc', svm_clf)], voting='hard')
# 测试每个分类器上的精度
from sklearn.metrics import accuracy_score
# 比较四个分类器的精度
for clf in (rnd_clf, log_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))
硬分类结果
RandomForestClassifier 0.835 LogisticRegression 0.8325 SVC 0.865 VotingClassifier 0.865
# 构建学习器
rnd_clf1 = RandomForestClassifier()
log_clf1 = LogisticRegression()
svm_clf1 = SVC(probability=True) # 默认情况下,SVC类不会估算类别的概率,应将probalitity设为True(会使用交叉验证来估算类别概率)
# 集成到分类投票器
voting_clf1 = VotingClassifier(estimators=[('l',log_clf1),('r',rnd_clf1),('svc', svm_clf1)], voting='soft')
# 比较四个分类器的精度
for clf in (rnd_clf1, log_clf1, svm_clf1, voting_clf1):
clf.fit(x_train,y_train)
y_pred = clf.predict(x_test)
print(clf.__class__.__name__, accuracy_score(y_test, y_pred))
软分类结果
RandomForestClassifier 0.8425 LogisticRegression 0.8325 SVC 0.865 VotingClassifier 0.8725
结果分析:
将硬分类转换为软分类,分类投票器的性能有所提升。至于随机森林的变化,是基于其随机的特点而发生变化。