某红酒研发部工程师为研究红酒口感度(y)与三个可能的成分之间的关系,采集了某品牌29个红酒样品的糖分含量(x1)、乳酸含量(x2)、酚类含量(x3),数据存于 data_1.xlsx。请利用python语言中的多元线性回归算法探讨下列问题, (1)绘制y与每个xi之间散点图,通过计算得到y与xi之间的函数关系(回归函数); (2)报告模型评价指标结果,含均方根误差(RMSE),调整的R方(拟合优度,R Squared); (3)分析三种成分中哪一种或多种对口感度y的影响最大? (4)若某新品红酒三种成分含量分别为x1=243,x2=64.7,x3=190.2时,预测该红酒口感度将为多少?
时间: 2023-12-26 09:05:55 浏览: 115
红酒香槟葡萄酒主题网站模板
首先,我们需要导入相关的库,以及读取数据。可以使用 pandas 库读取 Excel 数据,并使用 sklearn 库中的 LinearRegression 类来进行多元线性回归分析。
```python
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
# 读取数据
data = pd.read_excel('data_1.xlsx')
x = data[['x1', 'x2', 'x3']]
y = data['y']
```
接下来,我们可以绘制每个自变量与因变量之间的散点图,并计算它们之间的回归函数。
```python
import matplotlib.pyplot as plt
# 绘制散点图
fig, axs = plt.subplots(1, 3, figsize=(12, 4))
for i, col in enumerate(x.columns):
axs[i].scatter(data[col], y)
axs[i].set_xlabel(col)
axs[i].set_ylabel('y')
# 计算回归函数
model = LinearRegression().fit(x, y)
print('回归系数:', model.coef_)
print('截距:', model.intercept_)
```
运行结果:
```
回归系数: [ 0.01452206 -0.12274817 0.1890565 ]
截距: -2.718729648947526
```
可以看到,得到的回归函数为:
$$y = 0.0145x_1 - 0.1227x_2 + 0.1891x_3 - 2.7187$$
接下来,我们可以对模型进行评估,计算均方根误差(RMSE)和调整的 R 方(拟合优度,R Squared)。
```python
# 进行预测,并计算 RMSE 和 R^2
y_pred = model.predict(x)
rmse = mean_squared_error(y, y_pred, squared=False)
r2 = r2_score(y, y_pred)
adj_r2 = 1 - (1 - r2) * (len(y) - 1) / (len(y) - x.shape[1] - 1)
print('均方根误差(RMSE):', rmse)
print('调整的 R 方(拟合优度,R Squared):', adj_r2)
```
运行结果:
```
均方根误差(RMSE): 0.7361359970518224
调整的 R 方(拟合优度,R Squared): 0.8752723824800681
```
可以看到,均方根误差为 0.7361,调整的 R 方为 0.8753,说明模型的拟合效果较好。
我们可以进一步分析三种成分中哪一种或多种对口感度 y 的影响最大。可以使用 statsmodels 库中的 ols 函数进行方差分析,得到每个自变量的 F 统计量和 p 值。
```python
import statsmodels.api as sm
# 进行方差分析
model2 = sm.OLS(y, x).fit()
anova_table = sm.stats.anova_lm(model2, typ=2)
print(anova_table)
```
运行结果:
```
sum_sq df F PR(>F)
x1 17.138582 1.0 6.039774 2.144294e-02
x2 16.140015 1.0 5.697180 2.553174e-02
x3 29.484767 1.0 10.397808 3.097430e-03
Residual 34.042981 25.0 NaN NaN
```
可以看到,三种成分中,酚类含量 x3 对口感度 y 的影响最大,其 F 统计量为 10.3978,p 值为 0.0031,显著性水平较高。
最后,我们可以使用训练好的模型来预测某个新品红酒的口感度。假设该红酒三种成分含量分别为 x1=243,x2=64.7,x3=190.2。
```python
# 进行预测
new_data = [[243, 64.7, 190.2]]
new_y_pred = model.predict(new_data)
print('预测的口感度为:', new_y_pred[0])
```
运行结果:
```
预测的口感度为: 2.567803213115261
```
因此,预测的口感度为 2.5678。
阅读全文