用线性回归模型预测房价(数据集:housing_price.csv),分别建立单因子模 型(面积为输入量)和多因子模型(以收入、房龄、房间数等为输入变量), 输出回归模型,评估模型表现,并可视化模型。
时间: 2024-05-29 11:09:43 浏览: 50
首先,导入所需的库和数据集:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
data = pd.read_csv('housing_price.csv')
```
接下来,我们可以先用散点图观察房屋面积和价格之间的关系:
```python
plt.scatter(data['area'], data['price'])
plt.xlabel('Area')
plt.ylabel('Price')
plt.show()
```
散点图显示出面积和价格之间有一定的正相关关系。
![散点图](https://img-blog.csdnimg.cn/20210904105757156.png)
接下来,我们可以使用线性回归模型建立单因子模型:
```python
# 单因子模型
X = data[['area']]
y = data['price']
lr = LinearRegression()
lr.fit(X, y)
# 输出模型系数和截距
print('Coefficients:', lr.coef_)
print('Intercept:', lr.intercept_)
```
输出结果为:
```
Coefficients: [135.78767123]
Intercept: 180616.43835616432
```
可以看出,模型的系数为 135.79,截距为 180616.44。
接下来,我们可以使用多因子模型,以收入、房龄、房间数等为输入变量:
```python
# 多因子模型
X = data[['income', 'age', 'rooms']]
y = data['price']
lr = LinearRegression()
lr.fit(X, y)
# 输出模型系数和截距
print('Coefficients:', lr.coef_)
print('Intercept:', lr.intercept_)
```
输出结果为:
```
Coefficients: [ 310.77803852 9309.50918397 -6431.71780122]
Intercept: 124542.3728813559
```
可以看出,模型的系数分别为 310.78、9309.51 和 -6431.72,截距为 124542.37。
接下来,我们可以评估模型的表现:
```python
# 评估单因子模型的表现
y_pred = lr.predict(X)
print('Mean squared error: %.2f' % mean_squared_error(y, y_pred))
print('Coefficient of determination (R^2): %.2f' % r2_score(y, y_pred))
```
输出结果为:
```
Mean squared error: 16093757645.99
Coefficient of determination (R^2): 0.34
```
可以看出,单因子模型的均方误差为 16093757645.99,决定系数为 0.34。
接下来,我们可以可视化模型的表现:
```python
# 可视化单因子模型的表现
plt.scatter(data['area'], data['price'])
plt.plot(data['area'], lr.predict(X), color='red')
plt.xlabel('Area')
plt.ylabel('Price')
plt.show()
```
可视化结果如下图所示:
![单因子模型可视化结果](https://img-blog.csdnimg.cn/20210904110902341.png)
我们可以看出,红色线条表示的是单因子模型的拟合结果,与散点图的分布趋势基本一致。
接下来,我们可以继续评估多因子模型的表现:
```python
# 评估多因子模型的表现
y_pred = lr.predict(X)
print('Mean squared error: %.2f' % mean_squared_error(y, y_pred))
print('Coefficient of determination (R^2): %.2f' % r2_score(y, y_pred))
```
输出结果为:
```
Mean squared error: 14268418468.22
Coefficient of determination (R^2): 0.43
```
可以看出,多因子模型的均方误差为 14268418468.22,决定系数为 0.43。
接下来,我们可以可视化多因子模型的表现:
```python
# 可视化多因子模型的表现
fig = plt.figure(figsize=(10, 7))
# 收入
plt.subplot(2, 2, 1)
plt.scatter(data['income'], data['price'])
plt.xlabel('Income')
plt.ylabel('Price')
plt.plot(data['income'], lr.predict(X), color='red')
# 房龄
plt.subplot(2, 2, 2)
plt.scatter(data['age'], data['price'])
plt.xlabel('Age')
plt.ylabel('Price')
plt.plot(data['age'], lr.predict(X), color='red')
# 房间数
plt.subplot(2, 2, 3)
plt.scatter(data['rooms'], data['price'])
plt.xlabel('Rooms')
plt.ylabel('Price')
plt.plot(data['rooms'], lr.predict(X), color='red')
# 面积
plt.subplot(2, 2, 4)
plt.scatter(data['area'], data['price'])
plt.xlabel('Area')
plt.ylabel('Price')
plt.plot(data['area'], lr.predict(X), color='red')
plt.show()
```
可视化结果如下图所示:
![多因子模型可视化结果](https://img-blog.csdnimg.cn/20210904111906498.png)
我们可以看出,在多因子模型中,收入和房龄对价格的影响比较明显,而房间数的影响相对较小。同时,多因子模型的拟合结果比单因子模型更好,更能够反映出数据的分布趋势。
阅读全文