我是靠谱客的博主 心灵美橘子,最近开发中收集的这篇文章主要介绍波士顿房价AdaBoost、决策树、KNN预测对比AdaBoost回归模型AdaBoost、决策树回归、KNN预测对比AdaBoost中不同损失函数预测对比,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

波士顿房价AdaBoost、决策树、KNN预测对比

  • AdaBoost回归模型
  • AdaBoost、决策树回归、KNN预测对比
  • AdaBoost中不同损失函数预测对比

AdaBoost回归模型

base_estimator:代表的是弱分类器。在 AdaBoost 的分类器和回归器中都有这个参数,在 AdaBoost 中默认使用的是决策树,一般不需要修改这个参数,当然你也可以指定具体的分类器。
n_estimators:算法的最大迭代次数,也是分类器的个数,每一次迭代都会引入一个新的弱分类器来增加原有的分类器的组合能力。默认是 50。learning_rate:代表学习率,取值在 0-1 之间,默认是 1.0。如果学习率较小,就需要比较多的迭代次数才能收敛。当调整 learning_rate 的时候,往往也需要调整 n_estimators 这个参数。
algorithm:代表我们要采用哪种 boosting 算法,一共有两种选择:SAMME 和 SAMME.R。默认是 SAMME.R。这两者之间的区别在于对弱分类权重的计算方式不同。
random_state:代表随机数种子的设置,默认是 None。随机种子是用来控制随机模式的,当随机种子取了一个值,也就确定了一种随机规则,其他人取这个值可以得到同样的结果。如果不设置随机种子,每次得到的随机数也就不同。
loss :代表损失函数的设置,一共有 3 种选择,分别为 linear、square 和 exponential,它们的含义分别是线性、平方和指数。默认是线性。一般采用线性就可以得到不错的效果。

AdaBoost分类器创建如下(本测试不用):

AdaBoostClassifier(base_estimator=None, n_estimators=50, learning_rate=1.0, algorithm=’SAMME.R’, random_state=None)

AdaBoost回归模型创建如下

AdaBoostRegressor(base_estimator=None, n_estimators=50, learning_rate=1.0, loss=‘linear’, random_state=None)

创建好 AdaBoost 分类器或回归器之后,就可以输入训练集对它进行训练。我们使用 fit 函数,传入训练集中的样本特征值 train_X 和结果 train_y,模型会自动拟合。

使用 predict 函数进行预测,传入测试集中的样本特征值 test_X,然后就可以得到预测结果。

数据集:sklearn 中自带的波士顿房价数据集
这个数据集比较规范,并不需要在数据清洗,数据规范化上花太多精力,代码编写起来比较简单,非常适合入门参考

AdaBoost、决策树回归、KNN预测对比

from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.datasets import load_boston
from sklearn.ensemble import AdaBoostRegressor
from sklearn.tree import DecisionTreeRegressor
from sklearn.neighbors import KNeighborsRegressor
# 加载数据
data=load_boston()
# 分割数据
train_x, test_x, train_y, test_y = train_test_split(data.data, data.target, test_size=0.25, random_state=33)
# 使用AdaBoost回归模型
regressor=AdaBoostRegressor(random_state=1)
regressor.fit(train_x,train_y)
pred_y = regressor.predict(test_x)
mse_AdaBoost_linear = mean_squared_error(test_y, pred_y)
#print("房价预测结果 ", pred_y)
print("AdaBoost_linear均方误差 = ",round(mse_AdaBoost_linear,2))

# 使用决策树回归模型
dec_regressor=DecisionTreeRegressor()
dec_regressor.fit(train_x,train_y)
pred_y = dec_regressor.predict(test_x)
mse_DecisionTree = mean_squared_error(test_y, pred_y)
print("决策树均方误差 = ",round(mse_DecisionTree,2))
# 使用KNN回归模型
knn_regressor=KNeighborsRegressor()
knn_regressor.fit(train_x,train_y)
pred_y = knn_regressor.predict(test_x)
mse_knn = mean_squared_error(test_y, pred_y)
print("KNN均方误差 = ",round(mse_knn,2))

输出结果为:

AdaBoost_linear均方误差 =  18.75
决策树均方误差 =  22.13
KNN均方误差 =  27.77

可以看出,AdaBoost_linear的预测效果最好,AdaBoost默认为线性损失函数,且线性损失函数也可以取得不错的效果。
经过多个弱分类器组合形成的 AdaBoost 强分类器,准确率要明显高于决策树算法
注意:
在这里发现,采用不同的随机种子会有不同的结果,因此,上述对比并不完全严谨,由于算法原理不同,采用相同随机种子不可取。故而可以考虑采用单个算法多次建模取平均的方法,对比几种算法的预测效果。

AdaBoost中不同损失函数预测对比

from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.datasets import load_boston
from sklearn.ensemble import AdaBoostRegressor
from sklearn.tree import DecisionTreeRegressor
from sklearn.neighbors import KNeighborsRegressor
# 加载数据
data=load_boston()
# 分割数据
train_x, test_x, train_y, test_y = train_test_split(data.data, data.target, test_size=0.25, random_state=33)
# 使用AdaBoost回归模型
regressor=AdaBoostRegressor(base_estimator=None,n_estimators=50,learning_rate=1.0,loss='linear',random_state=1)
regressor.fit(train_x,train_y)
pred_y = regressor.predict(test_x)
mse_AdaBoost_linear = mean_squared_error(test_y, pred_y)
#print("房价预测结果 ", pred_y)
print("AdaBoost_linear均方误差 = ",round(mse_AdaBoost_linear,2))
regressor=AdaBoostRegressor(base_estimator=None,n_estimators=50,learning_rate=1.0,loss='square',random_state=1)
regressor.fit(train_x,train_y)
pred_y = regressor.predict(test_x)
mse_AdaBoost_square = mean_squared_error(test_y, pred_y)
#print("房价预测结果 ", pred_y)
print("AdaBoost_square均方误差 = ",round(mse_AdaBoost_square,2))
regressor=AdaBoostRegressor(base_estimator=None,n_estimators=50,learning_rate=1.0,loss='exponential',random_state=1)
regressor.fit(train_x,train_y)
pred_y = regressor.predict(test_x)
mse_AdaBoost_exponential = mean_squared_error(test_y, pred_y)
#print("房价预测结果 ", pred_y)
print("AdaBoost_exponential均方误差 = ",round(mse_AdaBoost_exponential,2))

输出结果为:

AdaBoost_linear均方误差 =  18.75
AdaBoost_square均方误差 =  21.23
AdaBoost_exponential均方误差 =  16.58

可以看出,损失函数的对比中,对该数据来讲,指数损失函数预测效果最好。
对比中需要注意,随机数种子函数的类型需要设置相同,否则每次对比结果不同,对比的意义也就不存在了,损失函数对比中统一设置random_state=1

部分参考 陈旸《数据分析实战45讲》

最后

以上就是心灵美橘子为你收集整理的波士顿房价AdaBoost、决策树、KNN预测对比AdaBoost回归模型AdaBoost、决策树回归、KNN预测对比AdaBoost中不同损失函数预测对比的全部内容,希望文章能够帮你解决波士顿房价AdaBoost、决策树、KNN预测对比AdaBoost回归模型AdaBoost、决策树回归、KNN预测对比AdaBoost中不同损失函数预测对比所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部