前言
决策树是一种监督机器学习算法,用于回归和分类任务。树是可以处理复杂数据集的强大算法。
决策树特性:
- 不需要数值输入数据进行缩放。无论数值是多少,决策树都不在乎。
- 不同于其他复杂的学习算法,决策树的结果是可以解释的,决策树不是黑盒类型的模型。
- 虽然大多数模型都有缺失值的问题,但决策树却没有问题。
- 树可以处理不平衡的数据集,只需要调整类的权重。
- 树可以提供特征的重要性或每个特征对模型训练结果的贡献。
- 树是随机森林和梯度增强机等集成方法的基本构建块。
决策树的工作方式就像一系列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。
最后可以在测试集上对模型进行评估,用原来的模型。文章来源:https://www.toymoban.com/news/detail-830389.html
predict(X_test, tree_reg, y_test) #42.89411103991738
8.总结
这里学习了决策树背后的基本思想,并使用它来预测CPU性能。在下一个实验中,将使用决策树来完成分类任务,将使用一个真实的数据集,这样就可以实际地改进决策树模型。文章来源地址https://www.toymoban.com/news/detail-830389.html
到了这里,关于机器学习-决策树-回归-CPU(中央处理单元)数据-python scikit-learn的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!