【机器学习】机器学习学习笔记 - 监督学习 - 多项式回归决策树回归 - 03

server/2024/12/3 4:04:46/

多项式回归

  • 解决线性回归的准备性不足问题(线性回归只能是直线,多项式回归引入多项式可以是曲线)
  • 通过对预测值进行多项式转换, 使得回归模型可以是非线性的
  • 多项式回归的优点是可以处理非线性的数据
  • 多项式回归的缺点是它对数据进行了多项式转换

加菲工具,免费pdf转word等 https://orcc.online

# 曲线多项式的次数设置为2
polynomial = PolynomialFeatures(degree=2)# 多项式回归
poly_linear_model = linear_model.LinearRegression()
# 多项式参数
# 多项式转换结果
X_train_transformed = polynomial.fit_transform(X_train)
# 训练模型
poly_linear_model.fit(X_train_transformed, y_train)# 多项式转换测试数据
X_test_transformed = polynomial.fit_transform(X_test)
# 通过转换的测试数据预测数据
y_test_poly_pred = poly_linear_model.predict(X_test_transformed)
print(y_test_poly_pred)

决策树回归

  • 集成学习(Ensemble Learning) 旨在通过组合多个基本模型(弱学习器)的预测创建一个强学习器(强学习器)
  • Boosting(提升) 和 Bagging(袋装) 都是集成学习的思想
  • Bagging(袋装) 原始数据集随机采样, 然后将采样的数据集分别训练多个决策树模型, 最后将这些决策树模型的预测结果进行投票(投票:分类, 回归:平均), 得到最终的预测结果
  • Boosting(提升) 通过迭代的方式, 训练多个决策树模型, 最后将这些决策树模型的预测结果进行加权平均, 得到最终的预测结果
  • bagging: 适用于高方差、低偏差的数据集 (random forest 随机森林)
  • boosting: 适用于高偏差、低方差的数据集 (AdaBoost 自适应增强)
  • 偏差: 预测结果的准确性
  • 方差: 预测结果的离散程度
决策树回归 decision tree regression
from sklearn.tree import DecisionTreeRegressor# 训练模型
# 决策树回归
# max_depth 树的深度, 设定位4,防止任意深度过深,导致过拟合
dt_regressor = DecisionTreeRegressor(max_depth=4)
dt_regressor.fit(X_train, y_train)y_pred_dt = dt_regressor.predict(X_test)
mse = mean_squared_error(y_test, y_pred_dt)
evs = explained_variance_score(y_test, y_pred_dt)
print("#### Decision Tree performance ####")
print("Mean squared error (均方误差/平均平方误差 (越小越好)) = ", round(mse, 2))
print("Explained variance score (解释方差分 (0-1) 1 接近表示解释能力越好) =", round(evs, 2))# 决策树特征权重
def plot_feature_importances(feature_importances, title, feature_names):# 将重要性值标准化feature_importances = 100.0 * (feature_importances / max(feature_importances))# 将得分从高到低排序index_sorted = np.flipud(np.argsort(feature_importances))# 让X坐标轴上的标签居中显示pos = np.arange(index_sorted.shape[0]) + 0.5# 画条形图plt.figure()plt.bar(pos, feature_importances[index_sorted], align='center')print(pos, index_sorted, feature_importances)plt.xticks(pos, [feature_names[i] for i in index_sorted])plt.ylabel('Relative Importance')plt.title(title)plt.show()# print(dt_regressor.feature_importances_)
# print(dt_regressor.feature_importances_)
plot_feature_importances(dt_regressor.feature_importances_, 'Decision Tree regressor', data_columns)
自适应决策树回归 adaboost regressor
from sklearn.ensemble import AdaBoostRegressor# AdaBoost: adaptive boosting (自适应增强)
# n_estimators 基学习器的个数
ab_regressor = AdaBoostRegressor(DecisionTreeRegressor(max_depth=4), n_estimators=400, random_state=7)
ab_regressor.fit(X_train, y_train)y_pred_ab = ab_regressor.predict(X_test)
mse = mean_squared_error(y_test, y_pred_ab)
evs = explained_variance_score(y_test, y_pred_ab)
print("#### AdaBoost performance ####")
print("Mean squared error (均方误差/平均平方误差 (越小越好)) = ", round(mse, 2))
print("Explained variance score (解释方差分 (0-1) 1 接近表示解释能力越好) =", round(evs, 2))def plot_feature_importances(feature_importances, title, feature_names):# 将重要性值标准化feature_importances = 100.0 * (feature_importances / max(feature_importances))# 将得分从高到低排序index_sorted = np.flipud(np.argsort(feature_importances))# 让X坐标轴上的标签居中显示pos = np.arange(index_sorted.shape[0]) + 0.5# 画条形图plt.figure()plt.bar(pos, feature_importances[index_sorted], align='center')print(pos, index_sorted, feature_importances)plt.xticks(pos, [feature_names[i] for i in index_sorted])plt.ylabel('Relative Importance')plt.title(title)plt.show()plot_feature_importances(ab_regressor.feature_importances_, 'AdaBoost regressor', data_columns)
随机森林回归 random forest regressor
from sklearn.ensemble import RandomForestRegressor# 训练模型
# 随机森林回归
# 随机森林回归, n_estimators 决策树的个数, max_depth 决策树的深度, min_samples_split 决策树的最小样本数
rf_regressor = RandomForestRegressor(n_estimators=1000, max_depth=4, min_samples_split=2)
rf_regressor.fit(X_train, y_train)y_pred_rf = rf_regressor.predict(X_test)
mse = mean_squared_error(y_test, y_pred_rf)
evs = explained_variance_score(y_test, y_pred_rf)
print("#### Random Forest Regressor performance ####")
print("Mean squared error (均方误差/平均平方误差 (越小越好)) = ", round(mse, 2))
print("Explained variance score (解释方差分 (0-1) 1 接近表示解释能力越好) =", round(evs, 2))def plot_feature_importances(feature_importances, title, feature_names):# 将重要性值标准化feature_importances = 100.0 * (feature_importances / max(feature_importances))# 将得分从高到低排序index_sorted = np.flipud(np.argsort(feature_importances))# 让X坐标轴上的标签居中显示pos = np.arange(index_sorted.shape[0]) + 0.5# 画条形图plt.figure()plt.bar(pos, feature_importances[index_sorted], align='center')print(pos, index_sorted, feature_importances)plt.xticks(pos, [feature_names[i] for i in index_sorted])plt.ylabel('Relative Importance')plt.title(title)plt.show()# print(dt_regressor.feature_importances_)
# print(dt_regressor.feature_importances_)
plot_feature_importances(rf_regressor.feature_importances_, 'random forest regressor', data_columns)

