机器学习之使用sklearn的随机森林算法对样本数据进行分类,使用sklearn的AdaBoost和GradientBoost对乳腺癌数据进行分类可视化呈现

有时候,不是因为你没有能力,也不是因为你缺少勇气,只是因为你付出的努力还太少,所以,成功便不会走向你。而你所需要做的,就是坚定你的梦想,你的目标,你的未来,然后以不达目的誓不罢休的那股劲,去付出你的努力,成功就会慢慢向你靠近。

导读:本篇文章讲解 机器学习之使用sklearn的随机森林算法对样本数据进行分类,使用sklearn的AdaBoost和GradientBoost对乳腺癌数据进行分类可视化呈现,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文


在这里插入图片描述

💨💨💨💨
个人简介:

💦💦💦简介:大三在读,分享一些学习笔记和心得体会
💞💞💞兴趣领域:Python,人工智能,算法和数据结构
👁‍🗨👁‍🗨👁‍🗨格言:逆水行舟,不进则退!
✅✅✅目的:一起进步!
哈喽!大家好呀😁😁我是【南蓬幽】,也可以叫我小幽,小友,小呦等等
如果有不对的地方,欢迎大家指正另外如果觉得不错的话请三连支持一下博主呦💖💖💖
在这里插入图片描述
🎉🎉🎉🎉🎉🎊🎊欢迎大佬们呀🎊🎊🎉🎉🎉🎉🎉🎉

🥇🥇🥇1.使用sklearn的随机森林算法对样本数据进行分类,要求:

🥈🥈🥈(1) 导入乳腺癌数据集

# 首先导入内置数据集模块
from sklearn.datasets import load_breast_cancer
# 然后导入乳腺癌数据集
cancer = load_breast_cancer()

🏆🏆🏆(2) 对比随机森林算法和决策树的分类效果;

# 定义一个决策树分类器对象用于做比较
dt = DecisionTreeClassifier(random_state=0)
# 定义一个随机森林分类器对象
rf = RandomForestClassifier(random_state=0)
dt.fit(x_train,y_train)
rf.fit(x_train,y_train)
score_dt = dt.score(x_test,y_test)
score_rf = rf.score(x_test,y_test)

使用cross_val_score进行交叉验证,其中:
cv为份数,即将数据集划分为n分,依次取每一份做测试集,其他n-1份做训练集,
#返回每次测试准确率评分的列表

for i in range(10):
    rf_score = cross_val_score(RandomForestClassifier(n_estimators=25), cancer.data,
                               cancer.target, cv=10).mean()
    rf_scores.append(rf_score)
    dt_score = cross_val_score(DecisionTreeClassifier(), cancer.data, cancer.target, cv=10).mean()
    dt_scores.append(dt_score)

🏀🏀🏀(3) 测试弱分类器个数n_estimators对分类精度的影响。

rf_scores = []
for i in range(1,50):
    rf = RandomForestClassifier(n_estimators=i)
    rf_score = cross_val_score(rf, cancer.data, cancer.target, cv=10).mean()
    rf_scores.append(rf_score)

完整代码:

# 导入内置数据集模块
from sklearn.datasets import load_breast_cancer
# 导入sklearn模块中的决策树分类器类和随机森林分类器类
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
# 导入sklearn模块中的模型验证类
from sklearn.model_selection import train_test_split,cross_val_score
import matplotlib.pyplot as plt
# 导入乳腺癌数据集
cancer = load_breast_cancer()
# 使用train_test_split函数自动分割训练集与测试集,其中test_size为测试集所占比例
x_train, x_test, y_train, y_test = train_test_split(cancer.data,cancer.target,test_size=0.3)
# 定义一个决策树分类器对象用于做比较
dt = DecisionTreeClassifier(random_state=0)
# 定义一个随机森林分类器对象
rf = RandomForestClassifier(random_state=0)
dt.fit(x_train,y_train)
rf.fit(x_train,y_train)
score_dt = dt.score(x_test,y_test)
score_rf = rf.score(x_test,y_test)
# 输出准确率
print('Single Tree : ', score_dt)
print('Random Forest : ', score_rf)
dt_scores = []
rf_scores = []
# 使用cross_val_score进行交叉验证,其中:
# cv为份数,即将数据集划分为n分,依次取每一份做测试集,其他n-1份做训练集,
# 返回每次测试准确率评分的列表
for i in range(10):
    rf_score = cross_val_score(RandomForestClassifier(n_estimators=25), cancer.data,
                               cancer.target, cv=10).mean()
    rf_scores.append(rf_score)
    dt_score = cross_val_score(DecisionTreeClassifier(), cancer.data, cancer.target, cv=10).mean()
    dt_scores.append(dt_score)

