【机器学习实战】线性回归之北京市住房价格预测
数据集读取与划分
数据集读取
import pandas as pd
### 代码开始 ### (≈ 2 行代码)
df=pd.read_csv("https://labfile.oss.aliyuncs.com/courses/1081/challenge-1-beijing.csv")
df.head()
### 代码结束 ###
数据集划分
features = df[['公交','写字楼','医院','商场','地铁','学校','建造时间','楼层','面积']]
target = df['每平米价格']
split_num = int(len(df)*0.7) # 70% 分割数
X_train = features[:split_num]# 训练集特征
y_train = target[:split_num]# 训练集目标
X_test = features[split_num:]# 测试集特征
y_test = target[split_num:]# 测试集目标
模型训练及预测
from sklearn.linear_model import LinearRegression
### 代码开始 ### (≈ 2 行代码)
model = LinearRegression()# 模型
model.fit(X_train, y_train)# 模型训练
### 代码结束 ###
模型评价
平均绝对百分比误差MAPE 是一个百分比值,因此比其他统计量更容易理解。例如,如果 MAPE 为 5,则表示预测结果较真实结果平均偏离
5%。MAPE 的计算公式如下: MAPE ( y , y ^ ) = ∑ i = 1 n ∣ y i − y ^ i y i ∣ n × 100 \textrm{MAPE}(y, \hat{y} ) = \frac{\sum_{i=1}^{n}{|\frac{y_{i}-\hat y_{i}}{y_{i}}|}}{n} \times 100 MAPE(y,y^)=n∑i=1n∣yiyi−y^i∣×100
其中, y i y_{i} yi 表示真实值, y ^ i \hat y_{i} y^i 表示预测值, n n n 则表示值的个数。MAPE 的值越小,说明预测模型拥有更好的精确度。
import numpy as np
def mape(y_true, y_pred):
"""
参数:
y_true -- 测试集目标真实值
y_pred -- 测试集目标预测值
返回:
mape -- MAPE 评价指标
"""
mape = sum(np.abs((y_true-y_pred)/y_true))/len(y_true)*100
return mape
y_true = y_test.values# 测试集目标
y_pred = model.predict(X_test)# 预测结果
mape(y_true, y_pred)# 平均绝对百分比误差
输出:45.5061885467624
可以看到,最终得到的 MAPE 值较大,意味着预测的偏移量较大。在线性回归实验中,我们提到预测结果较差的一个原因可能是数据没有经过预处理。除此之外,线性回归本身就是一种非常基础简单的预测方法。对于房价这种包含多个特征的预测问题,我们往往要使用更复杂的方法来进行回归预测才能得到更好的结果。