cross_val_score函数的参数scoring 求RMSE
时间: 2024-05-15 14:19:39 浏览: 214
cross_val_score函数的参数scoring可以设置为'mean_squared_error',然后用-mean_squared_error来得到均方根误差(RMSE)的值,即:
```python
from sklearn.model_selection import cross_val_score
from sklearn.metrics import mean_squared_error
import numpy as np
# 假设模型为model,数据为X和y
scores = cross_val_score(model, X, y, cv=5, scoring='mean_squared_error')
rmse_scores = np.sqrt(-scores)
print("RMSE:", rmse_scores.mean())
```
其中,np.sqrt(-scores)是将均方误差(MSE)转换为均方根误差(RMSE)的公式。
相关问题
用pycharm写、题目一:采用 scikit-learn 中的 RandomForestRegressor 对加利福尼亚房价数据集进行预测。 具体要求: (1)导入数据集:加利福尼亚房价数据集是 sklearn 中自带的数据集,通过查看数据量和维度、特征类型(离散 or 连续)、特征名、标签名、标签分布情况、数据集 的描述等信息了解数据集。 (2)模型建立:分别使用 DecisionTreeRegressor 和 RandomForestRegressor 建立分类模型(参数 默认即可)。 (3)模型评估:输出训练集和测试集评分(以根均方误差 RMSE 为评估指标)。讨论一】比较随机森林和决策树在数据集上的表现,可将交叉验证评分进行可视化,讨论二】随机森林中的 n_estimator 超参数如何选择? 提示:可采用学习曲线进行选择,如图 2 所示。学习曲线能够看到变化趋势,帮助确定超参数的 搜索范围。对于 RandomForestRegressor 模型,自行选择超参数搜索的方法,找到合适的超参 数,最终将超参数在如下的交叉验证集上进行建模,并计算 RMSE 评分。介绍调参过程,并比较调 参前后的效果超参数的搜索范围可根据建立的决策树的建树信息进行设定,决策树的建树信息可通 过.tree_属性查看
好的,以下是用 PyCharm 实现题目一的代码:
```python
import pandas as pd
from sklearn.datasets import fetch_california_housing
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import cross_val_score, train_test_split
from sklearn.metrics import mean_squared_error
import matplotlib.pyplot as plt
# 导入数据集
california = fetch_california_housing()
X = pd.DataFrame(california.data, columns=california.feature_names)
y = pd.DataFrame(california.target, columns=["MedHouseVal"])
# 查看数据信息
print("数据集大小:", X.shape)
print("数据集特征类型:", X.dtypes)
print("数据集特征名:", X.columns)
print("数据集标签名:", y.columns)
print("数据集标签分布情况:\n", y["MedHouseVal"].describe())
# 建立决策树模型
dtr = DecisionTreeRegressor(random_state=42)
dtr_scores = cross_val_score(dtr, X, y, cv=10, scoring="neg_mean_squared_error")
dtr_rmse_scores = (-dtr_scores) ** 0.5
print("决策树模型交叉验证 RMSE 评分:", dtr_rmse_scores.mean())
# 建立随机森林模型
rfr = RandomForestRegressor(n_estimators=100, random_state=42)
rfr_scores = cross_val_score(rfr, X, y, cv=10, scoring="neg_mean_squared_error")
rfr_rmse_scores = (-rfr_scores) ** 0.5
print("随机森林模型交叉验证 RMSE 评分:", rfr_rmse_scores.mean())
# 可视化交叉验证评分
plt.plot(range(1, 11), dtr_rmse_scores, label="Decision Tree")
plt.plot(range(1, 11), rfr_rmse_scores, label="Random Forest")
plt.xlabel("Fold")
plt.ylabel("RMSE")
plt.legend()
plt.show()
# 随机森林调参
n_estimators = [10, 50, 100, 200, 500]
rfr_scores = []
for n in n_estimators:
rfr = RandomForestRegressor(n_estimators=n, random_state=42)
rfr_scores.append(cross_val_score(rfr, X, y, cv=10, scoring="neg_mean_squared_error").mean())
plt.plot(n_estimators, (-1 * rfr_scores) ** 0.5)
plt.xlabel("n_estimators")
plt.ylabel("RMSE")
plt.show()
# 训练最优模型并计算 RMSE 评分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
rfr = RandomForestRegressor(n_estimators=200, random_state=42)
rfr.fit(X_train, y_train)
y_pred = rfr.predict(X_test)
rfr_rmse = mean_squared_error(y_test, y_pred, squared=False)
print("随机森林最优模型测试集 RMSE 评分:", rfr_rmse)
```
代码解释:
1. 导入需要的库,包括 pandas、scikit-learn 中的数据集 fetch_california_housing、DecisionTreeRegressor、RandomForestRegressor、cross_val_score、train_test_split 和 mean_squared_error,以及用于可视化的 matplotlib.pyplot。
2. 使用 fetch_california_housing 函数从 scikit-learn 自带的数据集中加载加利福尼亚房价数据集。将数据集中的特征和标签分别存储到 X 和 y 中。
3. 使用 pandas 库提供的函数查看数据集的信息,包括数据集大小、特征类型、特征名、标签名和标签分布情况等。
4. 使用 DecisionTreeRegressor 和 RandomForestRegressor 分别建立决策树和随机森林模型,并使用交叉验证计算模型的 RMSE 评分。
5. 使用 matplotlib.pyplot 库将决策树和随机森林模型的交叉验证评分可视化。
6. 使用随机森林模型进行调参,通过学习曲线确定最优的 n_estimator 超参数。
7. 使用 train_test_split 函数将数据集划分为训练集和测试集,使用最优的超参数训练随机森林模型,并在测试集上进行评估,计算模型的 RMSE 评分。
机器学习算法目标变量为连续变量时,使用scoring='neg_mean_squared_error'报错ValueError: Unknown label type: 'continuous'
这个错误是因为 `scoring='neg_mean_squared_error'` 是一个用于分类任务的评分函数,而你的目标变量是连续变量(回归任务)。所以,你需要使用适合回归任务的评分函数。
对于回归任务,可以使用以下的评分函数:
- `neg_mean_absolute_error`
- `neg_mean_squared_error`
- `neg_root_mean_squared_error`
- `r2`
你可以根据你的任务需求选择适合的评分函数。例如,如果你想要评估预测值与真实值之间的平均误差,可以使用 `neg_mean_absolute_error`。如果你想要评估预测值与真实值之间的平均平方误差,可以使用 `neg_mean_squared_error`。
在使用评分函数时,可以参考以下示例代码:
```python
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression
# 创建一个回归数据集
X, y = make_regression(n_samples=100, n_features=10, random_state=42)
# 创建一个线性回归模型
model = LinearRegression()
# 使用 neg_mean_squared_error 作为评分函数
scores = cross_val_score(model, X, y, cv=5, scoring='neg_mean_squared_error')
print('neg_mean_squared_error scores:', scores)
# 使用 neg_mean_absolute_error 作为评分函数
scores = cross_val_score(model, X, y, cv=5, scoring='neg_mean_absolute_error')
print('neg_mean_absolute_error scores:', scores)
# 使用 neg_root_mean_squared_error 作为评分函数
from sklearn.metrics import make_scorer, mean_squared_error
import numpy as np
def root_mean_squared_error(y_true, y_pred):
return np.sqrt(mean_squared_error(y_true, y_pred))
rmse_scorer = make_scorer(root_mean_squared_error, greater_is_better=False)
scores = cross_val_score(model, X, y, cv=5, scoring=rmse_scorer)
print('neg_root_mean_squared_error scores:', scores)
# 使用 r2 作为评分函数
from sklearn.metrics import r2_score
r2_scorer = make_scorer(r2_score)
scores = cross_val_score(model, X, y, cv=5, scoring=r2_scorer)
print('r2 scores:', scores)
```
以上示例代码演示了如何使用不同的评分函数进行交叉验证,并输出每个评分函数的结果。
阅读全文