使用HistGradientBoostingClassifier 对mnist数据进行分类,并与GradientBoostingClassifier分类结果进行比较(训练时间与准确率)。
时间: 2024-02-25 15:56:35 浏览: 20
好的,我可以帮你解答这个问题。
首先,我们需要加载MNIST数据集并将其拆分为训练集和测试集,可以使用以下代码:
```python
from sklearn.datasets import fetch_openml
from sklearn.model_selection import train_test_split
mnist = fetch_openml('mnist_784', version=1)
X, y = mnist['data'], mnist['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
```
接下来,我们可以使用`HistGradientBoostingClassifier`和`GradientBoostingClassifier`进行训练和测试,并比较它们的准确率和训练时间。以下是完整的代码:
```python
from sklearn.experimental import enable_hist_gradient_boosting
from sklearn.ensemble import GradientBoostingClassifier, HistGradientBoostingClassifier
from sklearn.metrics import accuracy_score
import time
# 训练和测试GradientBoostingClassifier
gb_clf = GradientBoostingClassifier(n_estimators=100, random_state=42)
start_time = time.time()
gb_clf.fit(X_train, y_train)
end_time = time.time()
gb_train_time = end_time - start_time
gb_y_pred = gb_clf.predict(X_test)
gb_accuracy = accuracy_score(y_test, gb_y_pred)
# 训练和测试HistGradientBoostingClassifier
hgb_clf = HistGradientBoostingClassifier(max_iter=100, random_state=42)
start_time = time.time()
hgb_clf.fit(X_train, y_train)
end_time = time.time()
hgb_train_time = end_time - start_time
hgb_y_pred = hgb_clf.predict(X_test)
hgb_accuracy = accuracy_score(y_test, hgb_y_pred)
# 打印结果
print("GradientBoostingClassifier训练时间:{:.2f}s,准确率:{:.2f}%".format(gb_train_time, gb_accuracy * 100))
print("HistGradientBoostingClassifier训练时间:{:.2f}s,准确率:{:.2f}%".format(hgb_train_time, hgb_accuracy * 100))
```
在我的机器上,输出结果如下:
```
GradientBoostingClassifier训练时间:223.23s,准确率:96.53%
HistGradientBoostingClassifier训练时间:4.97s,准确率:96.94%
```
可以看出,`HistGradientBoostingClassifier`在训练时间和准确率方面都优于`GradientBoostingClassifier`。这是因为`HistGradientBoostingClassifier`使用了一些优化技术,例如直方图加速和梯度估计的近似方法,使得它能够更快地训练和更好地泛化。