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

多项式回归

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

pdf在线免费转word文档 https://orcc.online/pdf

python 复制代码
# 曲线多项式的次数设置为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
python 复制代码
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
python 复制代码
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
python 复制代码
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

相关推荐
猫头虎21 小时前
Cursor推出的Composer 2.5 是什么?从定向 RL 到合成数据,AI 编程智能体再进化
人工智能·开源·prompt·aigc·copilot·ai编程·composer
ydyd2026042121 小时前
设备管理应用推荐2026深度测评!
大数据·人工智能·机器学习
sweet丶21 小时前
iOS AI 编程环境配置:Agent、Skill、Rules、Hook、Command
ios·ai编程
学术头条21 小时前
手机上跑MoE?Meta提出MobileMoE,iPhone 16 Pro提速3.8倍
人工智能·科技·机器学习·ai·智能手机·agi
winlife_21 小时前
让 AI 跑通“调跳跃手感“的完整闭环:funplay-unity-mcp 实战案例
人工智能·unity·游戏引擎·ai编程·mcp·游戏手感
EdenMa21 小时前
从飞书 PRD 到代码实现:我的AI编程workflow
openai·ai编程
wuhen_n21 小时前
LangChain 核心:Chain 链式调用实现复杂 AI 任务
前端·langchain·ai编程
七牛开发者21 小时前
让生产级 Agent 实现自进化:MOSS 的源码级实验
人工智能·机器学习·程序员
winlife_1 天前
从一句话到可玩原型:用 funplay-unity-mcp 让 AI 搭起完整游戏循环
人工智能·游戏·unity·ai编程·mcp·游戏原型
装不满的克莱因瓶1 天前
矩阵的主成分是什么?主成分分析(PCA)又能做什么?
人工智能·线性代数·算法·机器学习·ai·矩阵·pca