提供上述修改以后的完整代码
时间: 2024-10-19 08:15:26 浏览: 13
以下是包含优化步骤的完整代码,包括数据标准化和参数网格搜索:
```python
import pandas as pd
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error, r2_score
# 读取和处理数据
df = pd.read_excel(r'C:\Users\15251\Desktop\bupa.xlsx', skiprows=1)
df.columns = ['mcv', 'alkphos', 'sgpt', 'sgot', 'gammagt', 'drinks', 'selector']
X = df[['mcv', 'alkphos', 'gammagt', 'drinks', 'sgpt']]
y = df['sgot']
X_scaled = scaler.fit_transform(X)
# 数据划分
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
# 参数网格搜索
params = {'fit_intercept': [True, False], 'normalize': [False, True]}
grid_search = GridSearchCV(LinearRegression(), params, cv=5)
grid_search.fit(X_train, y_train)
# 选择最佳模型
best_model = grid_search.best_estimator_
# 预测并评估优化后的模型
y_pred_optimized = best_model.predict(X_test_scaled)
print("模型的均方误差(MSE):", mean_squared_error(y_test, y_pred_optimized))
print("模型的R^2得分:", r2_score(y_test, y_pred_optimized))
print("最优参数:", grid_search.best_params_)
print("模型的系数:", best_model.coef_)
print("模型的截距:", best_model.intercept_)
# 如果数据集太小,输出警告
if X_scaled.shape[0] <= 1:
print("警告:数据集太小,无法进行有效的训练/测试分割。")
```
在这个版本中,我们添加了数据标准化(使用`StandardScaler`),并在`LinearRegression`的参数中进行了网格搜索以找到最佳的`fit_intercept`和`normalize`选项。然后,我们基于网格搜索的结果选择了最佳模型进行预测和评估。如果你的数据集中样本较少,最后会给出相应的警告。
阅读全文