IT免费在线工具网 https://orcc.online


http://www.ppmy.cn/server/146923.html

相关文章

Python实现2048小游戏

2048是一个单人益智游戏,目标是移动和合并数字,以达到2048。 1. 实现效果 Python实现2048小游戏 2. 游戏规则 简单地理解一下规则 基本规则: 4x4棋盘,每个格可包含一个2的倍数的数字,初始时为空,表示0。…

Shell脚本小练习

学习了这么长时间Shell脚本,总得来一次小小的练习吧,那么请看下文! 1.用Shell写一个小计算器。 通过read命令获取用户输入的表达式,表达式的格式设定为操作数1 运算符 操作数2,例如53,然后利用设计的脚本…

unity中控制相机跟随物体移动

unity中控制相机跟随物体移动 Main Camera下添加组件(follow target) 脚本中定义 public Transform trans;将transform拖拽到trans中,让trans可以引用到transform数值(方式1) 因为属于当前GameObject下的脚本组件…

分布式锁的实现原理

作者:来自 vivo 互联网服务器团队- Xu Yaoming 介绍分布式锁的实现原理。 一、分布式锁概述 分布式锁,顾名思义,就是在分布式环境下使用的锁。众所周知,在并发编程中,我们经常需要借助并发控制工具,如 mu…

缓存使用规范学习

1.规范 size控制: string类型,控制在2KB以内 hash、list、set、zset类型的元素个数,不要超过5000 pipeline命令: 检查多参数命令的参数个数或pipeline命令个数,若值太大,建议减小(codis proxy返回结果集超64K&…

为什么ai会用python开发

AI领域使用Python开发有几个主要原因: 简洁易读:Python语法简洁,容易理解,使得开发者能够专注于算法和模型的设计,而不是花费大量时间在语言本身的细节上。这对于快速开发和原型设计尤为重要。 强大的库支持&#xff…

Flink四大基石之CheckPoint

1、State Vs Checkpoint State:状态,是Flink中某一个Operator在某一个时刻的状态,如maxBy/sum,注意State存的是历史数据/状态,存在内存中。 Checkpoint:快照点, 是Flink中所有有状态的Operator在某一个时刻的State快照信息/存档信息。 一句话概括: Checkpoint就是State的快照…

reactivex.Observable 超时问题

下面代码测试可知:超时设置需要在map之后才有效,换句话说就是,超时只对超时设置之前的代码有用 import io.reactivex.Observable; import java.util.concurrent.TimeUnit;public class TimeoutTest {public static void main(String[] args…