已知下列身高体重数据 (1)使用最小二乘法完成拟合直线建模过程; (2)使用Matplotlib 绘制数据的散点图与拟合模型的折线图:+(3)使用sklearn库中最小二乘法对拟合直线完成建模。
时间: 2024-10-11 14:02:34 浏览: 6
首先,对于给定的身高体重数据,我们可以按照以下步骤进行:
1. **拟合直线建模**:
- 将身高数据视为自变量 (X),体重数据视为因变量 (Y)。
- 计算每个数据点的均值 (mean(X), mean(Y)) 和标准差 (std(X), std(Y)),以便进行标准化。
- 使用最小二乘法找到最佳拟合直线的斜率 (m) 和截距 (b),可以通过公式 m = (nΣXY - ΣXΣY) / (nΣX^2 - (ΣX)^2) 和 b = (ΣY - mΣX) / n 来计算,其中 n 是数据点的数量,Σ 表示求和。
2. **绘制散点图与拟合模型**:
- 使用Python的`matplotlib`库,先创建一个新的figure,然后画出散点图,将身高和体重分别作为x轴和y轴的坐标。
- 利用已经计算好的斜率和截距,在x轴上生成一系列身高值,并通过拟合直线的公式计算对应体重值,连接这些点形成一条折线。
- 可以使用`plt.plot()`函数绘制散点图,再使用`plt.plot(x_values, y_values, 'r')`绘制拟合线。
3. **使用Scikit-Learn进行拟合**:
- 导入`sklearn.linear_model.LinearRegression`模块。
- 创建一个`LinearRegression`对象并实例化它。
- 使用`fit(X, Y)`方法对数据进行训练,这里X是身高的一维数组,Y是体重的一维数组。
- 调用`predict(X_new)`方法可以预测新的身高对应的体重,`X_new`是你需要预测的新身高值。
以下是简单代码示例(假设已经有了数据集):
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
# 假设 height_data, weight_data 是已知的身高体重数据
height_data, weight_data = ... # 填充实际数据
# 步骤1: 最小二乘法拟合
mean_x, std_x = np.mean(height_data), np.std(height_data)
mean_y, std_y = np.mean(weight_data), np.std(weight_data)
X_normalized = (height_data - mean_x) / std_x
Y_normalized = (weight_data - mean_y) / std_y
slope, intercept = np.polyfit(X_normalized, Y_normalized, 1)
# 步骤2: 绘制散点图和拟合线
x_values = np.linspace(min(height_data), max(height_data), 100)
y_values = slope * x_values + intercept
plt.scatter(height_data, weight_data, label='原始数据')
plt.plot(x_values, y_values, color='red', label='拟合线')
plt.xlabel('身高')
plt.ylabel('体重')
plt.legend()
plt.show()
# 步骤3: 使用Scikit-Learn拟合
regressor = LinearRegression()
regressor.fit(np.array([[height_data]]).T, weight_data) # 为了适应Sklearn输入格式
predicted_weights = regressor.predict(np.array([[x_values]])).flatten()
```