机器学习-决策树-回归-CPU(中央处理单元)数据-python scikit-learn

前言

决策树是一种监督机器学习算法,用于回归和分类任务。树是可以处理复杂数据集的强大算法。
决策树特性:

  • 不需要数值输入数据进行缩放。无论数值是多少,决策树都不在乎。
  • 不同于其他复杂的学习算法,决策树的结果是可以解释的,决策树不是黑盒类型的模型。
  • 虽然大多数模型都有缺失值的问题,但决策树却没有问题。
  • 树可以处理不平衡的数据集,只需要调整类的权重。
  • 树可以提供特征的重要性或每个特征对模型训练结果的贡献。
  • 树是随机森林和梯度增强机等集成方法的基本构建块。

决策树的工作方式就像一系列if/else问题。假设你想决定买哪辆车。为了买到合适的车,你可以通过问一系列类似的问题来评估安全水平,座位和门的数量。

决策树的一个众所周知的缺点是倾向于容易过拟合数据(基本上假设它们一开始总是过拟合)。克服过拟合的一种方法是减少决策树中的最大深度(称为“max_depth”超参数)。

1.导入模块

import numpy as np
import pandas as pd
import seaborn as sns
import sklearn
import matplotlib.pyplot as plt
%matplotlib inline
import warnings
warnings.filterwarnings('ignore')

2.加载数据

在这个使用决策树的回归任务中,将使用机器CPU(中央处理单元)数据,该数据可在OpenML上获得。这里将使用Sklearn ’ fetch_openml '函数加载它。

该数据集将根据以下数据预测CPU的相对性能:

  • MYCT:以纳秒为单位的机器周期时间(整数)
  • MMIN:最小主存(千字节)(整数)
  • MMAX:最大主存,单位为千字节(整数)
  • cache:以千字节为单位的cache(整数)
  • CHMIN:最小通道数单位(整数)
  • CHMAX:最大通道数单位(整数)
  • PRP:公布的相对性能(整数)(目标变量)
from sklearn.datasets import fetch_openml
machine_cpu = fetch_openml(name='machine_cpu')
machine_data = machine_cpu.data
machine_labels = machine_cpu.target

3.探索性分析数据

在进行探索性分析之前,让我们先获取训练和测试数据。

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(machine_data,machine_labels, test_size=0.2,random_state=20)

可视化所有数字特征的直方图。

X_train.hist(bins=50, figsize=(15,10))
plt.show()

在这里插入图片描述
或者可以快速使用’ sn.pairplot() '查看数据。

sns.pairplot(X_train)

在这里插入图片描述

4.数据预处理

将数据准备为机器学习模型提供适当的格式。
决策树并不关心特征是否缩放。可建立一个Pipeline来缩放特征。

from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline

scale_pipe = Pipeline([('scaler', StandardScaler())])
X_train_scaled = scale_pipe.fit_transform(X_train)

5.训练决策树回归器

from sklearn.tree import DecisionTreeRegressor
#原始数据上训练
tree_reg = DecisionTreeRegressor()
tree_reg.fit(X_train, y_train)
#在缩放后的数据上训练相同的模型。
tree_reg_scaled = DecisionTreeRegressor()
tree_reg_scaled.fit(X_train_scaled, y_train)

6.评估决策树

先检查训练的均方根误差。不建议根据测试数据对模型进行评估,因为还没有对模型进行改进。这里会写一个函数,让它更简单,避免重复。

from sklearn.metrics import mean_squared_error
def predict(input_data,model,labels):
    preds = model.predict(input_data)
    mse = mean_squared_error(labels,preds)
    rmse = np.sqrt(mse)
    return rmse
predict(X_train, tree_reg, y_train) #9.724590719956222
predict(X_train_scaled, tree_reg_scaled, y_train) #9.724590719956222

正如你所看到的,两者根本没有区别。所以在未来使用决策树的项目中,无论是否缩放数据,预测结果都不会受到影响。

7.改进决策树

改进决策树模型的一种方法是找到max_depth和其他一些参数的正确数量。使用GridSearch来查找最佳超参数。注意,因为数据集比较小,这样做可能会导致过拟合。但这样做是为了学习(你可以把它应用到实际的问题中)

from sklearn.model_selection import GridSearchCV

params_grid = {'max_leaf_nodes': list(range(0, 10)), 'min_samples_split': [0,1,2, 3, 4], 
              'max_depth':[None,0,1,2,3]}

#默认情况下,Refit为true。最好的estimator(估计器)是在整个数据集上训练的
grid_search = GridSearchCV(DecisionTreeRegressor(random_state=42), params_grid, verbose=1, cv=3, refit=True)
grid_search.fit(X_train, y_train)
tree_best = grid_search.best_estimator_
predict(X_train, tree_best, y_train)  #34.999530266023044

可以看到,结果overfitted。
最后可以在测试集上对模型进行评估,用原来的模型。

predict(X_test, tree_reg, y_test)  #42.89411103991738

8.总结

这里学习了决策树背后的基本思想,并使用它来预测CPU性能。在下一个实验中,将使用决策树来完成分类任务,将使用一个真实的数据集,这样就可以实际地改进决策树模型。

  • 26
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值