如何使用Python和scikit-learn库中的糖尿病数据集,执行一个基于统计机器学习的回归分析?同时,需要详细解释数据分析步骤,以及如何将结果通过图表进行可视化展示?请给我一个完整的代码,注意数据的拟合问题,MSE和R^2的值
时间: 2024-12-08 07:19:28 浏览: 47
首先,让我们分步骤地了解如何使用Python和scikit-learn库完成糖尿病数据集的回归分析:
1. **导入所需的库**:
```python
import numpy as np
import pandas as pd
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt
```
2. **加载糖尿病数据集**:
```python
diabetes = datasets.load_diabetes()
X = diabetes.data # 特征矩阵
y = diabetes.target # 目标变量,血糖浓度
```
3. **数据预处理**:
通常我们会对特征进行标准化或归一化,但这取决于数据本身。这里假设数据已经预处理好,如果需要,可以使用`StandardScaler` 或 `MinMaxScaler` 进行标准化。
4. **划分训练集和测试集**:
```python
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
```
5. **创建并训练线性回归模型**:
```python
model = LinearRegression()
model.fit(X_train, y_train)
```
6. **预测和评估**:
```python
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print("Mean Squared Error (MSE):", mse)
print("R-squared Score:", r2)
```
7. **拟合曲线可视化**:
```python
plt.scatter(y_test, y_pred) # 绘制散点图
plt.plot(y_test, y_test, 'r', label='Perfect fit') # 绘制真实线
plt.plot(y_test, model.predict(X_test), 'b', label='Predicted fit') # 绘制预测线
plt.xlabel('True Values')
plt.ylabel('Predictions')
plt.legend()
plt.show()
```
在这个过程中,我们使用了线性回归作为基础模型,MSE衡量的是模型预测值与实际值之间的均方误差,R²则给出了模型解释因变量变异性的比例。通过观察散点图和回归线,我们可以直观地了解模型的拟合效果。
阅读全文