# 绘制评分对比曲线
plt.figure()
plt.title('Random Forest VS Decision Tree')
plt.xlabel('Index')
plt.ylabel('Accuracy')
plt.plot(range(10),rf_scores,label = 'Random Forest')
plt.plot(range(10),dt_scores,label = 'Decision Tree')
plt.legend()
plt.show()
# 观察弱分类器数量对分类准确度的影响
rf_scores = []
for i in range(1,50):
    rf = RandomForestClassifier(n_estimators=i)
    rf_score = cross_val_score(rf, cancer.data, cancer.target, cv=10).mean()
    rf_scores.append(rf_score)

plt.figure()
plt.title('Random Forest')
plt.xlabel('n_estimators')
plt.ylabel('Accuracy')
plt.plot(range(1,50),rf_scores)
plt.show()

在这里插入图片描述

可视化结果:

在这里插入图片描述
在这里插入图片描述

⚽⚽⚽⚽2.使用sklearn的AdaBoost和GradientBoost对乳腺癌数据进行分类,要求:

两个方法相同,一个为例

🎖🎖🎖(1) 导入乳腺癌数据集

# 首先导入内置数据集模块
from sklearn.datasets import load_breast_cancer
# 然后导入乳腺癌数据集
cancer = load_breast_cancer()

🎲🎲🎰(2) 测试learning_rate参数对分类效果的影响;

# 测试learning_rate参数对分类效果的影响
abc_scores = []
for i in np.arange(0.1,1,0.05):
    abc.learning_rate = i
    abc.fit(x_train, y_train)
    abc_score = abc.score(x_test, y_test)
    abc_scores.append(abc_score)

👓👓🕶(3) 测试n_estimators参数对分类效果的影响。

# 测试n_estimators参数对分类效果的影响
abc_scores = []
for i in range(1,50):
    abc.estimators_ = i
    abc.fit(x_train, y_train)
    abc_score = abc.score(x_test, y_test)
    abc_scores.append(abc_score)

完整代码:

1.AdaBoost

from sklearn.datasets import load_breast_cancer
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import AdaBoostClassifier
from sklearn.model_selection import train_test_split,cross_val_score
import matplotlib.pyplot as plt
import numpy as np
cancer = load_breast_cancer()
x_train, x_test, y_train, y_test = train_test_split(cancer.data,cancer.target, test_size=0.3,random_state=1)
dt = DecisionTreeClassifier()
abc = AdaBoostClassifier(DecisionTreeClassifier(), algorithm='SAMME.R', n_estimators=20,learning_rate=0.1)
abc.fit(x_train,y_train)
dt.fit(x_train,y_train)
score_abc = abc.score(x_test,y_test)
score_dt = dt.score(x_test,y_test)
# 输出准确率
print('Ada Boost : ', score_abc)
print('Decision Tree : ', score_dt)
# 测试learning_rate参数对分类效果的影响
abc_scores = []
for i in np.arange(0.1,1,0.05):
    abc.learning_rate = i
    abc.fit(x_train, y_train)
    abc_score = abc.score(x_test, y_test)
    abc_scores.append(abc_score)

