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


在这里插入图片描述

💨💨💨💨
个人简介:

💦💦💦简介:大三在读,分享一些学习笔记和心得体会
💞💞💞兴趣领域: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()


在这里插入图片描述

可视化结果:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

以下是使用adaboost算法乳腺癌数据进行分类可视化的Python实现。代码中使用sklearn库中的AdaBoostClassifier和Breast Cancer Wisconsin (Diagnostic) 数据集。 首先,导入必要的库和数据集: ```python import numpy as np import matplotlib.pyplot as plt from sklearn.ensemble import AdaBoostClassifier from sklearn.datasets import load_breast_cancer # 加载数据集 data = load_breast_cancer() X = data.data y = data.target ``` 然后,将数据集分为训练集和测试集: ```python # 将数据集分为训练集和测试集 split = int(0.7 * len(X)) X_train, y_train = X[:split], y[:split] X_test, y_test = X[split:], y[split:] ``` 接下来,使用AdaBoostClassifier进行训练和预测: ```python # 使用AdaBoostClassifier进行训练和预测 classifier = AdaBoostClassifier() classifier.fit(X_train, y_train) predictions = classifier.predict(X_test) ``` 最后,使用matplotlib库进行可视化: ```python # 绘制决策边界 plt.figure(figsize=(10, 6)) x_min, x_max = X[:, 0].min() - 0.5, X[:, 0].max() + 0.5 y_min, y_max = X[:, 1].min() - 0.5, X[:, 1].max() + 0.5 xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02), np.arange(y_min, y_max, 0.02)) Z = classifier.predict(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) plt.contourf(xx, yy, Z, cmap=plt.cm.Spectral, alpha=0.8) # 绘制训练集和测试集 plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=plt.cm.Spectral) plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=plt.cm.Spectral, alpha=0.5) plt.xlabel('Feature 1') plt.ylabel('Feature 2') plt.title('AdaBoost Classifier') plt.show() ``` 运行完整的代码后,将会输出一张决策边界的可视化图像,其中红色点表示恶性肿瘤,蓝色点表示良性肿瘤,可以清楚地看到AdaBoost算法乳腺癌数据进行了有效的分类。 完整代码如下: ```python import numpy as np import matplotlib.pyplot as plt from sklearn.ensemble import AdaBoostClassifier from sklearn.datasets import load_breast_cancer # 加载数据集 data = load_breast_cancer() X = data.data y = data.target # 将数据集分为训练集和测试集 split = int(0.7 * len(X)) X_train, y_train = X[:split], y[:split] X_test, y_test = X[split:], y[split:] # 使用AdaBoostClassifier进行训练和预测 classifier = AdaBoostClassifier() classifier.fit(X_train, y_train) predictions = classifier.predict(X_test) # 绘制决策边界 plt.figure(figsize=(10, 6)) x_min, x_max = X[:, 0].min() - 0.5, X[:, 0].max() + 0.5 y_min, y_max = X[:, 1].min() - 0.5, X[:, 1].max() + 0.5 xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02), np.arange(y_min, y_max, 0.02)) Z = classifier.predict(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) plt.contourf(xx, yy, Z, cmap=plt.cm.Spectral, alpha=0.8) # 绘制训练集和测试集 plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=plt.cm.Spectral) plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=plt.cm.Spectral, alpha=0.5) plt.xlabel('Feature 1') plt.ylabel('Feature 2') plt.title('AdaBoost Classifier') plt.show() ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南蓬幽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值