使用AdaBoost方法进行二元分类

版权声明:欢迎转载~ 转载请注明来源及作者,谢谢! https://blog.csdn.net/qq_42442369/article/details/86729971
#导入模块
import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import  AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import  make_gaussian_quantiles

#生成随机数据集
X1,y1 = make_gaussian_quantiles(
    cov=2.0,
    n_samples=500,
    n_features=2,
    n_classes=2,
    random_state=1
)
X2,y2 = make_gaussian_quantiles(
    mean=(3,3),
    cov=1.5,
    n_samples=400,
    n_features=2,
    n_classes=2,
    random_state=1
)
X = np.concatenate((X1,X2))
y = np.concatenate((y1,-y2+1))

#绘制散点图,将数据可视化
plt.scatter(X[:,0],X[:,1],marker='o',c=y)
plt.show()

#建立AdaBoost分类器
# bdt = AdaBoostClassifier(
#     DecisionTreeClassifier(max_depth=2,min_samples_split=20,min_samples_leaf=5),
#     algorithm='SAMME',
#     n_estimators=200,
#     learning_rate=0.8
# )0.9133333333333333


# bdt = AdaBoostClassifier(
#     DecisionTreeClassifier(max_depth=2,min_samples_split=20,min_samples_leaf=5),
#     algorithm='SAMME',
#     n_estimators=300,
#     learning_rate=0.8
# )0.9622222222222222


# bdt = AdaBoostClassifier(
#     DecisionTreeClassifier(max_depth=2,min_samples_split=20,min_samples_leaf=5),
#     algorithm='SAMME',
#     n_estimators=300,
#     learning_rate=0.5
# )0.8944444444444445


bdt = AdaBoostClassifier(
    DecisionTreeClassifier(max_depth=2,min_samples_split=20,min_samples_leaf=5),
    algorithm='SAMME',
    n_estimators=600,
    learning_rate=0.7
)#0.9611111111111111



#训练
bdt.fit(X,y)
#生成网格图查看拟合区域
x_min,x_max = X[:,0].min()-1,X[:,0].max()+1
y_min,y_max = X[:,1].min()-1,X[:,1].max()+1
xx,yy = np.meshgrid(np.arange(x_min,x_max,0.02),np.arange(y_min,y_max,0.02))
Z = bdt.predict(np.c_[xx.ravel(),yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contour(xx,yy,Z,cmap=plt.cm.Paired)
plt.scatter(X[:,0],X[:,1],marker='o',c=y)
plt.show()

#查看AdaBoost方法的分类精度
print(bdt.score(X,y))

猜你喜欢

转载自blog.csdn.net/qq_42442369/article/details/86729971
今日推荐