# 绘制测试结果
plt.figure()
plt.title('AdaBoost')
plt.xlabel('learning_rate')
plt.ylabel('Accuracy')
plt.plot(range(len(abc_scores)),abc_scores)
plt.show()
# 测试n_estimators参数对分类效果的影响
abc_scores = []
for i in range(1,50):
    abc.estimators_ = i
    abc.fit(x_train, y_train)
    abc_score = abc.score(x_test, y_test)
    abc_scores.append(abc_score)

# 绘制结果
plt.figure()
plt.title('AdaBoost')
plt.xlabel('n_estimators')
plt.ylabel('Accuracy')
plt.plot(range(1,50),abc_scores)
plt.show()
# 使用cross_val_score进行交叉验证
abc_scores = []
dt_scores = []
for i in range(20):
    abc_score = cross_val_score(abc, cancer.data, cancer.target, cv=10).mean()
    abc_scores.append(abc_score)
    dt_score = cross_val_score(dt, cancer.data, cancer.target, cv=10).mean()
    dt_scores.append(dt_score)

# 绘制评分对比曲线
plt.figure()
plt.title('AdaBoost VS Decision Tree')
plt.xlabel('Index')
plt.ylabel('Accuracy')
plt.plot(range(20),dt_scores,label = 'Decision Tree')
plt.plot(range(20),abc_scores,label = 'AdaBoost')
plt.legend()
plt.show()


在这里插入图片描述

可视化结果:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.Gradient Boost

from sklearn.datasets import load_breast_cancer
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.model_selection import train_test_split,cross_val_score
import matplotlib.pyplot as plt
import numpy as np
cancer = load_breast_cancer()
x_train, x_test, y_train, y_test = train_test_split(cancer.data,cancer.target,test_size=0.3,random_state=1)
gbc = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1)
dt = DecisionTreeClassifier()
gbc.fit(x_train,y_train)
dt.fit(x_train,y_train)
score_gbc = gbc.score(x_test,y_test)
score_dt = dt.score(x_test,y_test)
# 输出准确率
print('Gradient Boost : ', score_gbc)
print('Decision Tree : ', score_dt)
# 测试learning_rate参数对分类效果的影响
gbc_scores = []
for i in np.arange(0.1,1,0.05):
    gbc.learning_rate = i
    gbc.fit(x_train, y_train)
    gbc_score = gbc.score(x_test, y_test)
    gbc_scores.append(gbc_score)

# 绘制测试结果
plt.figure()
plt.title('Gradient Boost')
plt.xlabel('learning_rate')
plt.ylabel('Accuracy')
plt.plot(range(len(gbc_scores)),gbc_scores)
plt.show()


# 测试n_estimators参数对分类效果的影响
gbc_scores = []
for i in range(1,50):
    gbc.estimators_ = i
    gbc.fit(x_train, y_train)
    gbc_score = gbc.score(x_test, y_test)
    gbc_scores.append(gbc_score)

# 绘制结果
plt.figure()
plt.title('Gradient Boost')
plt.xlabel('n_estimators')
plt.ylabel('Accuracy')
plt.plot(range(1,50),gbc_scores)
plt.show()

gbc_scores = []
dt_scores = []
# 使用cross_val_score进行交叉验证
for i in range(20):
    gbc_score = cross_val_score(gbc, cancer.data, cancer.target, cv=10).mean()
    gbc_scores.append(gbc_score)
    dt_score = cross_val_score(dt, cancer.data, cancer.target, cv=10).mean()
    dt_scores.append(dt_score)

# 绘制评分对比曲线
plt.figure()
plt.title('Gradient Boost VS Decision Tree')
plt.xlabel('Index')
plt.ylabel('Accuracy')
plt.plot(range(20),dt_scores,label = 'Decision Tree')
plt.plot(range(20),gbc_scores,label = 'Gradient Boost')
plt.legend()
plt.show()


在这里插入图片描述

可视化结果:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/147437.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!