【机器学习实战】线性回归之北京市住房价格预测

数据集读取与划分

数据集读取

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^)=ni=1nyiyiy^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 值较大,意味着预测的偏移量较大。在线性回归实验中,我们提到预测结果较差的一个原因可能是数据没有经过预处理。除此之外,线性回归本身就是一种非常基础简单的预测方法。对于房价这种包含多个特征的预测问题,我们往往要使用更复杂的方法来进行回归预测才能得到更好的结果。

posted @ 2020-09-05 21:41  ccql  阅读(17)  评论(0编辑  收藏  举报  来源